XXE-ін'єкція

XXE-ін'єкція

Завантажений XML-файл, що читає власні файли сервера.

Що таке XXE-ін'єкція?

XXE (ін'єкція зовнішніх сутностей XML) перетворює XML-парсер на інструмент читання файлів і підробки запитів. Зловмисник оголошує сутність SYSTEM у DOCTYPE, а парсер вставляє локальний файл або відповідь внутрішнього URL ще до того, як ваш код побачить документ. Тому це помилка конфігурації парсера, а не вхідних даних. Ви спрямуєте завантаження замовлення на закупівлю на file:///etc/passwd і прочитаєте цей файл у полі vendor, яке повертається у відповіді. Потім виправите виклик libxmljs.parseXml(..., { noent: true }) : відхилятимете оголошення DOCTYPE і сутностей, а XML розбиратимете з вимкненим розгортанням зовнішніх сутностей і DTD.

Що ви дізнаєтесь у XXE-ін'єкція

XXE-ін'єкція — Кроки навчання

  1. Знайдіть функцію приймання

    Brackwell Logistics дозволяє будь-якому зареєстрованому постачальнику подати замовлення на закупівлю, завантаживши його як XML-файл. Форма приймає документ, розбирає його на серверах Brackwell і повертає постачальника та суму. Боб відкриває функцію, щоб побачити, як вона поводиться, перш ніж за неї братися.

  2. Де відбувається розбір

    Увесь інтерес Боба до цієї сторінки зводиться до одного рядка.

  3. Завантажте звичайне замовлення

    Спершу подивіться, як функція працює штатно. Боб прикріплює звичайне замовлення на закупівлю й надсилає його. Вкладка «Network» («Мережа») у браузері записує запит і відповідь сервера — те, що розробник бачить у DevTools.

  4. Що повернув парсер

    Замовлення розібралося без помилок. Одна деталь у відповіді підказує Бобові, як атакувати цю функцію.

  5. Почніть зі звичайного файлу

    Боб відкриває звичайне замовлення на закупівлю у своєму редакторі. Поки що воно саме таке, яким здається: постачальник і сума, прості дані. XML дозволяє документові оголосити зовнішню сутність — іменований заповнювач, значення якого парсер бере з іншого місця. Боб якраз збирається додати таку сутність.

  6. Озбройте файл

    Боб додає DOCTYPE, який оголошує зовнішню сутність, що вказує на файл на диску, а потім спрямовує поле vendor на цю сутність. Файл усе ще розбирається як замовлення на закупівлю. Боб починає з файлу, який є в кожній системі Linux, щоб довести, що парсер узагалі розгортає таке посилання.

  7. Сутність

    Вистачило двох рядків.

  8. Завантажте спеціально створений файл

    Боб надсилає свій спеціально створений файл через ту саму функцію приймання. Для браузера це просто ще одне завантаження замовлення на закупівлю.

  9. Файл повертається

    Відповідь — це не ім'я постачальника, а файл паролів сервера: сервер прочитав його з диска й повернув прямо у звичайній відповіді на завантаження.

  10. Перевірка знань

Охоплення стандартів безпеки

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