
scripts de preuve de concept pour 2 RCE non authentifiées dans Samba (CVE-2026-4408 & CVE-2026-4480) et élévation de privilèges locale dans TelnetD (CVE-2026-28372)
Ce dépôt contient des scripts de preuve de concept pour les vulnérabilités présentées lors de la conférence "Forgotten but Not Gone: Unauthenticated RCEs and LPEs in Legacy Linux Services" à Black Hat USA 2026 et DEF CON 34.
Élévation locale de privilèges dans TelnetD : Des attaquants non privilégiés peuvent exploiter la fonctionnalité des variables d'environnement de TelnetD pour obtenir un shell avec les privilèges root. De par sa conception et conformément à sa RFC, le protocole Telnet permet à ses clients de définir des variables d'environnement pour la session shell. Cette fonctionnalité a été mal conçue d'un point de vue sécurité. Le service permettait à des clients non authentifiés de définir des variables d'environnement pour le processus telnetd lui-même et pour tous ses sous-processus. L'un de ses sous-processus est /usr/bin/login. La définition de variables d'environnement en tant que client telnet distant nous a permis de lancer /usr/bin/login avec la variable d'environnement “CREDENTIALS_DIRECTORY”. Cela amène le processus login à rechercher un fichier nommé “login.noauth” dans le répertoire spécifié par “CREDENTIALS_DIRECTORY”. Si le fichier contient la chaîne “yes”, le processus login ignore l'authentification et fournit au client un shell s'exécutant sous l'utilisateur que le client a spécifié. Il peut s'agir de n'importe quel utilisateur, même root.
Exécution de code à distance non authentifiée dans Samba via SAMR : Samba s'appuie sur des commandes shell définies dans son fichier de configuration (smb.conf) pour effectuer diverses opérations demandées par ses clients, comme ajouter un nouveau partage réseau, ajouter une nouvelle imprimante, etc. Certaines de ces commandes shell reçoivent des paramètres basés sur la requête envoyée par le client. La plupart du temps, les paramètres sont assainis et les caractères spéciaux sont échappés avant l'exécution de la commande afin de prévenir l'injection shell.
La vulnérabilité réside dans la fonction “check_password_complexity" qui formate une chaîne spécifiée par le client en une commande shell sans l'assainir. La vulnérabilité nécessite deux conditions :
Pour configurer le démon RPC de samba (samba-dcerpcd) afin d'utiliser NCACN_IP_TCP, il doit être lancé comme service système distinct et non comme partie du service samba principal. De plus, l'option "rpc start on demand helpers” dans le fichier de configuration doit être définie sur “no”.
Exécution de code à distance non authentifiée dans Samba via SPOOLSS : la fonction generic_job_submit formate également une chaîne contrôlée par le client en une commande shell sans l'assainir. La combinaison des configurations suivantes entraîne cette vulnérabilité :
Un client non authentifié peut demander l'accès à un partage d'imprimante via l'interface RPC spoolss. Ensuite, un travail d'impression peut être soumis via la fonction RpcStartDocPrinter. Le nom de document spécifié dans la requête sera utilisé comme nom de travail formaté dans le paramètre “%J” de la commande. L'appel à hRpcEndDocPrinter déclenche generic_job_submit qui exécutera la “print command” de la configuration après avoir formaté le nom du travail sans assainissement. Le code envoyé par l'exploit sera exécuté sous l'utilisateur "nobody". Si la configuration "valid users = @users" est ajoutée à la section du partage d'imprimante, l'exploitation fonctionne toujours, mais nécessite des identifiants valides. Si l'authentification a été effectuée, le code envoyé par l'exploit sera exécuté sous l'utilisateur authentifié et non sous "nobody".