🔍 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, strchr retourne 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, *copyFrom est 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_ports par 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 CONNECT est 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/squidbleedURLhaus
  • CVEs : CVE-2026-47729NVD · 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)

🔗 Source originale : https://blog.calif.io/p/squidbleed-cve-2026-47729?utm_source=post-email-title&publication_id=1468086&post_id=202628647&utm_campaign=email-post-title&isFreemail=true&r=2d5oq&triedRedirect=true&utm_medium=email