Frappe Builder до 1.36.1: обход SSRF-защиты через HTTP-редирект (CVE-2026-115720)
В Frappe Builder до версии 1.36.1 обнаружена уязвимость SSRF-класса: защитная проверка assert_not_private_url() валидирует только исходный хост, но не конечный адрес после HTTP-редиректа. Аутентифицированный атакующий через эндпоинт convert_to_webp может обращаться к внутренним и link-local адресам, включая облачные metadata-сервисы. Оценка CVSS — 5.3 (MEDIUM).
Подробности
Функция-охранник assert_not_private_url() проверяет только исходное имя хоста, тогда как последующий вызов requests.get(url) выполняется с настройками по умолчанию: автоматическим следованием редиректам и без привязки к IP-адресу (IP pinning). В результате атакующий может передать публичный URL, который по HTTP-редиректу перенаправляет запрос на внутренние или link-local адреса, никогда не проходившие проверку. Вектор атаки — эндпоинт convert_to_webp, у которого отсутствует декоратор проверки прав доступа. Аутентифицированный пользователь может вызвать его с URL, ведущим на внутренние цели, например на облачные metadata-сервисы. Это позволяет выполнять SSRF-запросы, сканировать внутренние порты, а из-за отсутствия таймаута — инициировать зависание запросов (denial of service). Затронутый продукт: Frappe Builder (версии до 1.36.1). Оценка CVSS — 5.3 (MEDIUM). Для эксплуатации требуется аутентификация.Что делать
Основная рекомендация — обновить Frappe Builder до версии 1.36.1 или выше, где проблема устранена. Если обновление невозможно в кратчайшие сроки, следует рассмотреть компенсирующие меры:- ограничить сетевой доступ серверов приложения к внутренним и link-local диапазонам, а также к metadata-сервисам облака;
- проверять доступность эндпоинта convert_to_webp и ограничить его использование доверенными ролями на уровне прокси/шлюза;
- настроить сетевое сегментирование и фильтрацию исходящих запросов (egress filtering) как дополнительный барьер против SSRF;
- контролировать журналы на предмет подозрительных исходящих запросов к внутренним адресам.
Источник: CVE Project (cvelistV5)
