Mastodon Mastodon Mastodon Mastodon

XXE-ін’єкція [XXE]

Оновлено: · CyberSecureFox Editorial Team

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 не обов’язковий.
  • Перевіряти завантажувані файли й обмежувати вихідні з’єднання серверів.
Синоніми:
впровадження зовнішніх сутностей xml, xml external entity, xxe-атака, xxe injection