Nem, kedves olvasó, nem nyitott a PR-Audit gasztro-blogot, jelen bejegyzés nem sütikről és tortákról, hanem a D-Link DNS-323 típusú NAS-ról fog szólni. Elnézést, ha valakinek ezzel csalódást okoztam
No, de csapjunk is a lecsóba (no pun intended)!
Egészen pontosan a kütyü webes kezelőfelületéről, illetve a felületen egy pentest során talált két sebezhetőségről lesz szó. Mindkét sebezhetőség authentikációhoz kötött, de elegendő hozzá egy normál felhasználó, nincs szükség adminra.
A bejelentkező oldalon két lehetőség van: “Configuration” és “Applications”.
Az elsőhöz admin jogok kellenek, itt lehet beállításokat eszközölni a NAS-on. A teszt során ehhez nem fértem hozzá, be kellett érnem a másik lehetőséggel, ami bármilyen felhasználó számára elérhető, és másolásokat, biztonsági mentéseket időzíthetünk vele. Legalábbis annak szánták D-Link-ék. Én tetszőleges fájlfeltöltésre, illetve közvetlen parancsfuttatásra használtam
Az alábbi screenshoton ez a felület látható:
Meg kell adni, hogy honnan (FTP, web, vagy SAMBA share), hová, és mikor akarunk menteni. Amennyiben a forrás authentikációt igényel, azt is itt adhatjuk meg. Van még egy “Type” beállítás, de az nálam nem működött, nem vettem észre, hogy bármi változott volna a működésben, amikor állítgattam. A “hová” az, ami érdekes számunkra. A szövegdobozba kattintva rögtön felugrik egy ablak, ahol a NAS-on található megosztáson (Volume_1) lévő mappák látszanak. Itt kattintgatva kiválaszthatjuk a célmappát.
Az érdekességek akkor kezdődnek, amikor beállunk egy intercepting proxy-val a böngésző és a szerver közé. Egy mappát lenyitva (+ gomb) a következő kérés megy el a szerver felé:
OK, itt legalább két dolog van, amivel kb. mindenki bepróbálkozik, aki minimálisan képben van webhack témában: az fNEW_DIR-t átírja valami másra (pl. /), illetve az f_file-t átírja 1-re. Az fNEW_DIR-t /-re, /etc-re átírva elszáll a webszerver (!!!), csak pár perc múlva áll helyre. Ez önmagában érdekes, elképzelhető, hogy ezzel is lehet kezdeni valamit – én nem néztem, mert mint látni fogjuk, vannak kényelmesebb módszerek is az eszköz pwn-olására az ARM-os webszerver exploitálásánál.
Tehát közvetlenül a /-t, /etc-t, stb. megadva nem jutunk előbbre, de azért ilyen könnyen nem adjuk fel, próbálkozunk másik módszerrel. Igen, directory traversal. A /mnt/Volume_1/../.. értéket már elfogadja az eszköz, és vígan böngészhetjük az egész fájlrendszert.
Persze csak a mappákat látjuk, de ezen segíthetünk az f_file paraméter 1-re állításával.
Miután kiválasztottuk a forrásfájlt és a célmappát, már csak el kell menteni az időzítést, és a megadott időben, vagy a zöld nyílra kattintáskor meg is történik a másolás.
Én egy FTP szerverről töltöttem fel egy proof.txt-t az eszköz /web/path direktorijába. Az eredmény az alábbi képen látható:
Tehát összefoglalva: az eszköz teljes fájlrendszerét látjuk (a fájlokat olvasni nem tudjuk!), és bárhova írhatunk bármit. Pl. kicserélhetjük az /etc/shadow-t, vagy a kezelőfelület oldalait.
Ez utóbbit kipróbáltam. A D-Link oldaláról letölthető firmware-t kicsomagoltam, a benne található initrd-t mount-oltam, majd az abban találhat image.cfs squashfs fájlt szintén mount-oltam (tiszta Matrjoska baba ). A web_page direktoriban található maga az oldal – ki hitte volna. A teszt céljából a web_page/state/log.asp oldalt választottam ki, aminek az elérése admin jogokhoz kötött. Egy részlet a fájlból:
A 15. sorban található check_login(1) hívást kicseréltem check_login(0)-ra, majd a fájlt feltöltöttem a NAS-ra test.asp néven. Voila, az oldalt megnyitva olvashatjuk a rendszer-, illetve FTP naplókat:
A további lehetőségeken való agyalást az olvasóra bízom. Egy-két megjegyzés:
- A kezelőfelületet egy GoAhead beágyazott webszerver szolgálja ki, web-es shell ráhegesztésével nem nagyon éri meg szöszölni.
- A felmásolt fájlokon a jogosultságok nem maradnak meg, így pl. a cgi-bin-be, vagy az “at” spool-jába hiába írkálunk, nem lesznek futtathatók az állományok.
- Binárisok esetén figyeljünk, hogy ARM alapú a rendszer!
- Igazából ez az egész nem is lényeges, mert mindjárt látjuk, hogy parancsokat is tudunk futtatni
A második sebezhetőség egy OS command injection. A letöltések időzítését – Linux alapú rendszerről lévén szó – az “at” program végzi. A webszerver binárisát IDA-val megpiszkálva az is kiderül, hogy a “-f” kapcsolóval, tehát fájlból dolgozik az “at”. Az előbb mutatott módszerrel átvizsgálva a fájlrendszert kiderül, hogy időzítéskor a /web direktoriban SCHEDULE# nevû fájlok jönnek létre a következő tartalommal:
Az időzített letöltéseket tetszőleges időpontban is indíthatjuk a play gombra kattintással. Ekkor az alkalmazás a /goform/right_now_d funkciót hívja meg a következő paraméterezéssel:
Tehát a meghívott funkció megkapja az at job ID-jét, a SCHEDULE# fájl nevét, illetve a letöltés paramétereit. Az ID valószínûleg a job, a SCHEDULE# pedig a fájl törléséhez kell a másolás befejezése után. Tehát elvileg lefut egy “atrm [job ID]”, illetve egy “rm -f SCHEDULE#”. Ismét segítségül hívva IDA-t kiderül, hogy az atrm parancs kb. a következő kóddal hívódik meg:
sprintf(&cmd, “/bin/atrm %d”, jobid);
system(cmd);
Ebből ugy látszik, hogy a job ID-ba nem tudunk injektálni, mert számként értelmeződik. Marad tehát a SCHEDULE#. A következő képernyőmentésen látható módon küldtem el a kérést a webszervernek:
Az eredmény, amin jól látszik, amit eddig is sejthettünk, hogy minden, amit csinálunk, root-ként hajtódik végre.
Összefoglalva: a bejegyzésben bemutattam két 0-day sebezhetőséget, amik a D-Link DNS-323 típusú eszközét érintik. Az eszköz nem mai darab, már nem is forgalmazzák, a support 2013. május 5-én lejár, így ezek a hibák valószínûleg nem lesznek javítva. A eszköz utóda, a DNS-325 már egy teljesen áttervezett webes felülettel rendelkezik, így ezek a hibák ilyen formában ott biztosan nem találhatók meg. Persze ez korántsem jelenti azt, hogy az már teljesen biztonságos
Főkép: https://knowyourmeme.com/