Впровадження коду (code injection) — клас атак, під час яких зловмисник передає вхідні дані, що їх застосунок помилково виконує як програмний код.
Як працює впровадження коду
Корінь проблеми — змішування даних і коду. Якщо застосунок збирає код із введення користувача — наприклад, передає його у функцію eval() у PHP, JavaScript чи Python або вставляє в шаблон, — зловмисник може додати власні інструкції. Слабкість описано як CWE-94. Споріднені варіанти:
- Впровадження команд ОС (CWE-78) — введення потрапляє до команди системної оболонки.
- Ін’єкція в серверні шаблони (SSTI) — введення виконують шаблонізатори на кшталт Jinja2 або Twig.
- Ін’єкція в мови виразів — наприклад, OGNL-ін’єкція в Apache Struts, через яку 2017 року зламали Equifax.
- SQL-ін’єкція та міжсайтовий скриптинг, де впроваджується запит до бази даних або скрипт для браузера.
Помилка Shellshock у Bash (2014) показала масштаб проблеми: спеціально сформовані змінні оточення змушували Bash виконувати команди на вебсерверах, роутерах та інших пристроях.
Чому це важливо
Успішне впровадження коду зазвичай означає віддалене виконання коду з правами застосунку: викрадення даних, веб-шелли, майнери або плацдарм для шифрувальника. Ін’єкції входять до OWASP Top 10 від першого видання й лишаються улюбленою ціллю автоматичних сканерів. Близький родич — небезпечна десеріалізація, яка теж перетворює дані на виконуваний код.
Як запобігти
- Ніколи не передавати введення користувача у функції типу eval та в оболонку; використовувати безпечні API і параметризовані запити.
- Перевіряти введення за суворими білими списками й екранувати виведення з урахуванням контексту.
- Запускати застосунки з мінімальними правами та ізолювати шаблонізатори.
- Використовувати статичний аналіз і тестування безпеки, щоб знаходити точки впровадження заздалегідь.