CVE-2026-47729

Squidbleed — Squid Proxy Heartbleed-Style Memory Leak

CVSS 7.5 High CWE-125: OOB Read 影響 全バージョン 修正済み (7.7) 発見 29年来のバグ
概要 / TL;DR

Squidbleed は、Squid ProxyのFTPゲートウェイに存在する ヒープバッファオーバーリード脆弱性。Heartbleed (CVE-2014-0160) に類似したメモリリークを引き起こし、 プロキシの内部メモリに残留する他のユーザーのHTTPリクエスト(Authorization ヘッダー、Cookie、APIキー等)を攻撃者に漏洩させる。 1997年に導入された29年来のバグで、デフォルト構成の全Squidバージョンが影響を受ける。 修正は Squid 7.7 に含まれる。最も安全な暫定対策は FTPサポートの無効化

概要


CVE番号CVE-2026-47729
通称Squidbleed
公開日2026-06-10 (公開ディスクロージャー)
CVSS v3.17.5 (High)
CVSS VectorAV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:H
CWECWE-125: Out-of-bounds Read
CISA KEVなし (2026-06-22現在)
発見者Calif.io (AI "Claude Mythos Preview")
修正バージョンSquid 7.7 (7.6→7.7に訂正)
修正コミット865a131c7d557e68c965043d98c2eccae26deef8

影響を受けるソフトウェアおよびバージョン


プラットフォーム バージョン ステータス
Squid Proxy (全バージョン)〜 7.5● 脆弱
Debian bullseye4.13-10+deb11u6● 脆弱
Debian bookworm5.7-2+deb12u5● 脆弱
Debian trixie6.13-2+deb13u1● 脆弱
Debian sid / forky7.6-1○ 修正済み
Ubuntu4.10-1ubuntu1 系● 脆弱
Amazon Linux 2 / 2023squid● Pending Fix
SUSE Linux Enterprise複数バージョン● Affected
Squid Proxy 7.7+7.7〜○ 修正済み

技術詳細


FTPディレクトリ一覧パーサー (src/clients/FtpGateway.cc) において、 C標準ライブラリの strchr() 関数のヌル終端文字('\0')に関する仕様を誤って扱っているため、 バッファ境界を超えた読み出しが発生する。

C11 §7.24.5.2 の仕様: strchr はヌル終端文字を文字列の一部として扱う。 つまり strchr("abc", '\0') はヌル終端文字の位置を指すポインタを返す(非NULL)。 これにより、ファイル名が存在しないFTP LIST応答行で、++copyFrom がバッファ終端を超えて実行され続ける。

根本原因 — コードレベル分析


❌ 脆弱なコード

src/clients/FtpGateway.cc (修正前) if (flags.skip_whitespace) { - while (strchr(w_space, *copyFrom)) ++copyFrom; } else { /* Handle the following four formats... */ - if (strchr(w_space, *copyFrom)) ++copyFrom; } p->name = xstrdup(copyFrom);

✅ 修正後のコード

src/clients/FtpGateway.cc (修正後) if (flags.skip_whitespace) { + while (*copyFrom && strchr(w_space, *copyFrom)) ++copyFrom; } else { ... + if (*copyFrom && strchr(w_space, *copyFrom)) ++copyFrom; } p->name = xstrdup(copyFrom);

修正の本質: *copyFrom && を追加し、ヌル終端文字に到達した時点でループ/条件を早期脱出させる。

攻撃フロー


1
被害者のHTTPリクエストが4KBバッファ (MEM_4K_BUF) に格納される
2
リクエスト完了後、バッファはフリーリストに返される — ゼロクリアされない
3
攻撃者がFTPサーバー(ポート21)として振る舞い、特殊な LIST 応答を送信
4
FTPパーサーがバッファの先頭を上書きするが、残りの〜4KBは被害者のデータのまま
5
strchr のオーバーリードにより、バッファ終端を超えて読み進む — ヒープオーバーリード発生
6
リークしたデータがFTPディレクトリ一覧の「ファイル名」として攻撃者に返される
Authorization ヘッダー、Cookie、APIキー、フォームデータ等が含まれる可能性

ディスクロージャータイムライン


1997-01-18
バグ導入。 SquidのFTPパーサーに脆弱なコードが導入される(GitHubコミット履歴より以前)。
2026-04-17
Calif.ioが最初の報告。修正パッチを提出。
2026-04-19
修正が master/v8 ブランチにマージ。
2026-05-07
Youssef Awadによる独立した報告( Responsible Disclosure )。
2026-05-17
修正が v7 ブランチにマージ。
2026-06-08
Squid v7.6 リリース(当初はこれで修正済みと発表)。
2026-06-10
公開ディスクロージャー。 Calif.ioが詳細な技術記事を公開。
2026-06-12
Amos Jeffries (Squid maintainer) が oss-security メーリングリストでアナウンス。
2026-06-15
訂正: CVE-2026-47729の修正は実際には Squid 7.7 に含まれると発表。

PoC / Exploit の状況


公開PoCあり(Calif.ioブログで概念実証コードが公開)
Metasploitモジュールなし(2026-06-22現在)
Exploit成熟度PoC(信頼性の高いメモリリーク実証済み)
実被害現時点で確認なし

検出方法


ブラックボックステスト

1. Squidプロキシ経由で攻撃者制御のFTPサーバー(ポート21)に接続

2. FTPサーバーからファイル名を含まない LIST 応答を返す:

d [R----F--] supervisor 512 Jan 16 18:53

3. FTPディレクトリ一覧の「ファイル名」フィールドに異常なデータ(他のユーザーのHTTPヘッダー等)が含まれていれば脆弱

ホワイトボックステスト

# FtpGateway.cc の strchr 使用箇所を確認 grep -n "strchr(w_space" src/clients/FtpGateway.cc # 脆弱なパターン (*copyFrom && が付いていない) grep -B2 -A2 "while (strchr(w_space" src/clients/FtpGateway.cc

バージョン特定

# Squidのバージョンを特定 squid -v # またはレスポンスヘッダーから: curl -I http://squid-proxy/ 2>/dev/null | grep -i "Via\|Server"

対策


恒久対策: Squid 7.7以降にアップデート
sudo apt update && sudo apt install squid
必須
暫定対策 (推奨): FTPサポートの無効化 — squid.confSafe_ports からポート21を削除
現代のブラウザはFTPを廃止しており、実影響ゼロで攻撃面を削除可能
高優先
ネットワーク制御: Squidサーバーからの外向きFTP接続(ポート21)をファイアウォールでブロック
高優先
モニタリング: access.log 中の ftp:// リクエストをアラート対象にする
推奨

修正パッチ詳細


修正コミット865a131c7d557e68c965043d98c2eccae26deef8
タグSQUID_7_6
変更ファイルsrc/clients/FtpGateway.cc
変更内容strchr() の前後に *copyFrom && ヌルチェックを追加
根本原因分類Missing input validation (ヌル終端文字の検証欠落)
GitHubsquid-cache/squid@865a131

参考資料


公式情報源

技術分析

PoC/Exploit