XXE-ін’єкція
Завантажений XML-файл, який читає власні файли сервера.
Що таке XXE-ін’єкція?
XXE перетворює синтаксичний аналізатор XML на примітив для читання файлів і підробки запитів. Зловмисник оголошує об’єкт SYSTEM у DOCTYPE, а синтаксичний аналізатор вставляє локальний файл або відповідь внутрішньої URL-адреси, перш ніж ваш код побачить документ. Це робить його помилкою конфігурації аналізатора, а не форми введення. Ви вказуєте завантаження замовлення на купівлю на file:///etc/passwd і читаєте його назад у полі відтвореного постачальника. Потім ви виправляєте libxmljs.parseXml(..., { noent: true }) : відхиляєте DOCTYPE і декларації сутностей і виконуєте синтаксичний аналіз із вимкненим розпізнаванням зовнішніх сутностей і DTD.
Що ви дізнаєтесь у XXE-ін’єкція
- Визнати XXE помилкою конфігурації парсера, а не помилкою форми введення
- Прочитайте корисне навантаження XML і визначте декларацію SYSTEM-entity, яка робить його небезпечним
- Зрозумійте, що XXE узагальнює від читання локального файлу до отримання внутрішньої URL-адреси (SSRF)
- Застосуйте виправлення рівня синтаксичного аналізатора (вимкніть роздільну здатність зовнішніх об’єктів) і елементи керування глибинним захистом рівня поверх
- Аудит кожного сайту виклику синтаксичного аналізу XML для того самого прапора, коли його знайдено
XXE-ін’єкція — Кроки навчання
-
Знайдіть функцію всмоктування
Brackwell Logistics дозволяє будь-якому зареєстрованому постачальнику надсилати замовлення на купівлю, завантажуючи його як XML-файл. Форма приймає документ, аналізує його на серверах Brackwell і зчитує постачальника та загальну суму. Боб відкриває функцію, щоб побачити, як вона поводиться, перш ніж торкнутися її.
-
Де відбувається розбір
Один рядок на цій сторінці — вся причина, чому Боб зацікавлений.
-
Завантажте звичайне замовлення
По-перше, спостерігайте за нормальною поведінкою функції. Боб додає звичайне замовлення на купівлю та надсилає його. Панель «Мережа» браузера записує запит і відповідь сервера, саме те, що розробник бачить у DevTools.
-
Те, що аналізатор повторив
Замовлення розібрано чисто. Одна деталь у відповіді говорить Бобу, як атакувати.
-
Почати зі звичайного файлу
Боб відкриває звичайне замовлення на покупку у своєму редакторі. Зараз це саме те, що виглядає: постачальник і загальні прості дані. XML дозволяє документу оголосити зовнішню сутність, іменований заповнювач, значення якого аналізатор отримує з іншого місця. Боб збирається додати один.
-
Озброїти файл
Боб додає DOCTYPE, який оголошує зовнішню сутність, що вказує на файл на диску, а потім вказує поле постачальника на цю сутність. Файл все ще аналізується як замовлення на купівлю. Він починає з файлу, який є в кожній системі Linux, щоб довести, що парсер узагалі дотримується посилання.
-
Сутність
Для цього знадобилося лише два рядки.
-
Завантажте створений файл
Боб надсилає свій створений файл через ту саму функцію прийому. Для браузера це просто ще одне завантаження замовлення на покупку.
-
Файл повертається
Відповідь не є назвою постачальника. Це файл паролів сервера, який зчитується з диска та передається назад через звичайний вихід завантаження.
-
Перевірка знань
Ви щойно спостерігали, як завантаження замовлення на купівлю читає файли сервера. Зафіксуйте чому.
Охоплення стандартів безпеки
OWASP Top 10
- A02:2025 Security Misconfiguration
- A05:2021 Security Misconfiguration
CWE
- CWE-611 Improper Restriction of XML External Entity Reference
- CWE-918 Server-Side Request Forgery (SSRF)
CIS Controls
- CIS 16 Application Software Security
NIST CSF
- PR.AT-02 Individuals in specialized roles are provided with awareness and training so that they possess the knowledge and skills to perform relevant tasks with cybersecurity risks in mind
- PR.PS Platform Security