Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Einreichen
ToolsExploitsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2026-34207 — Der SSRF-Filter prüfte den Hostname-Text, aber das tatsächliche Ziel wurde später durch DNS bestimmt. Diese Lücke ermöglichte es angreifergesteuerten Webhook-URLs, Loopback-, Metadaten- und private Netzwerkziele zu erreichen. | Kitploit
Tools/GitHubGitHub/0xmrma/cve-2026-34207
SchwachstellenanalyseExploitationWebsicherheitPenetrationstestsPapers & ForschungLernen & Bildung
GitHub0xmrma/cve-2026-34207

CVE-2026-34207

Der SSRF-Filter prüfte den Hostname-Text, aber das tatsächliche Ziel wurde später durch DNS bestimmt. Diese Lücke ermöglichte es angreifergesteuerten Webhook-URLs, Loopback-, Metadaten- und private Netzwerkziele zu erreichen.

Repository anzeigen
6vor 3 MonatenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

CVE-2026-34207

Der SSRF-Filter überprüfte den Hostnamen-Text, aber das tatsächliche Ziel wurde später durch DNS bestimmt. Diese Lücke erlaubte es angreiferkontrollierten Webhook-URLs, Loopback-, Metadaten- und private Netzwerkziele zu erreichen.

Einleitung

Ich habe diesen Fehler gefunden, während ich Typebot, einen Open-Source-Chatbot-Builder, mit einer einfachen Sicherheitsfrage im Hinterkopf überprüft habe:

Was passiert, wenn der SSRF-Schutz den Hostnamen-Text validiert, das tatsächliche Ziel aber später durch DNS bestimmt wird?

In diesem Fall führte diese Frage zu einem echten Bug.

Der SSRF-Schutz von Typebot für Webhook / HTTP-Request-Blöcke validierte nur:

  • die URL-Zeichenkette,
  • blockierte Hostnamen-Literale,
  • und Literal-IP-Formate

Er hat nicht Hostnamen aufgelöst, bevor er die Anfrage erlaubte.

Das bedeutete, dass ein Hostname wie ssrf-repro.example während der Validierung harmlos aussehen konnte, sich dann aber auflösen konnte in:

  • 127.0.0.1
  • 169.254.169.254
  • oder RFC1918/privaten Netzwerkbereich

und trotzdem vom Backend-HTTP-Client abgerufen wurde.

Dieser Fehler wurde CVE-2026-34207.

Typebot: Typebot auf GitHub
CVE: CVE-2026-34207
Behoben in: 3.16.0

Dies betraf Typebot, eine weit verbreitete Open-Source-Chatbot-Plattform. Auf der offiziellen Website wird Typebot als vertrauenswürdig von 650+ Unternehmen weltweit präsentiert. Die Website wirbt außerdem mit 2M+ monatlichen Chats und 1.5M+ veröffentlichten Bots.

photo0

Angriffskette

angreiferkontrollierte Webhook-URL -> Hostname passiert nur literale SSRF-Validierung -> keine DNS-Auflösung vor der Entscheidung -> Backend-HTTP-Client löst Hostname zu internem Ziel auf -> serverseitige Anfrage erreicht Loopback / Metadaten / privates Netzwerk -> Antwortdaten werden durch Ausführungsprotokolle verfügbar


Was Typebot tut

Typebot ist ein Chatbot-Builder.

Es ermöglicht Benutzern, Abläufe zu erstellen, die:

  • Fragen stellen
  • strukturierte Eingaben sammeln
  • externe Dienste aufrufen
  • Geschäftslogik verketten
  • und ausgehende HTTP-Anfragen durch Webhook / HTTP-Request-Blöcke auslösen

Das bedeutet, dass die Ausführung ausgehender Anfragen eine echte Sicherheitsgrenze darstellt.

Die wichtige Frage war hier nicht, ob Typebot Webhook-Blöcke unterstützt.

Die eigentliche Frage war:

Validiert der SSRF-Schutz das tatsächliche Ziel, mit dem der Server eine Verbindung herstellt, oder nur den Hostnamen-Text, der in der URL erscheint?

In diesem Fall validierte er zuerst nur die Textform.

Das war der Fehler.


Warum diese Angriffsfläche einen Blick wert war

SSRF-Abwehrmechanismen versagen auf sehr vorhersehbare Weise.

Meistens sind die interessanten Fehler nicht:

  • "Du hast vergessen, 169.254.169.254 zu blockieren"
  • oder "Du hast vergessen, localhost zu blockieren"

Die stärkeren Fehler sind Grenzfehler:

  • Validierung erfolgt vor der Kanonisierung
  • Validierung erfolgt vor Weiterleitungen
  • Validierung erfolgt vor der DNS-Auflösung
  • Validierung erfolgt auf einer Darstellung, aber der Netzwerk-Stack verwendet eine andere

Das war hier der richtige Ansatzpunkt.

Typebot hatte bereits SSRF-Härtungslogik für literale Metadaten-IPs, Loopback, private Bereiche und codierte IP-Tricks.

Das machte die nächste Frage offensichtlich:

Was ist, wenn der Hostname wörtlich nicht gefährlich ist, sich aber später in ein gefährliches Ziel auflöst?

Genau das ist passiert.


Grundursache

Die Grundursache war die Zielvalidierung basierend auf Hostnamen-Text anstatt der aufgelösten IP-Adresse.

In der anfälligen Implementierung hat validateHttpReqUrl():

  • die URL geparst
  • nur http: und https: erlaubt
  • eine kurze Liste literaler Hostnamen wie metadata.google.internal, metadata.goog, metadata und localhost blockiert
  • literale dezimale / hexadezimale / oktale IP-Tricks erkannt
  • literale IPv4-/IPv6-Adressen geparst
  • die Adresse nur validiert, wenn der Hostname selbst bereits eine literale IP war

Das ist der wichtige Teil.

Wenn der Hostname ein normaler Wert war wie:

ssrf-repro.example

dann gab parseIPAddress(hostname) null zurück, und der Validator hörte dort auf.

Es fand keine DNS-Auflösung vor der Genehmigung statt.

Die anfällige Logik reduzierte sich also effektiv auf:

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

Das bedeutet:

  • literale gefährliche IPs wurden blockiert
  • codierte gefährliche IPs wurden blockiert
  • aber Hostnamen, die sich in gefährliche IPs auflösen, wurden nicht blockiert

Die zweite Hälfte des Bugs lag im Ausführungspfad.

In executeHttpRequest() führte Typebot zuerst die Validierung durch und später die eigentliche Anfrage mit ky(request.url, ...).

Die Reihenfolge war also:

  • die URL-Zeichenkette validieren
  • den Hostnamen akzeptieren
  • später den Hostnamen während der tatsächlichen ausgehenden Anfrage auflösen
  • eine Verbindung zum aufgelösten internen Ziel herstellen

Das ist die gesamte Schwachstelle.


Warum dies ein Sicherheitsproblem ist und nicht nur eine unvollständige Filterung

Der wichtige Unterschied ist wo die Vertrauensentscheidung getroffen wurde.

Viele Bugs wirken klein, wenn man sie schlecht beschreibt.

Wenn man diesen Bug beschreibt als:

"Der Hostname-Filter war unvollständig"

klingt das nach einem Qualitätsproblem.

Das ist nicht das eigentliche Problem.

Das eigentliche Problem war:

  • der Server traf eine Sicherheitsentscheidung, bevor er das tatsächliche Ziel kannte
  • der Netzwerk-Stack stellte später eine Verbindung woanders her
  • und die Anwendung behandelte diese Anfrage als gültig

Das ist keine kosmetische Filtersschwäche.

Das ist ein Vertrauensgrenzenfehler.

Und weil der HTTP-Ausführer Antwortdaten in Ausführungsprotokollen aufzeichnete, war das Problem nicht einmal in den stärksten Fällen blind.

Es war also nicht nur:

  • "unerwarteter interner Datenverkehr ist aufgetreten"

Es war:

  • interner Datenverkehr ist aufgetreten
  • und der Angreifer konnte oft Beweise und Antwortinhalte durch normales Anwendungsverhalten wiederherstellen

Das ist eine echte SSRF-Schwachstelle.


Proof of Concept

Ich habe zwei Proof-Ebenen verwendet, weil sie zwei verschiedene Dinge demonstrierten.

PoC 1: autarker lokaler Resolver-Demo

Der erste PoC isolierte die Grundursache sauber.

Ich verwendete eine kleine lokale Testumgebung, die:

  • einen Loopback-HTTP-Server auf 127.0.0.1 startete
  • eine URL wie http://ssrf-repro.example:18080/... validierte
  • einen kontrollierten Resolver verwendete, sodass ssrf-repro.example zu 127.0.0.1 aufgelöst wurde
  • dann die Anfrage ausführte

Das demonstrierte den genauen Fehler:

  • Die Validierung bestand, weil der Hostname kein literaler blockierter Wert war
  • Die spätere Anfrage erreichte dennoch Loopback

Die erfasste Ausgabe zeigte:

  • Validator-Ergebnis: bestanden
  • Anfrageausführungsergebnis: Loopback erreicht
  • Antworttext vom Loopback-Dienst zurückgegeben

Das bewies die Validierungslücke direkt.


PoC 2: echter Typebot-Ausführungspfad

Der zweite PoC zeigte den Bug durch den tatsächlichen Feature-Pfad, der relevant ist.

Die einfachste Reproduktion war:

  1. Ordnen Sie einen harmlosen Hostnamen Loopback auf dem Rechner zu, auf dem der Typebot-Backend DNS auflöst
  2. Starten Sie einen lokalen HTTP-Dienst
  3. Erstellen Sie einen Webhook-Block, der auf diesen harmlosen Hostnamen zeigt
  4. Lösen Sie den Block durch einen normalen authentifizierten Vorschau- oder Live-Ausführungspfad aus

Ein repräsentativer Block sah so aus:

Tool herunterladen