Prototype Pollution: безопасное объединение объектов JavaScript
Как недоверенные ключи влияют на прототипы JavaScript и почему опасны универсальные deep merge и присваивание по пользовательскому пути.
Коротко о главном
- Чем опасно
- Изменение поведения обработки конфигурации.
- С чего начать защиту
- Валидируйте объект по разрешённой схеме вместо универсального merge.
- Как подтвердить
- Нужны ручной аудит и проверка реализации. Отсутствие находок во внешнем скане не подтверждает безопасность.
В этой статье
- Продукт
- Веб-приложения
- Оценка риска
- Уровень зависит от конфигурации
Как проверить и что учитывать
Нужна ручная проверка
Для подтверждения нужны анализ реализации и проверки на согласованном тестовом контуре. Публикация не означает автоматическое обнаружение этого сценария FindRisk. Не делайте вывод о наличии уязвимости только по одному внешнему признаку: подтвердите результат в настройках и версии компонента.
Что нужно для подтверждения
В отдельном процессе протестируйте парсер, merge и вложенные присваивания. После недоверенного ввода прототипы и свойства свежих объектов должны оставаться неизменными; проверяйте также чтение унаследованных настроек.
Ограничения вывода
- Внешний ответ не раскрывает все роли, обработчики и настройки внутренних компонентов.
- Используйте только свои системы или письменное разрешение владельца; нагрузочные проверки согласуйте отдельно.
Что это за уязвимость
При небезопасной работе с ключами входного объекта код может изменить прототип вместо обычного свойства. Последующий код читает унаследованные значения как настройки или признаки доступа.
Когда возникает риск
Для реального ущерба нужна не только возможность записи, но и место использования изменённых свойств. Блокирование одного ключа не заменяет анализ вложенных путей и поддерживаемой библиотеки.
Возможные последствия
Как недоверенные ключи влияют на прототипы JavaScript и почему опасны универсальные deep merge и присваивание по пользовательскому пути.
- Изменение поведения обработки конфигурации.
- Нарушение бизнес-правил или работы приложения при наличии подходящего потребителя свойств.
Как защитить приложение
Исправляйте причину в обработчике, а не только внешний симптом.
- Валидируйте объект по разрешённой схеме вместо универсального merge.
- Обновите библиотеки и запретите опасные пути прототипа на каждом уровне.
- Для словарей используйте Map или объекты без прототипа и проверяйте собственные свойства.
Как безопасно проверить исправление
В отдельном процессе протестируйте парсер, merge и вложенные присваивания. После недоверенного ввода прототипы и свойства свежих объектов должны оставаться неизменными; проверяйте также чтение унаследованных настроек.
Оценка риска и границы сканирования
Средний уровень — ориентировочная редакционная оценка, не CVSS подтверждённой находки. Для конкретной системы приоритет зависит от доступных данных, полномочий и компенсирующих мер; последствия могут быть значительно серьёзнее.
Отсутствие находки во внешнем скане не доказывает безопасность реализации. Проверяйте сценарии после входа, альтернативные маршруты и внутренние сервисы.
Как проходит проверка
Для подтверждения нужны анализ реализации и проверки на согласованном тестовом контуре. Публикация не означает автоматическое обнаружение этого сценария FindRisk. Автоматический результат показывает внешний признак риска и требует проверки специалистом с учётом конкретной конфигурации.
Проверить другие внешние рискиЧто делать после обнаружения
- Зафиксируйте затронутый сценарий и сохраните журналы без токенов и персональных данных.
- Ограничьте проблемный обработчик, оцените доступные данные и назначьте владельца исправления.
- Устраните первопричину и добавьте регрессионную проверку на тестовых данных.
Частые вопросы
Что означает риск «Prototype Pollution»?
Как недоверенные ключи влияют на прототипы JavaScript и почему опасны универсальные deep merge и присваивание по пользовательскому пути.
Можно ли подтвердить проблему только внешней проверкой?
Для подтверждения нужны анализ реализации и проверки на согласованном тестовом контуре. Публикация не означает автоматическое обнаружение этого сценария FindRisk. Итог нужно сопоставить с конфигурацией, версиями и правами доступа на вашем сайте.
Что сделать в первую очередь?
Валидируйте объект по разрешённой схеме вместо универсального merge.