Внедрение кода
Что такое Внедрение кода?
Внедрение кодаКласс уязвимостей, при которых данные от злоумышленника интерпретируются и выполняются приложением как код, что ведёт к произвольному выполнению.
Внедрение кода (CWE-94) — широкое семейство уязвимостей, при которых недоверенный ввод попадает туда, где приложение позже трактует его как программный код, в результате чего среда выполнения исполняет его. В отличие от внедрения команд (которое достигает шелла ОС), внедрение кода выполняется внутри собственного интерпретатора приложения. Конкретные виды включают eval-инъекции в JavaScript и Python, серверные шаблонные инъекции, инъекции языков выражений (OGNL, SpEL), небезопасную десериализацию с цепочками gadget'ов и динамическую загрузку классов из пользовательских данных. Успешная эксплуатация обычно даёт удалённое выполнение кода с правами приложения, что часто становится трамплином к компрометации хоста или кластера.
Три знаковых случая показывают последствия. Apache Struts CVE-2017-5638 позволяла выполнять выражения OGNL в некорректном заголовке Content-Type; неисправленный экземпляр вызвал утечку Equifax 2017 года, раскрывшую ~147 млн записей. Log4Shell (CVE-2021-44228), CVSS 10.0, превращала любую записанную в лог строку с JNDI-lookup в удалённую загрузку Java-класса. Spring4Shell (CVE-2022-22965) злоупотребляла привязкой данных Spring, манипулируя ClassLoader и размещая веб-шелл.
flowchart TD
A[Недоверенный ввод] --> B{Достигает ли точки, вычисляющей код?}
B -->|eval / шаблон / OGNL / десериализация| C[Интерпретатор выполняет код атакующего]
B -->|Проверен / параметризован| D[Обрабатывается как инертные данные]
C --> E[RCE с правами приложения]
E --> F[Компрометация хоста / кластера]
D --> G[Безопасно]Защита: никогда не строить код, шаблоны или выражения из ввода; использовать параметризованные API со списками разрешений; отключать или изолировать динамическое вычисление и десериализацию; своевременно обновлять фреймворки; и работать с минимальными привилегиями, чтобы RCE имело наименьший возможный охват.
● Примеры
- 01
eval(request.body.expr) выполняет управляемый атакующим JavaScript в Node-сервисе.
- 02
Java-приложение вызывает ScriptEngine.eval над пользовательским скриптом.
● Частые вопросы
Что такое Внедрение кода?
Класс уязвимостей, при которых данные от злоумышленника интерпретируются и выполняются приложением как код, что ведёт к произвольному выполнению. Относится к категории Атаки и угрозы в кибербезопасности.
Что означает Внедрение кода?
Класс уязвимостей, при которых данные от злоумышленника интерпретируются и выполняются приложением как код, что ведёт к произвольному выполнению.
Как защититься от Внедрение кода?
Защита от Внедрение кода обычно сочетает технические меры и операционные практики, как описано в определении выше.
Какие есть другие названия Внедрение кода?
Распространённые альтернативные названия: Удалённое выполнение кода, Произвольное выполнение кода.