🔍 Contexte

Publié le 26 octobre 2026 par Sébastien Féry sur le blog FoxIO (https://foxio.io), cet article présente une analyse technique détaillée de trois vulnérabilités découvertes dans GoAhead, un serveur web embarqué déployé dans des centaines de millions d’appareils IoT, OT, pare-feux et systèmes militaires de fabricants tels que Palo Alto Networks, Comcast, D-Link, HP, Canon, Honeywell, GE, Oracle, Siemens, Rockwell, Digi, Lockheed Martin et Boeing.

🐛 Vulnérabilités identifiées

Trois bugs distincts affectent les backends TLS de GoAhead selon la bibliothèque utilisée :

  • GOAHEAD-SA-2026-0006 / CVE-2026-115881 — Backend OpenSSL-compatible (CVSS 9.1 — Critique) : Le CRL est chargé dans le store de certificats via X509_STORE_load_locations() mais le flag X509_V_FLAG_CRL_CHECK n’est jamais activé. Les certificats clients révoqués sont donc silencieusement acceptés lors du handshake mTLS, même avec la vérification d’émetteur activée. Affecte GoAhead 3.4.5 à 6.1.0.

  • GOAHEAD-SA-2026-0005 — Backend Mbed TLS (CVSS 5.9 — Moyen) : Une faute de frappe dans l’appel à mbedtls_ssl_conf_dh_param_bin() passe sizeof(dhm_g) (1 octet) au lieu de sizeof(dhm_p) (256 octets) pour le modulus DH 2048 bits. Le modulus est tronqué à 1 octet (valeur 0xFF), réduisant les valeurs possibles du secret partagé à seulement 8. Un observateur passif peut déchiffrer les sessions TLS 1.2 DHE_RSA capturées. Affecte GoAhead 4.0.2 à 6.1.0. La typo date de 2018.

  • GOAHEAD-SA-2026-0004 / CVE-2026-115884 — Vérificateur legacy LibreSSL (CVSS 7.4 — Élevé) : Le vérificateur X.509 legacy de LibreSSL 3.2.x et 3.3.2–3.3.6 interrompt la construction de la chaîne sans enregistrer l’erreur de profondeur, remontant à la place l’erreur 20 (UNABLE_TO_GET_ISSUER_CERT_LOCALLY). GoAhead tolère cette erreur quand VERIFY_ISSUER=0, permettant à une chaîne de certificats dépassant la limite de profondeur (10) d’être acceptée. Affecte GoAhead ≤ 6.1.0 avec LibreSSL 3.2.x ou 3.3.2–3.3.6.

🛠️ Conditions d’exploitation

  • OpenSSL : mTLS activé avec un CRL configuré
  • Mbed TLS : TLS 1.2 DHE_RSA négocié avec un client acceptant les paramètres DH tronqués
  • LibreSSL legacy : VERIFY_PEER=1 et VERIFY_ISSUER=0

🔧 Corrections

GoAhead 6.1.1 (publié le 2 août 2026) corrige les trois vulnérabilités :

  • Ajout de X509_STORE_set_flags(store, X509_V_FLAG_CRL_CHECK) pour OpenSSL
  • Correction du passage de sizeof(dhm_p) pour Mbed TLS
  • Activation de VERIFY_ISSUER=1 ou migration vers LibreSSL 4.x pour le bug de profondeur

📅 Chronologie

  • 22 avril 2026 : rapport LibreSSL
  • 27 avril 2026 : rapport MbedTLS
  • 30 avril 2026 : rapport OpenSSL
  • 2 août 2026 : publication de GoAhead 6.1.1
  • 12 octobre 2026 : publication des advisories
  • 26 octobre 2026 : publication du blog

📄 Nature de l’article

Il s’agit d’une publication de recherche technique avec preuves de concept (PoC disponible sur GitHub), analyse de code source, traces de débogage et fingerprints JA4Scan-TLS pour détecter les backends affectés dans un parc exposé.

🧠 TTPs et IOCs détectés

TTP

  • T1600 — Weaken Encryption (Defense Evasion)
  • T1553.004 — Subvert Trust Controls: Install Root Certificate (Defense Evasion)
  • T1557 — Adversary-in-the-Middle (Collection)

IOC

  • CVEs : CVE-2026-115884 — NVD · CIRCL
  • CVEs : CVE-2026-115881 — NVD · CIRCL

⚠️ À propos de ces IOC — ils sont extraits automatiquement de l’article original le 29 octobre 2026 et n’ont pas fait l’objet d’une vérification externe. Un indicateur peut avoir été réattribué depuis : une IP de C2 peut redevenir un service légitime, un domaine sinkholé peut changer de propriétaire. Aucune garantie d’exactitude ni d’actualité — contrôlez leur validité avant tout usage opérationnel, en particulier avant de les injecter dans une blocklist ou un SIEM.


🟡 Indice de vérification factuelle : 46/100 (moyenne)

  • ⬜ foxio.io — source non référencée (0pts)
  • ✅ 13894 chars — texte complet (fulltext extrait) (15pts)
  • ✅ 2 IOC(s) (6pts)
  • ⬜ pas d’IOC vérifié (0pts)
  • ✅ 3 TTPs MITRE identifiées (15pts)
  • ✅ date extraite du HTML source (10pts)
  • ⬜ aucun acteur de menace nommé (0pts)
  • ⬜ 0/2 CVE(s) confirmée(s) (0pts)

🔗 Source originale : https://foxio.io/blog/choose-your-backend-three-tls-bugs-in-goahead