En janvier 2026, OpenClaw a divulgué CVE-2026-25253 — une vulnérabilité d'exécution de code à distance qui a exposé plus de 135 000 instances accessibles publiquement en raison de configurations par défaut laxistes. Si votre déploiement OpenClaw (npm, Docker ou VPS) n'a pas encore passé d'audit de base de sécurité, il est temps de le durcir. Cet article passe en revue l'incident, trois checklists de durcissement spécifiques au déploiement (Docker, systemd/VPS, npm global) et un playbook de réponse en 5 étapes (détecter → sauvegarder → mettre à niveau → vérifier → surveillance 72h) pour transformer votre agent de "ça marche" à "validé pour la production".
Mi-janvier 2026, l'équipe sécurité d'OpenClaw a publié CVE-2026-25253 : si Gateway s'exécute avec la configuration par défaut (écoute sur 0.0.0.0 sans authentification), un attaquant peut obtenir une exécution de code distant via un handshake WebSocket forgé. Le scan Shodan a révélé plus de 135 000 instances accessibles sans authentification — des développeurs personnels aux petites équipes, en passant par des tunnels d'entreprise mal configurés.
La cause racine n'était pas un bogue de code mais des défauts trop permissifs par défaut:
0.0.0.0; sans pare-feu ou auth de reverse-proxy, le port de gestion est exposé à tout Internet.OPENCLAW_GATEWAY_TOKEN ni TLS, laissant les canaux en clair vulnérables aux MITM.openclaw onboard sur un VPS et considèrent le déploiement terminé, négligeant le resserrement de gateway.bind et les règles ufw.L'incident a poussé le changement depuis v2026.2.0 : l'adresse bind par défaut passe à 127.0.0.1, et l'installeur inclut désormais des vérifications de sécurité obligatoires. Toutefois, les instances existantes nécessitent encore une correction manuelle — cet article fournit la checklist exécutable.
Quel que soit le type de déploiement, les trois conditions suivantes doivent simultanément être remplies :
OPENCLAW_GATEWAY_TOKEN valide (≥32 caractères, rotation tous les 90 jours).Si vous exécutez OpenClaw via Docker / Docker Compose, auditez chaque item ci-dessous :
| Item de vérification | Configuration sûre | Exemple dangereux | Commande / étape de correction |
|---|---|---|---|
| network_mode | Bridge personnalisé ou host avec mapping de port restreint | ports: "0.0.0.0:18789:18789" | Passer à 127.0.0.1:18789:18789 ou router uniquement via reverse proxy |
| --read-only | Root-fs du conteneur en lecture seule ; volumes explicitement listés | read_only: true absent | Ajouter read_only: true au Compose ; s'assurer que ./openclaw-data:/home/node/.openclaw est monté |
| User et permissions des volumes | Exécution en non-root (node:1000) ; UID/GID des volumes hôtes identiques | Conteneur root, répertoire hôte 755 trop large | user: "1000:1000" ; pré-chown des répertoires de volume chown 1000:1000 |
| Restart-Policy | unless-stopped ou on-failure:3 | Aucun restart (le conteneur exit après crash) | Assurer l'auto-guérison ; combiner avec healthcheck |
| OPENCLAW_GATEWAY_TOKEN | Injecté via env ; longueur ≥32 ; identique à la config CLI | Token vide ou hardcodé dans l'image | environment: OPENCLAW_GATEWAY_TOKEN=${TOKEN} ; également définir sur l'hôte via openclaw config set gateway.token $TOKEN |
Après modification, vérifiez avec docker exec <container> netstat -tlnp que Gateway n'écoute que sur 127.0.0.1:18789 (ou le port de votre reverse proxy).
Lorsque OpenClaw est exécuté comme service systemd sur un VPS, les contrôles pare-feu et système suivants doivent être appliqués :
sudo ufw default deny incoming sudo ufw default allow outgoing sudo ufw allow 22/tcp # SSH sudo ufw allow 443/tcp # HTTPS (si reverse proxy) sudo ufw allow 80/tcp # HTTP (optionnel, redirection vers HTTPS) sudo ufw enable
sudo ufw status numbered # Aucune règle allow pour 18789/tcp ne doit apparaître
PasswordAuthentication noLes logs OpenClaw sont par défaut dans /tmp/openclaw/openclaw-YYYY-MM-DD.log. Configurer logrotate pour éviter l'épuisement disque :
# /etc/logrotate.d/openclaw
/tmp/openclaw/*.log {
daily
rotate 7
compress
missingok
notifempty
copytruncate
}
[Unit]
Description=OpenClaw Gateway
After=network.target
[Service]
Type=simple
User=node
Group=node
ExecStart=/usr/bin/openclaw gateway start
ExecStop=/usr/bin/openclaw gateway stop
Restart=on-failure
RestartSec=5
# Durcissement sécurité
PrivateTmp=yes
NoNewPrivileges=yes
ProtectSystem=strict
ProtectHome=yes
ReadWritePaths=/home/node/.openclaw /var/log/openclaw
Environment="OPENCLAW_GATEWAY_TOKEN=${OPENCLAW_GATEWAY_TOKEN}"
# Limites ressources (optionnel)
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
Pour les installations locales (développement ou ops manuel), le bind Gateway doit obligatoirement être restreint :
# Forcer Gateway à écouter sur 127.0.0.1 uniquement openclaw config set gateway.bind 127.0.0.1 # Vérification openclaw config get gateway.bind # Doit afficher 127.0.0.1
Si un accès externe est requis, combiner avec un reverse proxy (Nginx/Caddy) utilisant basic-auth ou OAuth :
location /openclaw/ {
proxy_pass http://127.0.0.1:18789/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
# Basic auth (exemple)
auth_basic "OpenClaw Admin";
auth_basic_user_file /etc/nginx/.htpasswd;
# Ou intégration oauth2proxy
openclaw --version. Si < 2026.2.0 et Gateway exposé sur internet, marquer haut risque immédiatement.nmap -p 18789 <your-public-ip> pour vérifier l'accessibilité du port.~/.openclaw/ : tar -czf openclaw-backup-$(date +%F).tar.gz ~/.openclawopenclaw gateway export > gateway-state.jsonnpm update -g openclaw ou docker pull openclaw/openclaw:latestgateway.bind à 127.0.0.1 ; si reverse proxy, vérifier TLS+auth activés.openclaw gateway token rotate ; mettre à jour toutes les instances CLI et variables d'environnement CI.openclaw gateway restartopenclaw gateway status doit indiquer "healthy".openclaw logs --follow | grep -i errorExécuter ces 5 points mensuellement pour garantir qu'OpenClaw ne se réexpose pas à cause d'une dérive de configuration ou d'une version obsolète :
| Catégorie | Commande / Action de vérification | Critère de succès | Action si échec |
|---|---|---|---|
| Ports | ss -tlnp | grep 18789 | Adresse d'écoute = 127.0.0.1 | openclaw config set gateway.bind 127.0.0.1 + redémarrage |
| Authentification | openclaw config get gateway.token (longueur & fraîcheur) | Token ≥32 caractères, rotation <90 jours | openclaw gateway token rotate ; mettre à jour toutes les dépendances |
| Logs | du -sh /tmp/openclaw/ et état logrotate | Répertoire logs <500Mo, logrotate actif | Ajuster config logrotate ; nettoyer anciens logs |
| Mises à jour | openclaw --version comparé à la dernière release | Version ≥ 2026.2.0 (stable la plus récente) | npm update -g openclaw ou docker pull |
| Backups | Vérifier présence d'archives <7 jours dans ~/.openclaw/backup/ | Backup complet datant de moins de 7 jours | Exécuter immédiatement openclaw backup |
openclaw/openclaw:latest, :2026.3.13, :stable.Beaucoup d'équipes adoptent une mentalité "juste le faire fonctionner" pendant les PoC ou déploiements temporaires, en sautant config pare-feu, rotation de token et logrotation. Cela peut économiser 15 minutes sur une machine de dev, mais introduit trois risques fatals en production :
Le durcissement sécurité est l'étape 1, pas un correctif après coup. Pour des charges de travail OpenClaw de production nécessitant stabilité et longévité, l'offre managée de MACCOME inclut toutes les baselines out-of-the-box (rotation automatique des tokens, whitelisting firewall, surveillance d'intrusion 24/7) — utilisable sans les tracas du self-hosting. Si vous choisissez le self-hosting, auditez chaque item de cette checklist et consignez les résultats dans le manuel ops de votre équipe.
Questions fréquentes
Mon OpenClaw est en v2026.1.0 — suis-je vulnérable à CVE-2026-25253 ?
Les versions affects sont <2026.2.0 OU Gateway est directement exposé (pas de reverse proxy ni firewall). Même si la version est concernée, binder sur 127.0.0.1 ou utiliser un tunnel contrôlé réduit considérablement le risque. Upgrade et durcissement bind recommandés dans tous les cas.
J'ai déjà read_only: true dans Docker Compose — un firewall est-il encore nécessaire ?
Oui. read_only empêche la modification à l'intérieur du conteneur, mais le port Gateway pourrait toujours être accessible de l'extérieur. Un durcissement complet nécessite : read-only + bind 127.0.0.1 + auth reverse proxy.
La rotation de token va-t-elle couper les canaux existants (Telegram/Slack) ?
Oui. Le token Gateway est l'identifiant CLI ↔ Gateway ; après rotation toutes les CLI/Agents doivent se réappairer. Les tokens de niveau canal (Telegram bot token) ne sont pas affectés.
Que faire si la production doit exposer Gateway en externe ? Comment appliquer le moindre privilège ?
Moindre privilège = (Gateway écoute localhost uniquement) + (reverse proxy impose TLS+auth) + (whitelist IP source si possible). La couche proxy (Nginx/Caddy/Traefik) doit vivre dans un conteneur distinct ou un nœud edge, ne forwardant que les requêtes authentifiées vers 127.0.0.1:18789.
Comment vérifier si mon instance a déjà été compromise ?
Rechercher des traces : 1) CLI tokens inconnus dans openclaw config list ; 2) logs de connexion avec IP suspecte dans ~/.openclaw/logs/ ; 3) processus enfants suspects (curl/wget sortants). Si un signalement : isoler immédiatement, sauvegarder, puis reconstruire from scratch.