Egy rendszer, két hiba

Szombaton tettem ki egy gyors posztot a Facebook oldalra, miszerint aki Magento webáruházat használ karöltve a Mirasvit Helpdesk MX modullal, az frissítsen, amilyen gyorsan csak lehet. Az érdekessége az említett posztnak csupán annyi, hogy a biztonsági réseket én találtam. Ezt a rövid történetet szeretném most megosztani veletek.
Mint bizonyára tudjátok, rendszeresen (és hála istennek egyre sűrűbben) végzek IT biztonsági auditot weboldalakon. Nyáron érkezett a felkérés, hogy vizsgáljak át egy webáruházat, ami tartalmaz saját fejlesztést is.

Általában az elterjedt rendszerekben (mint pl. WordPress, Magento, stb) nem nagyon lehet hibát találni, ha az oldal gazdája rendszeresen telepíti a frissítéseket. Az ilyen rendszerekbe illesztett egyedi fejlesztések szoktak rést ütni a pajzson. Persze ilyenkor nem megoldás, hogy csak az egyedi részre koncentráljon a hacker, mindent át kell nézni. Ugyanúgy végig kell menni a teljes csekklistán, mintha egy teljesen egyedi fejlesztést vizsgálna az ember.

Hála a részletes vizsgálati processznek, bele is futottam két hibába. Mindkét hiba a Mirasvit Helpdesk MX-et érintette. Az egyik határozottan súlyos biztonsági hiba, a másik vita tárgyát képezheti, de mindenképpen hibának veszem.

Ahogy annak lennie kell, a feltárt hibákat első körben a Mirasvit felé jeleztem. Megköszönték, és kértek pár napot hogy megvizsgálhassák a problémát. Dícséret illeti őket, mert a hibák jelzésétől számított harmadik napon kiadtak egy frissítést, ami javítja a feltárt biztonsági hiányosságokat. Miután a frissítést kiadták, publikáltam a hibákat. Íme, a találatok:

Fájlfeltöltési probléma

Az ügyfélszolgálati modulban ha bármi problémám van, jelezhetem a webáruházat üzemeltető cég felé. Csatolhatok fájlt is, például ha szállítási sérülést akarok fotózni, és azt a képet feltölteni. A probléma ott jelentkezik, hogy a rendszerben semmiféle szűrés nem volt, ami ellenőrizte volna a feltöltendő fájlt. Így akár PHP állományok is feltölthetőek. Bár a rendszer kiterjesztés nélkül tárolja a feltöltött fájlokat, mégis elképzelhető olyan szituáció – esetleg más hibákból kifolyólag, hogy a támadó rávegye a rendszert a feltöltött kód futtatására.

Ennél kicsit könnyebben érthető kihasználása a hibának: feltölthetek akár vírussal fertőzött EXE fájlt is. Csatolmányként egy EICAR tesztet töltöttem fel. Az EICAR egy ártalmatlan tesztvírus, amire minden vírusszűrőnek sikítania kell. A fájlt feltöltöttem, az ügyfélszolgálat pedig képes lett volna letölteni / futtatni azt, ha nem jelez be a vírusirtó. Persze itt moshatnánk kezeinket, hogy végül nem sikerült megfertőzni senkit, de látni kell hogy a helpdesk modulnak nem szabadna arra számítania, hogy biztosan van vírusirtó az ügyfélszolgálat gépeire telepítve. Arról nem is beszélve, hogy azt a vírusirtót frissen tartják-e… Illetve van itt még egy-két trükk, amivel kijátszható a vírusirtó is, de ez egy másik poszt témája lesz.

Tárolt XSS (Cross-site scripting)

Az ügyfélszolgálati modul túlságosan megbízott a kapott adatokban. Könnyű volt úgy létrehozni egy új ügyfélszolgálati bejelentést úgy, hogy a tárgysorba JavaScriptet írtam. Az én felületemen azonnal látszott a sérülékenység, de nem lehettem biztos benne, hogy az adminisztrációs felületen is lefut-e a kódom. Egyeztetve a megbízóval, kipróbáltuk az éles rendszerben is a támadást. Az eredmény: az admin részen is lefut a kód.

Ezt súlyosbítja, hogy a HTTP(S) fejlécek nem voltak megfelelően beállítva, így ezt a két dolgot együttesen kihasználva ellophatóvá vált az adminisztrációs felületen tevékenykedő munkatársak munkamenete. Tehát gyakorlatilag egyszerű regisztrációtól eljutottunk az admin jogokig. Érdekesség, hogy a Magento-ba is be lehet regisztrálni olyan ügyfélnévvel, ami scriptet tartalmaz. Pl: “Csermák<script>alert(‘xss’)</script>“. Új ügyfélszolgálati bejelentés létrehozásakor a Helpdesk MX megjeleníti ezt a nevet is, így ez a script is lefut.

Fura a Magento megoldása erre. Jól szűri ezt az adatot, legalábbis amikor a képernyőre vissza kell írni az ügyfél nevét. Viszont ha ezt a szűrést már az adatbázisba való eltárolás ELŐTT elvégezné, és a szűrt adatot tárolná le, akkor ezzel bővítmények védettségét is növelhetné.

Tanulság

Bármennyire is elterjedt, ismert rendszerről van szó, nem szabad félvállról venni a vizsgálatot. Főként akkor nem, ha fizetős bővítményről van szó, aminek a forráskódjához nem lehet vásárlás nélkül hozzáférni.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.