Eval-инъекция
Что такое Eval-инъекция?
Eval-инъекцияКонкретный подвид внедрения кода, возникающий при передаче недоверенного ввода в примитивы динамического выполнения вроде JavaScript eval() или Python eval/exec.
Eval-инъекция — конкретный подвид внедрения кода, при котором функция динамического выполнения языка — JavaScript eval, new Function, setTimeout со строкой, Python eval/exec, Ruby eval, эквиваленты PHP, VBA Application.Run — вызывается с данными, прямо или косвенно поступившими от пользователя. Поскольку такие примитивы интерпретируют переданную строку как полноценный исходный код в процессе приложения, успешная эксплуатация даёт полный RCE на уровне языка: доступ к импортам, глобалам, файловой системе, переменным окружения и подпроцессам. Меры защиты — полностью отказаться от динамического выполнения, перейти на безопасные парсеры (JSON.parse, ast.literal_eval), использовать строгий белый список при оценке выражений, применять песочницы (vm2) или ограниченные подпроцессы.
● Примеры
- 01
Python: result = eval(request.form['expr']) — нагрузка __import__('os').system('id').
- 02
Node: new Function('return ' + req.query.f)() — нагрузка process.mainModule.require('child_process').execSync('id').
● Частые вопросы
Что такое Eval-инъекция?
Конкретный подвид внедрения кода, возникающий при передаче недоверенного ввода в примитивы динамического выполнения вроде JavaScript eval() или Python eval/exec. Относится к категории Атаки и угрозы в кибербезопасности.
Что означает Eval-инъекция?
Конкретный подвид внедрения кода, возникающий при передаче недоверенного ввода в примитивы динамического выполнения вроде JavaScript eval() или Python eval/exec.
Как работает Eval-инъекция?
Eval-инъекция — конкретный подвид внедрения кода, при котором функция динамического выполнения языка — JavaScript eval, new Function, setTimeout со строкой, Python eval/exec, Ruby eval, эквиваленты PHP, VBA Application.Run — вызывается с данными, прямо или косвенно поступившими от пользователя. Поскольку такие примитивы интерпретируют переданную строку как полноценный исходный код в процессе приложения, успешная эксплуатация даёт полный RCE на уровне языка: доступ к импортам, глобалам, файловой системе, переменным окружения и подпроцессам. Меры защиты — полностью отказаться от динамического выполнения, перейти на безопасные парсеры (JSON.parse, ast.literal_eval), использовать строгий белый список при оценке выражений, применять песочницы (vm2) или ограниченные подпроцессы.
Как защититься от Eval-инъекция?
Защита от Eval-инъекция обычно сочетает технические меры и операционные практики, как описано в определении выше.
Какие есть другие названия Eval-инъекция?
Распространённые альтернативные названия: Инъекция eval(), Инъекция динамического выполнения.
● Связанные термины
- attacks№ 195
Внедрение кода
Класс уязвимостей, при которых данные от злоумышленника интерпретируются и выполняются приложением как код, что ведёт к произвольному выполнению.
- attacks№ 1009
Инъекция серверных шаблонов
Атака, при которой синтаксис шаблонизатора попадает в недоверенный ввод и приводит к выполнению кода на сервере при рендеринге шаблона.
- attacks№ 202
Внедрение команд
Атака, при которой пользовательский ввод без фильтрации передаётся в системный шелл, и приложение выполняет команды, заданные злоумышленником.
- vulnerabilities№ 539
Небезопасная десериализация
Уязвимость, при которой приложение десериализует недоверенные данные, позволяя атакующему создавать произвольные объекты и часто получать удалённое выполнение кода.
- appsec№ 538
Валидация ввода
Серверная проверка того, что каждый недоверенный ввод соответствует ожидаемому типу, длине, диапазону, формату и набору значений до его обработки приложением.