В июне 2026 года исследователи из раскрыли детали уязвимости CVE-2026-47729, получившей название Squidbleed — очевидная отсылка к нашумевшему Heartbleed из-за схожего механизма утечки памяти. Корни бага уходят в 1997 год, когда в FTP-парсер Squid был внесён код, простоявший почти три десятилетия без пристального внимания. Баг живёт в дефолтной конфигурации прокси-сервера прямо сейчас и затрагивает файл , отвечающий за разбор FTP-листингов директорий. Уязвимость относится к классу heap over-read с раскрытием информации — то есть чтением за пределами выделенного буфера с последующей утечкой чужих данных.
Корень проблемы — в одной конкретной конструкции языка C: while (strchr(w_space, copyFrom)) ++copyFrom;. Функция strchr() ищет символ в строке и, по стандарту языка, трактует завершающий нулевой байт (NUL) как часть строки поиска. Если copyFrom натыкается на этот самый NUL, strchr() возвращает указатель на терминатор вместо NULL, цикл while никогда не завершается, и чтение уходит дальше — в кучу. Squid при этом переиспользует освобождённые буферы (старые 4-килобайтные блоки) без предварительного обнуления. В этих блоках может лежать что угодно: HTTP-запросы предыдущих пользователей, заголовки авторизации, токены сессий, логины и пароли — всё, что когда-то ходило через прокси открытым текстом.
Запуск эксплойта требует соблюдения нескольких условий разом. Атакующему нужен контроль над FTP-сервером на порте 21 — причём и FTP-поддержка, и 21-й порт включены в Squid по умолчанию. Злоумышленник должен передать прокси специально сформированную строку FTP-листинга, которая оканчивается сразу после метки времени и не содержит имени файла. Тогда парсер встаёт ровно на NUL, цикл уходит в свободный буфер, и оттуда вытаскиваются остатки чужого трафика. Рабочий PoC уже опубликован — он демонстрирует хищение заголовка Authorization с последующей полной имперсонацией пользователя. По состоянию на момент раскрытия реальных атак в дикой природе зафиксировано не было.
Модель атакующего по терминологии Squid — «доверенный клиент» (trusted client). Это не случайный хост из интернета, а тот, кому уже разрешено пользоваться прокси. Поэтому под ударом в первую очередь сети с разделяемым прокси-доступом: школы, офисы, публичные Wi-Fi точки, корпоративные multi-user-инсталляции. HTTPS-трафик через CONNECT-туннель утечке не подвержен — прокси видит его как непрозрачный поток байтов и не парсит. Под угрозой исключительно открытый HTTP и трафик в TLS-terminating или TLS-inspection конфигурациях, где Squid сам расшифровывает соединение и читает содержимое запросов.
Самым интересным поворотом истории стало участие искусственного интеллекта. Уязвимость нашла модель Anthropic Claude Mythos Preview в рамках инициативы Project Glasswing, целенаправленно занимающейся поиском багов. По словам исследователей, ИИ «почти сразу» зацепился за специфическое поведение strchr с NUL-терминатором. при этом предупреждает: тот же класс забытых парсеров вполне может жить в других легаси-компонентах Squid, и FTP-код — не последнее место, где разбор текста «забывает остановиться». Аналогичные истории с похожими багами уже всплывали в FFmpeg, что подтверждает системный характер проблемы: старый C-код парсеров по-прежнему полон неочевидных ловушек, которые массовыми security-аудитами не покрывались и которые теперь начали находить ИИ-агенты.
Главная рекомендация от звучит нарочито просто: «выключите FTP». Аргументация железная — Chromium давно выпилил поддержку FTP из браузеров, а в большинстве корпоративных и домашних сетей FTP-трафик давно обнулился до статистической погрешности. Отключение FTP убирает вектор атаки целиком независимо от того, какая версия Squid установлена и пропатчена ли она. Для тех, кто по каким-то причинам не может отказаться от FTP, есть патч — проверка на NUL-терминатор перед вызовом уязвимого strchr() в . Этот фикс попал в development-ветку в апреле 2026 и в ветку v7 в мае 2026.
Дальше начинается история с путаницей в версиях. Мейнтейнер Squid Амос Джеффрис (Amos Jeffries) сначала заявил, что фикс несёт версия 7.6, потом поправился — 7.7. Девелопер Debian Сальваторе Бонаккорсо (Salvatore Bonaccorso) 22 июня 2026 отметил, что судя по референсному коммиту, нужное исправление уже присутствует в 7.6. Параллельно в Squid 7.6 закрыли CVE-2026-50012 — несвязанный heap overflow в cache_digest — что только добавило сумятицы при идентификации версий. Тем, кто работает с дистрибутивными пакетами, важно учитывать: Debian, SUSE и другие поставляют собственные сборки Squid (например, Debian с 5.7), и нужно либо проверять наличие конкретной проверки на null-терминатор в , либо ждать backport от вендора дистрибутива.
SUSE оценила серьёзность бага в 6.5 баллов по CVSS — уровень «Moderate». Вектор атаки сетевой, требуются низкие привилегии (доступ к прокси как доверенному клиенту), взаимодействие пользователя не требуется, область действия не меняется. Затронута только конфиденциальность: утекают открытые учётные данные и токены. Целостность и доступность не страдают — баг не даёт ни писать чужие данные, ни ронять сервис. Для классической утечки памяти это типичный профиль: критический эффект на приватность при умеренном общем весе из-за жёстких предусловий.
Из дефолтных настроек Squid, расширяющих поверхность атаки, ключевые три. FTP-поддержка включена из коробки. 21-й порт открыт из коробки. Обнуление освобождаемых буферов отключено из коробки. Управление доступом к самому прокси варьируется от конфигурации к конфигурации, но атакующему в любом случае нужен статус «доверенного клиента». Три из четырёх условий выполнены по умолчанию — отсюда и природа живого эксплойта на дефолтных инсталляциях. Для администраторов практический вывод простой: если FTP в инфраструктуре не используется — отключить немедленно, одной строкой в конфиге. Если используется — обновиться до ветки с фиксом либо наложить патч руками, после чего убедиться по коду или changelog дистрибутива, что проверка NUL перед strchr реально присутствует в собранной версии.
Корень проблемы — в одной конкретной конструкции языка C: while (strchr(w_space, copyFrom)) ++copyFrom;. Функция strchr() ищет символ в строке и, по стандарту языка, трактует завершающий нулевой байт (NUL) как часть строки поиска. Если copyFrom натыкается на этот самый NUL, strchr() возвращает указатель на терминатор вместо NULL, цикл while никогда не завершается, и чтение уходит дальше — в кучу. Squid при этом переиспользует освобождённые буферы (старые 4-килобайтные блоки) без предварительного обнуления. В этих блоках может лежать что угодно: HTTP-запросы предыдущих пользователей, заголовки авторизации, токены сессий, логины и пароли — всё, что когда-то ходило через прокси открытым текстом.
Запуск эксплойта требует соблюдения нескольких условий разом. Атакующему нужен контроль над FTP-сервером на порте 21 — причём и FTP-поддержка, и 21-й порт включены в Squid по умолчанию. Злоумышленник должен передать прокси специально сформированную строку FTP-листинга, которая оканчивается сразу после метки времени и не содержит имени файла. Тогда парсер встаёт ровно на NUL, цикл уходит в свободный буфер, и оттуда вытаскиваются остатки чужого трафика. Рабочий PoC уже опубликован — он демонстрирует хищение заголовка Authorization с последующей полной имперсонацией пользователя. По состоянию на момент раскрытия реальных атак в дикой природе зафиксировано не было.
Модель атакующего по терминологии Squid — «доверенный клиент» (trusted client). Это не случайный хост из интернета, а тот, кому уже разрешено пользоваться прокси. Поэтому под ударом в первую очередь сети с разделяемым прокси-доступом: школы, офисы, публичные Wi-Fi точки, корпоративные multi-user-инсталляции. HTTPS-трафик через CONNECT-туннель утечке не подвержен — прокси видит его как непрозрачный поток байтов и не парсит. Под угрозой исключительно открытый HTTP и трафик в TLS-terminating или TLS-inspection конфигурациях, где Squid сам расшифровывает соединение и читает содержимое запросов.
Самым интересным поворотом истории стало участие искусственного интеллекта. Уязвимость нашла модель Anthropic Claude Mythos Preview в рамках инициативы Project Glasswing, целенаправленно занимающейся поиском багов. По словам исследователей, ИИ «почти сразу» зацепился за специфическое поведение strchr с NUL-терминатором. при этом предупреждает: тот же класс забытых парсеров вполне может жить в других легаси-компонентах Squid, и FTP-код — не последнее место, где разбор текста «забывает остановиться». Аналогичные истории с похожими багами уже всплывали в FFmpeg, что подтверждает системный характер проблемы: старый C-код парсеров по-прежнему полон неочевидных ловушек, которые массовыми security-аудитами не покрывались и которые теперь начали находить ИИ-агенты.
Главная рекомендация от звучит нарочито просто: «выключите FTP». Аргументация железная — Chromium давно выпилил поддержку FTP из браузеров, а в большинстве корпоративных и домашних сетей FTP-трафик давно обнулился до статистической погрешности. Отключение FTP убирает вектор атаки целиком независимо от того, какая версия Squid установлена и пропатчена ли она. Для тех, кто по каким-то причинам не может отказаться от FTP, есть патч — проверка на NUL-терминатор перед вызовом уязвимого strchr() в . Этот фикс попал в development-ветку в апреле 2026 и в ветку v7 в мае 2026.
Дальше начинается история с путаницей в версиях. Мейнтейнер Squid Амос Джеффрис (Amos Jeffries) сначала заявил, что фикс несёт версия 7.6, потом поправился — 7.7. Девелопер Debian Сальваторе Бонаккорсо (Salvatore Bonaccorso) 22 июня 2026 отметил, что судя по референсному коммиту, нужное исправление уже присутствует в 7.6. Параллельно в Squid 7.6 закрыли CVE-2026-50012 — несвязанный heap overflow в cache_digest — что только добавило сумятицы при идентификации версий. Тем, кто работает с дистрибутивными пакетами, важно учитывать: Debian, SUSE и другие поставляют собственные сборки Squid (например, Debian с 5.7), и нужно либо проверять наличие конкретной проверки на null-терминатор в , либо ждать backport от вендора дистрибутива.
SUSE оценила серьёзность бага в 6.5 баллов по CVSS — уровень «Moderate». Вектор атаки сетевой, требуются низкие привилегии (доступ к прокси как доверенному клиенту), взаимодействие пользователя не требуется, область действия не меняется. Затронута только конфиденциальность: утекают открытые учётные данные и токены. Целостность и доступность не страдают — баг не даёт ни писать чужие данные, ни ронять сервис. Для классической утечки памяти это типичный профиль: критический эффект на приватность при умеренном общем весе из-за жёстких предусловий.
Из дефолтных настроек Squid, расширяющих поверхность атаки, ключевые три. FTP-поддержка включена из коробки. 21-й порт открыт из коробки. Обнуление освобождаемых буферов отключено из коробки. Управление доступом к самому прокси варьируется от конфигурации к конфигурации, но атакующему в любом случае нужен статус «доверенного клиента». Три из четырёх условий выполнены по умолчанию — отсюда и природа живого эксплойта на дефолтных инсталляциях. Для администраторов практический вывод простой: если FTP в инфраструктуре не используется — отключить немедленно, одной строкой в конфиге. Если используется — обновиться до ветки с фиксом либо наложить патч руками, после чего убедиться по коду или changelog дистрибутива, что проверка NUL перед strchr реально присутствует в собранной версии.