Уязвимости массового назначения возникают в тех случаях, когда пользователь может инициализировать или перезаписать переменные на стороне сервера, для которых приложение не предназначено.
Вручную формируя запрос с включением в него дополнительных параметров, злоумышленник может негативно повлиять на функциональность приложения.
Общие причины возникновения уязвимостей массового назначения могут быть следующими:
- Функции “автопривязки” на уровне фреймворка. 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}
В приведенном выше примере предоставлен массив, а ожидалось одно строковое значение.
Это может иметь значительные последствия для безопасности доступа к учетным записям и ассоциациям.
см. также:
- 🐍 Использование файла .env в FastAPI
- 🌐 Open Source Insights (deps.dev)- Новый API-сервис Google для идентификации уязвимостей пакетов с открытым исходным кодом
- 🕷️ Безопасность API для разработчиков
- 🌐 OWASP APICheck – набор инструментов DevSecOps для HTTP API
- 🐧 Secretx – извлечение ключей и секретов API путем запроса каждого URL