В прокси-сервере Squid нашли 29-летнюю уязвимость утечки HTTP-запросов в открытом виде

от автора

Уязвимость, связанная с чтением данных из памяти в веб-прокси Squid, может привести к утечке HTTP-запроса другого пользователя в открытом виде, включая любые учётные данные или токены сессии. Данные могут получить те, кому уже разрешена отправка трафика через тот же прокси.

Уязвимость связана с изменением в парсинге FTP в 1997 году и до сих пор присутствует в конфигурации Squid по умолчанию. Исследователи из Calif.io обнаружили её в июне и назвали Squidbleed (CVE-2026-47729) в честь Heartbleed, которая также приводила к утечке памяти.

Squid описывает это как атаку со стороны доверенного клиента, то есть того, кому уже разрешён доступ к прокси. Это соответствует обычным домашним сетям Squid, таким как школы, офисы и общедоступные сети Wi-Fi. 

Утечка затрагивает только тот трафик, который может прочитать Squid. Обычный HTTPS использует непрозрачный туннель CONNECT, поэтому Squid не видит его содержимое. Раскрытые данные представляют собой HTTP-трафик в открытом виде, а также конфигурации с завершением TLS, где Squid расшифровывает и анализирует данные.

Злоумышленнику необходимо, чтобы прокси-сервер мог связаться с контролируемым им FTP-сервером на порту 21. И FTP, и этот порт был включён по умолчанию.

Уязвимость находится в парсере списка каталогов FTP Squid. Для обработки старых серверов NetWare, которые добавляли в списки лишние пробелы, код пропускает пробелы с помощью цикла: while (strchr(w_space, *copyFrom)) ++copyFrom;.

Если FTP-сервер злоумышленника отправляет строку списка, которая заканчивается сразу после метки времени, без имени файла, copyFrom находит нулевой символ-терминатор строки. strchr рассматривает этот завершающий NUL как часть строки, которую он ищет, поэтому возвращает указатель вместо NULL, и цикл никогда не останавливается. Он выходит за пределы буфера, и xstrdup копирует все, что следует за ним, обратно злоумышленнику в виде имени файла.

Squid повторно использует освобождённые буферы памяти, не обнуляя их, поэтому буфер размером 4 КБ, который недавно содержал HTTP-запрос жертвы, по-прежнему содержит большую его часть. Короткая строка FTP перезаписывает только первые несколько байтов; перезапись возвращает остальное.

Демонстрация Calif извлекает заголовок Authorization от жертвы, использующей тот же прокси, чего достаточно, чтобы действовать от имени этого пользователя. Код эксплойта находится в открытом доступе, но не сообщалось о его эксплуатации в реальных условиях.

Пользователям следует проверить не только версию Squid, но и исправленную версию, и убедиться, что защита находится в FtpGateway.cc. Также можно проверить бэкпорт дистрибутива, поскольку они поставляют свои собственные сборки (Debian использует Squid 5.7).

Сопровождающий проекта Амос Джеффрис сначала заявил, что исправление содержится в Squid 7.6, затем упомянул уже версию 7.7. 22 июня Сальваторе Бонаккорсо из Debian отметил, что указанный коммит, похоже, всё же есть в версии 7.6.

Это исправление небольшое, оно вводит проверку на нулевой терминатор перед уязвимыми вызовами strchr. Squid 7.6 отдельно исправляет CVE-2026-50012, не связанную с этим уязвимость переполнения кучи cache_digest.

Исследователи рекомендуют отключить FTP. Chromium отказался от протокола много лет назад, и большинство сетей практически не используют его.

Сама уязвимость оценивается как средней сложности, CVSS 6.5, так как злоумышленнику необходим доступ через прокси.

В Calif отмечают, что модель Claude Mythos Preview от Anthropic, лежащая в основе проекта Glasswing, обнаружила эту особенность strchr почти сразу.

ссылка на оригинал статьи https://habr.com/ru/articles/1051666/