Guide de déploiement

Dokploy CVE-2026 : mise à jour critique 0.29.13

Déployer sur un VPS Cloud →

Tutoriel

Dokploy CVE-2026 : mise à jour critique 0.29.13

Sécurité & Monitoring11 min de lecture6 étapes

Les advisories GitHub GHSA-w3gm-rc4p-9rhj et GHSA-7r6p-v9gw-pwc8, publiés le 25 septembre 2026, exposent un scénario d'attaque sans précédent sur Dokploy : un secret JWT hardcodé dans le code source depuis la version 0.27.0 permet à n'importe quel attaquant de forger un token administrateur valide sans posséder de compte, puis des handlers WebSocket non autorisés transforment ce token en shell root sur l'hôte. Toute instance Dokploy inférieure à 0.29.13 est compromise depuis n'importe quel réseau, sans interaction requise. La correction tient en deux commandes et une rotation de secret.

Sommaire· Deux CVEs critiques, une chaîne d'exploitation complète1/13
  1. 01Deux CVEs critiques, une chaîne d'exploitation complète
  2. 02CVE-2026-45631 (CVSS 10.0) : le secret JWT hardcodé
  3. 03Vérifier si votre instance est exposée à CVE-2026-45631
  4. 04CVE-2026-72863 (CVSS 9.9) : escalade via les terminaux WebSocket
  5. 05Le scénario d'attaque complet : de zéro accès à root
  6. 06Matrice des versions et des correctifs
  7. 07Diagnostiquer votre instance avant d'appliquer le patch
  8. 08Guide de mise à jour pas à pas vers Dokploy 0.29.13
  9. 09Mesures de durcissement post-patch
  10. 10Dokploy est-il fiable malgré ces CVEs ?
  11. 11Alternatives si vous envisagez de migrer
  12. 12Sur un VPS ServOrbit, le patch se résume à deux commandes
  13. 13En résumé : les points non négociables

Deux CVEs critiques, une chaîne d'exploitation complète

Le 25 septembre 2026, deux advisories de sécurité ont été publiés simultanément pour Dokploy, l'outil de déploiement auto-hébergé alternatif à Heroku/Render. La combinaison des deux constitue la menace la plus grave qui ait touché l'écosystème des PaaS self-hosted en 2026 : aucun compte requis, root sur l'hôte en moins d'une minute, et la surface exposée est toute instance inférieure à la version 0.29.13.

CVE-2026-45631 (CVSS 10.0) porte sur un secret JWT hardcodé dans le code source. CVE-2026-72863 (CVSS 9.9) porte sur des handlers WebSocket qui authentifient sans autoriser. Pris séparément, chacun est déjà critique. Chaînés, ils forment une attaque complète : le premier fournit l'identité administrative, le second fournit l'exécution.

CVE-2026-45631 (CVSS 10.0) : le secret JWT hardcodé

L'advisory GitHub GHSA-w3gm-rc4p-9rhj décrit une vulnérabilité de classe CWE-798 — utilisation d'identifiants hardcodés. Dokploy utilise la bibliothèque better-auth pour la gestion des sessions et des tokens JWT. Dans les versions 0.27.0 à 0.29.2 inclus, la valeur par défaut de la variable BETTER_AUTH_SECRET était laissée à better-auth-secret-123456789 dans le code source publié sur GitHub.

Cette valeur est celle qui signe tous les tokens JWT d'administration de Dokploy. Quiconque la connaît — et elle est publique depuis le premier commit de la version 0.27.0 — peut forger un token JWT valide avec les droits administrateur, sans disposer d'aucun compte sur l'instance cible. L'API admin de Dokploy accepte alors toutes les requêtes : lecture de l'ensemble des secrets de déploiement, exécution de commandes via l'API, modification des configurations de services.

Le score CVSS 10.0 est le maximum absolu de l'échelle. Il reflète l'absence totale de barrière : le vecteur est réseau, aucune interaction utilisateur n'est requise, aucune authentification préalable n'est nécessaire, et la confidentialité, l'intégrité et la disponibilité de l'hôte sont toutes compromises.

Vérifier si votre instance est exposée à CVE-2026-45631

Sur l'hôte Dokploy, exécutez : grep BETTER_AUTH_SECRET /etc/dokploy/.env

Si la valeur affichée est better-auth-secret-123456789, si la variable est absente du fichier, ou si le fichier .env date d'avant la version 0.29.3 sans avoir été regénéré : votre instance est exposée. La version du binaire seule ne suffit pas — une mise à jour sans rotation du secret laisse l'ancienne valeur en place.

CVE-2026-72863 (CVSS 9.9) : escalade via les terminaux WebSocket

L'advisory GitHub GHSA-7r6p-v9gw-pwc8 décrit un contrôle d'accès insuffisant sur les handlers WebSocket exposant les terminaux Docker de Dokploy. La vulnérabilité est de classe CWE-285 — autorisation incorrecte.

Dokploy permet à chaque utilisateur d'accéder à un terminal interactif dans ses propres conteneurs via WebSocket. La vérification mise en place authentifiait l'utilisateur — elle confirmait la présence d'un token valide — mais n'autorisait pas : elle ne vérifiait pas que le service demandé appartient bien à l'utilisateur qui fait la demande. N'importe quel utilisateur avec un compte valide, même sans droits d'administration, pouvait donc ouvrir un terminal dans n'importe quel conteneur de n'importe quel autre utilisateur.

L'impact réel dépasse le conteneur lui-même. Dokploy s'exécute avec les droits root et monte le socket Docker de l'hôte (/var/run/docker.sock). Depuis un shell dans un conteneur, la commande docker run --rm -v /:/host alpine chroot /host sh donne un shell root sur le système de fichiers de l'hôte. Toutes les versions inférieures à 0.29.13 sont concernées.

Le scénario d'attaque complet : de zéro accès à root

La chaîne CVE-2026-45631 + CVE-2026-72863 constitue une attaque complète réalisable depuis n'importe quel réseau, sans compte préexistant, en deux étapes.

Étape 1 — Forger un token administrateur (CVE-2026-45631). L'attaquant connaît la valeur better-auth-secret-123456789 depuis le code source public. Il génère un JWT signé avec cette valeur, revendiquant le rôle admin. L'API Dokploy accepte ce token sans vérification supplémentaire. L'attaquant dispose maintenant d'un accès administrateur complet : liste de tous les services, secrets d'environnement, clés de déploiement.

Étape 2 — Accéder au terminal d'un conteneur (CVE-2026-72863). Avec son token admin forgé, l'attaquant ouvre une connexion WebSocket vers le terminal d'un conteneur arbitraire. La vérification d'autorisation absente laisse passer la requête. L'attaquant dispose d'un shell dans le conteneur.

Résultat — Root sur l'hôte. Dokploy tournant en root avec le socket Docker monté, l'attaquant pivote du conteneur vers l'hôte. L'ensemble du système de fichiers, les secrets de tous les projets hébergés, les clés SSH et les variables d'environnement de production sont accessibles. L'opération complète ne requiert aucune interaction de l'opérateur et aucun compte préexistant sur l'instance.

Matrice des versions et des correctifs

Faites défiler le tableau

CVECVSSVersions affectéesVersion corrigéeAction requise
CVE-2026-4563110.0 — CRITIQUE0.27.0 – 0.29.2≥ 0.29.3Mise à jour + régénérer BETTER_AUTH_SECRET
CVE-2026-728639.9 — CRITIQUE< 0.29.13≥ 0.29.13Mise à jour vers 0.29.13 minimum
Chaîne complète10.0 effective< 0.29.13 avec secret par défaut≥ 0.29.13Mise à jour + rotation du secret

Diagnostiquer votre instance avant d'appliquer le patch

Avant de procéder à la mise à jour, évaluez précisément l'exposition de votre instance.

Vérifier la version installée : docker exec dokploy cat /app/package.json | grep '"version"'

Si la version affichée est inférieure à 0.29.13, votre instance est vulnérable à CVE-2026-72863. Si elle est comprise entre 0.27.0 et 0.29.2, elle est vulnérable aux deux CVEs simultanément.

Vérifier la valeur du secret JWT : grep BETTER_AUTH_SECRET /etc/dokploy/.env

Si la valeur est better-auth-secret-123456789 ou si la variable est absente, CVE-2026-45631 est activement exploitable sur votre instance, quelle que soit la version.

Vérifier l'exposition réseau : si votre interface Dokploy est accessible depuis Internet sans restriction d'IP (pare-feu, Cloudflare Access, VPN), la surface d'attaque est publique. Un attaquant n'a besoin d'aucun accès réseau préalable pour exploiter CVE-2026-45631.

Guide de mise à jour pas à pas vers Dokploy 0.29.13

  1. Sauvegarder la configuration et les données

    Avant toute opération, créez une sauvegarde complète.

    # Sauvegarde du répertoire de configuration
    cp -r /etc/dokploy /etc/dokploy.bak-$(date +%Y%m%d-%H%M)
    
    # Sauvegarde de la base de données Dokploy
    docker exec dokploy-postgres pg_dump -U dokploy dokploy > /root/dokploy-db-$(date +%Y%m%d).sql

    Conservez ces sauvegardes hors de l'hôte Dokploy — si l'instance est compromise, les sauvegardes locales sont accessibles à l'attaquant.

  2. Vérifier la version courante et le docker-compose.yml

    Identifiez la méthode d'installation et la version épinglée dans votre fichier Compose. La plupart des installations Dokploy utilisent l'image officielle dokploy/dokploy. Si un tag de version est épinglé dans docker-compose.yml, notez-le.

    cat /etc/dokploy/docker-compose.yml | grep 'image:'
  3. Mettre à jour l'image Dokploy

    Depuis le répertoire de configuration Dokploy :

    cd /etc/dokploy
    docker compose pull

    Cette commande télécharge l'image dokploy/dokploy:latest ou le tag épinglé. Si vous souhaitez épingler explicitement la version corrigée, mettez à jour la ligne image dans docker-compose.yml : remplacez le tag existant par dokploy/dokploy:0.29.13 avant de lancer le pull.

  4. Redémarrer les conteneurs

    cd /etc/dokploy
    docker compose down
    docker compose up -d

    Attendez que les conteneurs soient en état healthy avant de continuer :

    docker compose ps

    Dokploy et sa base de données PostgreSQL doivent tous deux afficher Up ou healthy.

  5. Régénérer la variable BETTER_AUTH_SECRET

    C'est l'étape la plus importante et la plus souvent oubliée. Une mise à jour sans rotation du secret laisse CVE-2026-45631 exploitable. Générez une nouvelle valeur aléatoire cryptographiquement sûre :

    openssl rand -base64 48

    Copiez la valeur générée. Ouvrez /etc/dokploy/.env et remplacez la ligne BETTER_AUTH_SECRET=... par la nouvelle valeur. Si la variable est absente du fichier, ajoutez-la.

    Redémarrez ensuite Dokploy pour appliquer le changement :

    cd /etc/dokploy && docker compose down && docker compose up -d

    Note : la rotation du secret invalide toutes les sessions actives. Les utilisateurs connectés devront se reconnecter.

  6. Vérifier la version après mise à jour

    Confirmez que la version 0.29.13 ou supérieure est bien en cours d'exécution :

    docker exec dokploy cat /app/package.json | grep '"version"'

    Vérifiez également que le secret a bien été pris en compte :

    grep BETTER_AUTH_SECRET /etc/dokploy/.env

    La valeur ne doit plus être better-auth-secret-123456789. Si elle l'est encore, la rotation n'a pas été appliquée — reprenez l'étape précédente.

Mesures de durcissement post-patch

La mise à jour corrige les deux CVEs. Ces mesures complémentaires réduisent la surface d'attaque résiduelle.

Restreindre l'accès réseau à l'interface Dokploy. L'interface d'administration de Dokploy n'a aucune raison d'être accessible depuis Internet. Limitez l'accès au port 3000 (ou au port que vous utilisez) aux seules IP de votre équipe via le pare-feu de l'hôte, ou placez Dokploy derrière un VPN. Un ufw deny 3000 suivi d'un ufw allow from <votre-ip> to any port 3000 est la mesure minimale.

Activer l'authentification multifacteur (MFA). Dokploy supporte le TOTP depuis la version 0.28.0. Activez-le pour tous les comptes d'administration.

Auditer les secrets d'environnement des projets. Dokploy stocke les variables d'environnement de vos applications. Si l'instance a été exposée pendant la fenêtre de vulnérabilité (versions 0.27.0 à 0.29.12), considérez que tous vos secrets de production ont pu être lus. Rotation recommandée pour les clés d'API, les tokens de base de données et les secrets d'application.

Socket Docker et principe de moindre privilège. Le socket Docker monté en volume est une surface d'attaque documentée et exploitée dans CVE-2026-72863. Dokploy en a besoin pour fonctionner, mais l'accès peut être restreint via des politiques Docker socket proxy comme Tecnativa/docker-socket-proxy pour limiter les opérations autorisées.

Dokploy est-il fiable malgré ces CVEs ?

Ces deux vulnérabilités sont sérieuses, mais la réponse des mainteneurs de Dokploy mérite d'être prise en compte avant de tirer des conclusions sur la maturité du projet.

Les advisories ont été publiés le 25 septembre 2026. Le correctif pour CVE-2026-45631 était disponible en version 0.29.3, et le correctif pour CVE-2026-72863 en version 0.29.13 — les deux dans un délai raisonnable après divulgation responsable. Le projet maintient un programme de sécurité via GitHub Security Advisories, ce qui indique une maturité minimale en matière de gestion des vulnérabilités.

Dokploy est un projet jeune (première version stable en 2024) avec une adoption rapide : plus de 15 000 étoiles GitHub et un rythme de releases soutenu. La présence d'un secret hardcodé dans les versions initiales reflète une dette de sécurité typique des projets en phase de croissance rapide, où la facilité d'installation a primé sur la robustesse du durcissement par défaut.

Le projet reste un choix pertinent pour les équipes qui veulent un PaaS self-hosted accessible, à condition de suivre les mises à jour de sécurité et d'appliquer les mesures de durcissement décrites dans cet article.

Alternatives si vous envisagez de migrer

Si ces vulnérabilités vous amènent à réévaluer votre choix de PaaS self-hosted, voici les alternatives actives sur le segment.

Coolify est l'alternative la plus proche en termes de fonctionnalités. Open source, maintenu activement, avec un modèle de sécurité plus mature sur la gestion des secrets (pas de valeur par défaut hardcodée documentée à ce jour). Son interface est plus complexe mais sa base de code est plus grande et plus auditée.

Caprover est une option éprouvée, plus ancienne et donc avec un historique de sécurité plus long. Il est moins actif en termes de nouvelles fonctionnalités mais plus stable.

Portainer avec des stacks Docker reste une approche valide pour les équipes qui n'ont pas besoin d'un PaaS complet. Portainer porte ses propres CVEs historiques — notamment sur l'escalade de privilèges via l'API Docker — mais la version 3.x a revu sa gestion des autorisations.

Quelle que soit l'alternative choisie, appliquer les mêmes mesures de durcissement (accès réseau restreint, MFA, rotation régulière des secrets) reste la ligne de base non négociable.

Sur un VPS ServOrbit, le patch se résume à deux commandes

La commande docker compose pull && docker compose up -d depuis /etc/dokploy, suivie de la régénération de BETTER_AUTH_SECRET, applique le correctif complet. Sur un VPS avec accès root, vous décidez de la fenêtre de maintenance sans dépendre d'un hébergeur. Si vous avez déployé Dokploy via le template ServOrbit, le fichier .env est dans /etc/dokploy/ et le docker-compose.yml est celui fourni par le template.

En résumé : les points non négociables

CVE-2026-45631 (CVSS 10.0) et CVE-2026-72863 (CVSS 9.9) se chaînent en une attaque sans compte vers root sur l'hôte. Toute instance Dokploy inférieure à 0.29.13 avec le secret par défaut better-auth-secret-123456789 est compromettable depuis n'importe quel réseau.

La correction requiert deux gestes distincts et tous deux obligatoires : la mise à jour vers la version 0.29.13 minimum (docker compose pull && docker compose up -d), et la régénération de BETTER_AUTH_SECRET dans le fichier .env (openssl rand -base64 48). L'un sans l'autre ne ferme qu'une moitié de la surface.

Après la mise à jour, restreignez l'accès réseau à l'interface d'administration, activez le MFA, et si l'instance a été exposée pendant la fenêtre de vulnérabilité, effectuez une rotation de tous les secrets d'application hébergés.

Déployez Dokploy sur un VPS que vous contrôlez

Sur un VPS ServOrbit avec accès root, vous appliquez ce patch en deux commandes et à l'heure de votre choix — sans attendre une fenêtre de maintenance imposée par un hébergeur. Le template Dokploy est disponible sur le Marketplace.

Besoin d'aide ?

Parcourez notre centre d'aide et notre FAQ, ou contactez notre équipe — rappel, WhatsApp ou e-mail. Support en français, anglais et arabe.

Écrire sur WhatsApps'ouvre dans un nouvel onglet