🔍 Contexte
Publié le 18 juin 2026 par Calif.io, cet article présente la découverte de Squidbleed (CVE-2026-47729), une vulnérabilité de type heap buffer overread dans Squid Proxy, présente depuis un commit daté du 18 janvier 1997. La découverte a été réalisée à l’aide du modèle d’IA Claude Mythos Preview (Anthropic), dans le cadre d’une collaboration entre Calif.io et Anthropic.
🐛 Nature de la vulnérabilité
La faille réside dans le parseur de listing FTP de Squid (Ftp::Gateway::htmlifyListEntry), plus précisément dans la gestion du pointeur copyFrom après le timestamp de modification d’un fichier.
- La fonction
strchr(w_space, *copyFrom)est appelée dans une boucle pour sauter les espaces blancs. - Selon la norme C11 §7.24.5.2,
strchrretourne un pointeur non-NULL lorsque le caractère recherché est'\0'(le terminateur nul est considéré comme faisant partie de la chaîne). - Si aucun nom de fichier ne suit le timestamp,
*copyFromest le terminateur nul, mais la boucle continue et incrémente le pointeur au-delà du buffer alloué. - Résultat : un heap overread mesuré à 4065 octets au-delà d’une région de 4096 octets, confirmé par ASAN.
💥 Impact et exploitation
- Squid utilise des freelists par taille (
MEM_4K_BUF) sans remise à zéro des buffers recyclés. - Un buffer ayant précédemment contenu une requête HTTP d’un autre utilisateur peut être réalloué pour le parsing FTP.
- L’overread expose le contenu résiduel du buffer, potentiellement des en-têtes HTTP incluant des tokens d’authentification (
Authorization) ou des API keys. - Conditions requises : FTP activé par défaut, port 21 inclus dans l’ACL
Safe_portspar défaut, et accès à un serveur FTP contrôlé par l’attaquant depuis le proxy. - Limitation : seul le trafic HTTP en clair et les setups terminant le TLS sont exposés ; le trafic HTTPS via
CONNECTest opaque.
🛠️ Patch
Le correctif consiste à vérifier le terminateur nul avant d’appeler strchr :
- while (strchr(w_space, *copyFrom))
+ while (*copyFrom && strchr(w_space, *copyFrom))
📅 Timeline de divulgation
- 2026-04-17 : Rapport initial par Lam Jun Rong (Calif.io) + correctif posté
- 2026-04-19 : Fix mergé dans master/v8
- 2026-05-07 : Rapport indépendant par Youssef Awad
- 2026-05-17 : Fix mergé dans v7
- 2026-06-08 : Squid v7.6 publié
- 2026-06-10 : Publication du billet de blog
📌 Type d’article
Analyse technique détaillée d’une vulnérabilité originale, incluant la description du bug, la preuve de concept, l’exploitation mémoire et le patch. PoC disponible sur GitHub (califio/publications).
🧠 TTPs et IOCs détectés
TTP
- T1190 — Exploit Public-Facing Application (Initial Access)
- T1005 — Data from Local System (Collection)
IOC
- URLs :
https://github.com/califio/publications/tree/main/MADBugs/squidbleed— URLhaus - CVEs :
CVE-2026-47729— NVD · CIRCL
🟡 Indice de vérification factuelle : 59/100 (moyenne)
- ✅ blog.calif.io — source reconnue (Rösti community) (20pts)
- ✅ 10152 chars — texte complet (fulltext extrait) (15pts)
- ✅ 2 IOC(s) (6pts)
- ⬜ 0/1 IOCs confirmés externellement (0pts)
- ✅ 2 TTP(s) MITRE (8pts)
- ✅ date extraite du HTML source (10pts)
- ⬜ aucun acteur de menace nommé (0pts)
- ⬜ 0/1 CVE(s) confirmée(s) (0pts)