📄 XXE: Как XML-документ убивает сервер
Кратко: XXE (XML External Entity) — уязвимость, которая позволяет хакеру читать файлы на сервере, атаковать внутренние сети и даже класть сервер. Всё это — через безобидный на вид XML-документ. Старая, но живучая болячка. До сих пор работает во многих корпоративных системах 2026 года.
▫️ Как это работает В XML есть «сущности» — переменные, которые можно определить и использовать повторно. Хакер определяет сущность, которая тянет файл /etc/passwd, и вставляет её в документ. Парсер добросовестно читает файл и подставляет содержимое. Вот как выглядит такой XML:
]>
&xxe;
Если парсер разрешает внешние сущности — сервер отдаст содержимое /etc/passwd в ответе.
▫️ Что можно сделать · file:// — читать локальные файлы (конфиги, пароли, ключи) · http:// — сканировать внутреннюю сеть и воровать секреты из облачных метаданных (169.254.169.254) · «Миллиард улыбок» (Billion Laughs) — вложенные сущности, которые раздувают документ до гигабайт. Сервер падает от нехватки памяти
▫️ Где искать Любое место, где приложение принимает XML от пользователя: · SOAP API (до сих пор живут в банках и ERP) · REST API, которые принимают XML наравне с JSON · Парсеры RSS-лент · Электронный документооборот (EDI)
▫️ Мировые кейсы · PayPal (2023) — XXE в SOAP API позволяла читать конфиги и внутренние файлы · Citrix (2024) — XXE давала доступ к хост-системе виртуальных машин · Google (2020) — XXE в сервисе конвертации документов читала любые файлы на сервере
▫️ Итог XXE — старая, но не мёртвая уязвимость. XML до сих пор жив в корпоративных системах, финансовых API и устаревших протоколах. Почти каждый стандартный парсер по умолчанию включал внешние сущности — поэтому дыра до сих пор открыта там, где ленились править конфиги. Не доверяйте XML от пользователей. Отключайте DTD. И помните про «миллиард улыбок» — не дайте вашему серверу умереть от смеха.