Загрязнение прототипа
Что такое Загрязнение прототипа?
Загрязнение прототипаJavaScript-уязвимость, при которой недоверенный ввод изменяет Object.prototype, добавляя свойства всем объектам и меняя поведение приложения вплоть до RCE.
Загрязнение прототипа эксплуатирует цепочку прототипов JavaScript: при установке ключей proto, constructor.prototype или prototype в операциях merge/clone/assign атакующий мутирует Object.prototype, и все обычные объекты наследуют эти свойства. Чаще всего проблема встречается в рекурсивных утилитах слияния, deep clone, парсерах query string и шаблонизаторах, принимающих пользовательский JSON. Последствия — от DoS и обхода аутентификации до RCE, если «отравленные» свойства влияют на проверки безопасности (isAdmin, sandbox, опции рендеринга). Значимые CVE: lodash CVE-2019-10744 и многие пакеты Node.js. Защита: отклонять ключи proto/constructor, использовать Map или Object.create(null) для недоверенных данных, замораживать прототип, выбирать безопасные библиотеки.
● Примеры
- 01
POST {"__proto__":{"isAdmin":true}} на эндпоинт JSON-merge — и пользователь становится админом везде.
- 02
Загрязнение прототипа меняет опции рендеринга шаблонов и приводит к RCE.
● Частые вопросы
Что такое Загрязнение прототипа?
JavaScript-уязвимость, при которой недоверенный ввод изменяет Object.prototype, добавляя свойства всем объектам и меняя поведение приложения вплоть до RCE. Относится к категории Уязвимости в кибербезопасности.
Что означает Загрязнение прототипа?
JavaScript-уязвимость, при которой недоверенный ввод изменяет Object.prototype, добавляя свойства всем объектам и меняя поведение приложения вплоть до RCE.
Как защититься от Загрязнение прототипа?
Защита от Загрязнение прототипа обычно сочетает технические меры и операционные практики, как описано в определении выше.
Какие есть другие названия Загрязнение прототипа?
Распространённые альтернативные названия: Загрязнение Object.prototype, Инъекция __proto__.