Home Assistant - CVE-2023-27482 (kritikus sérülékenység) kihasználása most egy aktuális téma. A sérülékenységet 2023.03.08-án fedezték fel és jelentették a HA fejlesztőinek, de a zero day sérülékenységek útjának szabályait betartva csak 2023.05.10-én került publikálásra a kihasználásához tartozó teljes leírás, miután a fejlesztők javították a sérülékenységet. Ez a verzió pedig a Supervisor 2023.03.1. Akinek ez előtti verziója van és elérhető a rendszere a publikus internet irányából, védtelen. – Fizcere Tamás, senior kollégánk beszámolója.
Többször jeleztem ezt a sérülékenységet, melyet kihasználva a teljes okos otthon központunk felett átvehetik az irányítást a támadók, de meglátásom szerint ez a legkisebb kár, amit okozhatnak nekünk.
Ha belegondolunk, hogy milyen adatokat adunk meg a rendszerünk építése közben, beláthatjuk, hogy aki hozzáférést szerez hozzá, több accountunk adatait is megszerezheti.
De milyen adatok is lehetnek ezek?
· Mail küldés: megadjuk a belépési adatainkat. E-mail cím, jelszó, szerver.
· ESPHome: megadjuk az otthoni WiFi elérésünket, hogy a konfigurált eszközeink fel tudjanak jelentkezni.
· Kamerák: http/rtsp url-be megadjuk a kamerákhoz tartozó login/jelszó párost és a kamerák elérési címét a hálózatunkban
· Samba share: megadjuk a megosztás eléréséhez szükséges login/password párost
· MQTT, zigbee2mqtt, stb.: a brokerhez megadjuk a login/password párost
· Felület elérése: megadjuk a felhasználó nevünket, itt egy kicsit jobb a helyzet, mert a jelszó már elkódolva található, így több időbe telik a feltörése, nem kapjuk meg egyből
· Riasztó rendszer: a PIN kód, amivel élesíthető/kikapcsolható a riasztó
· Otthonunk címe
· Munkahelyünk, egyéb zónáink
Ezt így leírva mindenki tudja, de szeretném bemutatni, milyen egyszerűen megszerezhetőek ezek az adatok a rendszerünkből és akár TE is ki tudd próbálni, hogy a rendszered érintett -e még a sérülékenységben.
Először is létre kellett hozzak egy megfelelő rendszert, amit szabadon hackelhetek, mert ugyan az interneten rengeteg sérülékeny rendszer található, de azokat nem lenne etikus kompromittálni. A választásom a még sérülékeny 2022.12.1-es verzióra esett és a Home Assistant OS 9.5 verzióra. Első gondolatom az volt, hogy virtual boxban felhúzom és öröm, boldogság, kezdődhet is a játék, de nem, mert a rendszer tervezői okosan lefrissítenek minden komponenst már a bootolás alatt, így mire megkapjuk a belépési felületet, már egy aktuális verzión futó rendszerünk van (az OP rendszer kivéve), ami számomra nem megfelelő, de ha ez van, akkor ezzel kell dolgozni.
Szerencsére a core downgradelhető elég könnyedén, ha konzolon belépünk és kiadjuk az alábbi parancsot:
core update --version 2022.12.1
Ezzel egy lépéssel közelebb kerültünk a célhoz, de a supervisor még mindig a legfrissebb verzió és első googlizásra és dokumentáció olvasásra az az érzésünk lehet, hogy ezen nem is tudunk változtatni.
Ha mélyebben belenézünk a rendszerbe, akkor nincs itt semmi mágikus dolog csak a most már széles körben alkalmazott docker rendszer. Minden komponens külön docker containerbe kerül, majd okosan konfigurálva a rendszer komponensei (a konténerekben futó szolgáltatások, addonok) kommunikálnak egymással. Ebből egyenesen következik, hogy akkor mégiscsak van mód a supervisor downgrade-elérése :) Nem lesz egyszerű, de leírom, mert más is kedvet kaphat otthon a játékra. Előre is elnézés kérek, hogy ezzel ennek a blog posztnak a hosszát növelem, ha nem érdekel, tekerd át ;)
Először is ki kell lépni a ha konzolból, vagyis inkább be kell lépni az oprendszer szintre, ahonnan elérjük a dockert és konfigurálni tudjuk azt. Ehhez még a Virtual Boxban futó HA rendszerünknek hagyjuk meg az internet elérését, mert a régebbi supervisor imaget a netről fogjuk letölteni. Amint letöltésre kerül a régebbi image, el kell vennünk a VM-től a hálózatot, különben lefrissíti magát ismét az aktuális verzióra, ami most nem célunk. A folyamat során kiadandó parancsok:
login
docker container ls
docker stop hassio_supervisor
docker rm -f hassio_supervisor
docker images
docker rmi --force <image ID>
docker image pull ghcr.io/home-assistant/amd64-hassio-supervisor:2022.12.1
docker tag ghcr.io/home-assistant/amd64-hassio-supervisor:2022.12.1 ghcr.io/home-assistant/amd64-hassio-supervisor:latest
docker images
#vegyük el a VM-től az internetet, kacsoljuk ki a háló kártyát VirtualBox-ból!!!
docker run -d --name=hassio_supervisor -v /run/dbus:/run/dbus:ro -v /run/udev:/run/udev:ro -v /run/supervisor:/run/os:rw -v /etc/machine-id:/etc/machine-id:ro -v /mnt/data/supervisor:/data:rw -v /run/docker.sock:/run/docker.sock:rw -v /run/docker/containerd/containerd.sock:/run/docker/containerd/containerd.sock:rw -v /run/systemd-journal-gatewayd.sock:/run/systemd-journal-gatewayd.sock:rw -e SUPERVISOR_NAME=hassio_supervisor -e SUPERVISOR_API=http://localhost -e SUPERVISOR_SHARE=/mnt/data/supervisor --security-opt seccomp=unconfined --security-opt apparmor=hassio-supervisor --privileged --restart always ghcr.io/home-assistant/amd64-hassio-supervisor:2022.12.1
docker start --attach hassio_supervisor
reboot
ha supervisor options --auto-update=false
#most már visszaadhatjuk az internetet/háló kártyát a VM-nek
Először állítsuk le a futó hassio_supervisor containert, majd távolítsuk el minden fájljával és image-vel együtt.
Ha eltakarítottuk az aktuális (latest) supervisort, jöhet a régi image beszerzése. Amint letöltődött az image, kapcsoljuk le a VirtualBox-ban a VM hálózati kapcsolatát, nehogy frissítse a supervisor-t, amíg nem végzünk a teljes downgrade folyamattal.
Most jöhet a letöltött image-ünk futtatása. Ezt a parancsot könnyű elgépelni, nekem sem elsőre sikerült :D
A képernyő képről lemaradt az attache command, ne felejtsétek kiadni!