Backdoor a stored XSS v jednom incidente
Anonymizovaný prípad, keď bola kompromitovaná súborová aj databázová vrstva Joomla webu.
Lokálny zdravotnícky web. Tento prípad je dobrá ukážka toho, prečo sa odvírovanie nedá odbaviť výmenou súborov: kompromitovaná bola súborová aj databázová vrstva naraz a každá z nich by sama osebe dokázala infekciu obnoviť.
Čo sme našli
V koreni webu bol samostatný skript, ktorý sťahoval a zapisoval ďalšie payloady, a vedľa neho druhý, neautentifikovaný upload backdoor maskovaný ako pomocný súbor z úplne iného CMS — teda súbor, ktorý na prvý pohľad pôsobí ako pozostatok starej migrácie.
Databáza zároveň obsahovala perzistentnú JavaScriptovú injekciu v nastavení hlavného menu. Payload si ukladal kód do localStorage prehliadača a opakovane ho vkladal späť do stránky. Prakticky to znamená, že aj po vyčistení súborov by sa skript vracal.
Vo webroote sme navyše našli zastaraný inštalačný balík a staršie zálohy dostupné z internetu. Pri inštalačnom balíku sa nepotvrdilo, že by bol vstupným bodom — bol to však rizikový pozostatok, ktorý do obnoveného webu nepatril. Bez dostupných prístupových logov sa nedal spätne určiť prvý požiadavok útočníka.
Ako sme postupovali
Súborovú a databázovú časť incidentu sme riešili oddelene. Vyradili sme nasadzovací aj upload backdoor, vyčistili konkrétny databázový parameter a prešli menu, moduly aj obsah page buildera, či sa rovnaký vzorec neopakuje inde.
Z verejného webrootu sme odstránili staré inštalačné artefakty a zálohy, skontrolovali používateľov, sessions, oprávnenia a prístupy a vykonali rotáciu všetkých tajomstiev. Po nasadení čistej obnovenej kópie sme overili správanie frontendu — práve pri XSS uloženom v databáze je vizuálna kontrola po obnove nevyhnutná — a zásah uzavreli bezpečnostným skenom.
Výsledok
Prípad vyžadoval súčasné vyčistenie webrootu aj databázy. Samotná výmena súborov by ponechala XSS v administrácii; samotné vymazanie databázového payloadu by ponechalo mechanizmus, ktorým sa malvér nasadzoval znovu.
Čo si z toho odniesť
Kompromitácia môže mať viac vrstiev naraz: súbory, databázu, účty aj verejne dostupné zálohy. Obnova musí overiť všetky a skončiť kontrolou proti reinfekcii. A verejne dostupné zálohy a inštalačné balíky vo webroote patrí odstrániť aj vtedy, keď sa práve nepreukáže, že boli vstupným bodom.