Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2026-34207 — Le filtre SSRF vérifiait le texte du nom d'hôte, mais la destination réelle était décidée plus tard par le DNS. Cette lacune a permis aux URL Webhook contrôlées par l'attaquant d'atteindre des cibles en boucle locale, des métadonnées et du réseau privé. | Kitploit
Outils/GitHubGitHub/0xmrma/cve-2026-34207
Analyse des VulnérabilitésExploitationSécurité WebTests d'IntrusionArticles et RechercheApprentissage et Éducation
GitHub0xmrma/cve-2026-34207

CVE-2026-34207

Le filtre SSRF vérifiait le texte du nom d'hôte, mais la destination réelle était décidée plus tard par le DNS. Cette lacune a permis aux URL Webhook contrôlées par l'attaquant d'atteindre des cibles en boucle locale, des métadonnées et du réseau privé.

Voir le dépôt
6il y a 3 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

CVE-2026-34207

Le filtre SSRF vérifiait le texte du nom d'hôte, mais la destination réelle était décidée plus tard par le DNS. Cette lacune permettait aux URL de Webhook contrôlées par un attaquant d'atteindre des cibles loopback, de métadonnées et de réseau privé.

Introduction

J'ai découvert ce problème en examinant Typebot, un constructeur de chatbots open-source, avec une simple question de sécurité en tête :

Que se passe-t-il si la protection SSRF valide le texte du nom d'hôte, mais que la destination réelle est décidée plus tard par le DNS ?

Dans ce cas, cette question a conduit à un vrai bug.

La protection SSRF de Typebot pour les blocs Webhook / Requête HTTP ne validait que :

  • la chaîne de l'URL,
  • les noms d'hôte littéraux bloqués,
  • et les formats d'adresse IP littérale

Elle ne résolvait pas les noms d'hôte avant d'autoriser la requête.

Cela signifiait qu'un nom d'hôte comme ssrf-repro.example pouvait sembler inoffensif lors de la validation, puis se résoudre en :

  • 127.0.0.1
  • 169.254.169.254
  • ou un espace réseau privé RFC1918

et être tout de même récupéré par le client HTTP backend.

Ce problème est devenu CVE-2026-34207.

Typebot : Typebot sur GitHub
CVE : CVE-2026-34207
Corrigé dans : 3.16.0

Cela affectait Typebot, une plateforme de chatbot open-source largement utilisée. Sur son site officiel, Typebot est présenté comme étant utilisé par 650+ entreprises dans le monde. Le site annonce également 2M+ de discussions mensuelles et 1.5M+ de bots publiés.

photo0

Chaîne d'attaque

URL de Webhook contrôlée par l'attaquant -> le nom d'hôte passe la validation SSRF uniquement littérale -> aucune résolution DNS avant la décision d'autorisation -> le client HTTP backend résout le nom d'hôte vers une cible interne -> la requête côté serveur atteint loopback / métadonnées / réseau privé -> les données de réponse deviennent disponibles via les logs d'exécution


Ce que fait Typebot

Typebot est un constructeur de chatbots.

Il permet aux utilisateurs de créer des flux capables de :

  • poser des questions
  • collecter des entrées structurées
  • appeler des services externes
  • enchaîner une logique métier
  • et déclencher des requêtes HTTP sortantes via des blocs Webhook / Requête HTTP

Cela signifie que l'exécution de requêtes sortantes constitue une véritable frontière de sécurité.

La question importante ici n'était pas de savoir si Typebot supportait les blocs Webhook.

La véritable question était :

La protection SSRF valide-t-elle la destination réelle à laquelle le serveur va se connecter, ou seulement le texte du nom d'hôte apparaissant dans l'URL ?

Dans ce cas, elle ne validait d'abord que la forme textuelle.

C'était l'erreur.


Pourquoi cette surface méritait d'être examinée

Les défenses SSRF échouent de manière très prévisible.

La plupart du temps, les erreurs intéressantes ne sont pas :

  • « tu as oublié de bloquer 169.254.169.254 »
  • ou « tu as oublié de bloquer localhost »

Les erreurs plus graves sont des erreurs de frontière :

  • la validation a lieu avant la canonisation
  • la validation a lieu avant les redirections
  • la validation a lieu avant la résolution DNS
  • la validation a lieu sur une représentation, mais la pile réseau en utilise une autre

C'était le bon endroit à vérifier ici.

Typebot avait déjà une logique de durcissement SSRF pour les adresses IP de métadonnées littérales, loopback, plages privées et astuces d'IP encodées.

Cela rendait la question suivante évidente :

Et si le nom d'hôte n'est pas littéralement dangereux, mais se résout en une destination dangereuse plus tard ?

C'est exactement ce qui s'est produit.


Cause racine

Le problème fondamental était une validation de la destination basée sur le texte du nom d'hôte au lieu de l'adresse IP résolue.

Dans l'implémentation vulnérable, validateHttpReqUrl() :

  • analysait l'URL
  • n'autorisait que http: et https:
  • bloquait une courte liste de noms d'hôte littéraux tels que metadata.google.internal, metadata.goog, metadata et localhost
  • détectait les astuces d'IP littérales en décimal / hexadécimal / octal
  • analysait les adresses IPv4 / IPv6 littérales
  • ne validait l'adresse que si le nom d'hôte lui-même était déjà une IP littérale

C'est la partie importante.

Si le nom d'hôte était une valeur normale comme :

ssrf-repro.example

alors parseIPAddress(hostname) renvoyait null, et le validateur s'arrêtait là.

Aucune résolution DNS n'avait lieu avant l'approbation.

Ainsi, la logique vulnérable se résumait effectivement à :

const ip = parseIPAddress(hostname);
if (ip) {
  validateIPAddress(ip);
}

Cela signifie que :

  • les IP dangereuses littérales étaient bloquées
  • les IP dangereuses encodées étaient bloquées
  • mais les noms d'hôte se résolvant en IP dangereuses ne l'étaient pas

La seconde moitié du bug se trouvait dans le chemin d'exécution.

Dans executeHttpRequest(), Typebot exécutait d'abord la validation puis effectuait la requête réelle avec ky(request.url, ...).

Donc la séquence était :

  • valider la chaîne de l'URL
  • accepter le nom d'hôte
  • résoudre le nom d'hôte plus tard lors de la requête sortante réelle
  • se connecter à la cible interne résolue

C'est l'intégralité de la vulnérabilité.


Pourquoi il s'agit d'un problème de sécurité, pas seulement d'un filtrage incomplet

La distinction importante est où la décision de confiance a été prise.

Beaucoup de bugs semblent petits si on les décrit mal.

Si vous décrivez celui-ci comme :

« le filtre de nom d'hôte était incomplet »

cela ressemble à un problème de qualité.

Ce n'est pas le vrai problème.

Le vrai problème était :

  • le serveur a pris une décision de sécurité avant de connaître la destination réelle
  • la pile réseau s'est ensuite connectée ailleurs
  • et l'application a traité cette requête comme valide

Ce n'est pas une faiblesse cosmétique de filtrage.

C'est une défaillance de la frontière de confiance.

Et comme l'exécuteur HTTP enregistrait les données de réponse dans les logs d'exécution, le problème n'était même pas aveugle dans les cas les plus forts.

Donc ce n'était pas simplement :

  • « un trafic interne inattendu s'est produit »

C'était :

  • un trafic interne s'est produit
  • et l'attaquant pouvait souvent récupérer la preuve et le contenu de la réponse via le comportement normal de l'application

C'est une véritable vulnérabilité SSRF.


Preuve de concept

J'ai utilisé deux couches de preuve car elles démontraient deux choses différentes.

PoC 1 : démonstration autonome avec résolveur local

La première PoC isolait proprement la cause racine.

J'ai utilisé un petit harnais local qui :

  • démarrait un serveur HTTP loopback sur 127.0.0.1
  • validait une URL telle que http://ssrf-repro.example:18080/...
  • utilisait un résolveur contrôlé pour que ssrf-repro.example se résolve en 127.0.0.1
  • puis effectuait la requête

Cela démontrait exactement le défaut :

  • la validation réussissait car le nom d'hôte n'était pas une valeur littérale bloquée
  • la requête ultérieure atteignait quand même le loopback

La sortie capturée montrait :

  • résultat du validateur : réussi
  • résultat de l'exécution de la requête : loopback atteint
  • corps de réponse renvoyé par le service loopback

Cela prouvait directement la lacune de validation.


PoC 2 : chemin d'exécution réel de Typebot

La seconde PoC montrait le bug via le chemin de fonctionnalité réel qui importe.

La reproduction la plus simple était :

Télécharger l’outil