XXE-ін’єкція (впровадження зовнішніх сутностей XML) — вразливість, за якої XML-парсер обробляє задані зловмисником сутності з посиланнями на локальні файли чи URL, що веде до витоку даних або запитів від імені сервера.
Як працює XXE-ін’єкція
XML дає змогу у визначенні типу документа (DTD) оголошувати сутності — заповнювачі, які парсер замінює вмістом. Зовнішня сутність бере цей вміст за URI. Якщо парсер приймає DTD із недовірених даних, зловмисник може надіслати, наприклад:
<!DOCTYPE x [<!ENTITY xxe SYSTEM "file:///etc/passwd">]><x>&xxe;</x>
Сервер прочитає файл і може повернути його у відповіді. Ваду описано як CWE-611. Залежно від парсера й налаштувань XXE може призвести до:
- читання конфігураційних файлів, вихідного коду й облікових даних — за аналогією з обходом каталогу;
- підробки запитів на боці сервера до внутрішніх сервісів і хмарних сервісів метаданих;
- «сліпої» ексфільтрації даних через зовнішні DNS- чи HTTP-запити (out-of-band);
- відмови в обслуговуванні через рекурсивне розгортання сутностей (атака «billion laughs»), а в рідкісних випадках — до виконання коду.
Чому це важливо
XML ховається в багатьох місцях: вебсервісах SOAP, повідомленнях єдиного входу SAML, RSS-стрічках, зображеннях SVG та офісних документах DOCX і XLSX, які є ZIP-архівами з XML-файлами. Старі парсери в Java, .NET і PHP обробляли зовнішні сутності за замовчуванням. В OWASP Top 10 2017 року XXE мала власну категорію (A4), а тепер вона входить до Security Misconfiguration.
Як запобігти
- Вимкнути обробку DTD і розв’язання зовнішніх сутностей в усіх XML-парсерах.
- Використовувати захищені бібліотеки, наприклад defusedxml для Python, і вчасно оновлювати парсери.
- Обирати простіші формати на кшталт JSON там, де XML не обов’язковий.
- Перевіряти завантажувані файли й обмежувати вихідні з’єднання серверів.





