🌐 Уязвимость массового назначения API |

🌐 Уязвимость массового назначения API

Закрытие уязвимостей

Уязвимости массового назначения возникают в тех случаях, когда пользователь может инициализировать или перезаписать переменные на стороне сервера, для которых приложение не предназначено.

Вручную формируя запрос с включением в него дополнительных параметров, злоумышленник может негативно повлиять на функциональность приложения.

Общие причины возникновения уязвимостей массового назначения могут быть следующими:

  • Функции “автопривязки” на уровне фреймворка. Spring и .NET MVC – два из многих фреймворков, которые позволяют напрямую привязывать HTTP-параметры к объектам модели. Хотя эта возможность полезна для легкого задания значений на стороне сервера, она не предотвращает внедрение произвольных параметров.
  • Разбор тела запроса как объекта. Хотя скопировать объект проще, чем выбирать множество отдельных значений в нем, такой практики следует избегать. При использовании таких форматов данных, как JSON, разработчики должны извлекать только те значения, которые предназначены для изменения пользователями.

Ниже показан типичный пример этой уязвимости в конечной точке регистрации пользователей:

POST /api/register HTTP/1.1
[..]
{“email”:”user1@example.com”}
HTTP/1.1 200 OK
[..]
{”userid”:”112345”,“email”:”user1@example.com”,”email_verified”:false}

Злонамерный пользователь может захотеть обойти проверку электронной почты по ряду причин.

Чтобы атаковать эту конечную точку, в тело запроса вставляется значение:

POST /api/register HTTP/1.1
[..]
{“email”:”user2@example.com”,”email_verified”:true}
HTTP/1.1 200 OK
[..]
{”userid”:”112346”,“email”:”user2@example.com”,”email_verified”:true}

Разработчики также должны убедиться, что значения не содержат вложенных объектов или массивов, которые могут нарушить логику приложения.

Ниже показан другой стиль атаки с использованием массивов JSON:

POST /api/register HTTP/1.1
[..]
{“email”:[”user3@example.com”,”user4@example.com”]}
HTTP/1.1 200 OK
[..]
{”userid”:”112347”,“email”:[”user3@example.com”,”user4@example.com”],”email_verified”:false}

В приведенном выше примере предоставлен массив, а ожидалось одно строковое значение.

Это может иметь значительные последствия для безопасности доступа к учетным записям и ассоциациям.

см. также:

 

Пожалуйста, не спамьте и никого не оскорбляйте. Это поле для комментариев, а не спамбокс. Рекламные ссылки не индексируются!
Добавить комментарий