
Практическое исследование управления уязвимостями: как Wazuh обнаружил реальный SSRF (CVE-2025-68616) в WeasyPrint, и как я воспроизвёл и исправил его.
Во время личного практического упражнения с Wazuh (открытый SIEM/XDR) на машине Kali Linux модуль Обнаружение уязвимостей выявил уязвимость высокой (CVSS 7.5) степени серьезности в пакете WeasyPrint: обход защиты SSRF (CVE-2025-68616). Я исследовал находку, воспроизвел проблему с локальным доказательством концепции, применил пропатченную версию проекта и убедился, что эксплуатация больше не работает. Этот репозиторий документирует весь процесс: обнаружение, анализ, PoC и устранение.
Wazuh — это платформа безопасности с открытым исходным кодом (SIEM + XDR), которая объединяет, среди прочего, сбор журналов, мониторинг целостности файлов (FIM), обнаружение аномалий и обнаружение уязвимостей для программного обеспечения, установленного на отслеживаемых хостах, сверяя инвентарь пакетов с базами данных CVE (NVD и другими).
В этом упражнении агент Wazuh работал на машине Kali GNU/Linux 2025.4, при этом менеджер, индексатор и панель управления также работали локально. До обнаружения находки в среде уже работал активный мониторинг: сеансы входа PAM, выполнение sudo, изменения прослушиваемых портов и события аномалий rootcheck — все было видно в модуле Охота за угрозами.
Модуль Обнаружение уязвимостей в Wazuh сообщил об одной уязвимости высокой степени серьезности на агенте Kali, связанной с пакетом weasyprint.
WeasyPrint — это библиотека Python, которая преобразует HTML/CSS в PDF-документы, широко используемая для создания отчетов, счетов и динамических документов из веб-приложений.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:Ncpe:2.3:a:kozea:weasyprint:*:*:*:*:*:*:*:*, вплоть до 68.0 исключительно)Описание: до версии 68.0 в default_url_fetcher WeasyPrint существует обход защиты SSRF. Уязвимость позволяет злоумышленнику получать доступ к ресурсам внутренней сети (таким как службы localhost или конечные точки метаданных облака), даже если разработчик реализовал собственный url_fetcher для блокировки такого доступа. Это происходит потому, что базовая библиотека urllib автоматически следует HTTP-перенаправлениям без повторной проверки нового адреса на соответствие политике безопасности разработчика. Версия 68.0 содержит исправление этой проблемы.
Ссылки:
Чтобы подтвердить реальное влияние до установки патча, я настроил локальный сценарий эксплуатации уязвимой версии, установленной в системе.
1. Клонировал репозиторий с примененным патчем (ветка main, которая уже включает исправление из версии 68.0):
git clone https://github.com/Kozea/WeasyPrint.git
2. Просмотрел исправленный код, а именно weasyprint/urls.py, где находится логика default_url_fetcher и обработка перенаправлений:
3. Создал вредоносный HTML-файл, который пытается перехватить локальный системный файл через iframe, имитируя вектор SSRF/несанкционированного доступа к ресурсам, описанный в CVE (примечание: имена файлов и содержимое файлов ниже сохранены точно такими, как при выполнении, соответствуя выводу терминала на скриншотах):
cat << 'EOF' > ataque.html
<!DOCTYPE html>
<html>
<head>
<title>PoC SSRF - WeasyPrint</title>
</head>
<body>
<h1>Prueba de Exfiltración de Archivos Locales</h1>
<p>Si el parche no está aplicado, el contenido de abajo debería mostrar el archivo /etc/passwd:</p>
</body>
</html>
EOF
python3 -m weasyprint ataque.html resultado_vulnerable.pdf
xdg-open resultado_vulnerable.pdf
4. Результат: при открытии сгенерированного PDF iframe, указывающий на file:///etc/passwd, отображается пустым, без содержимого системного файла. Это подтверждает, что в пропатченной версии попытка доступа к неавторизованному ресурсу корректно блокируется.
git clone официального репозитория (ветка, включающая коммит с патчем b6a14f0...).file:///etc/passwd через iframe.url_fetcher) перед попыткой воспроизведения.Практика проводилась в личной изолированной среде (Kali Linux + Wazuh, работающие локально) в образовательных целях. Доступ к сторонним системам не осуществлялся.