Backdoor a stored XSS v jednom incidentu
Anonymizovaný případ, kdy byla kompromitována souborová i databázová vrstva Joomla webu.
Lokální zdravotnický web. Tenhle případ je dobrá ukázka toho, proč se odvirování nedá odbýt výměnou souborů: kompromitovaná byla souborová i databázová vrstva zároveň a každá z nich by sama o sobě dokázala infekci obnovit.
Co jsme našli
V kořeni webu byl samostatný skript, který stahoval a zapisoval další payloady, a vedle něj druhý, neautentizovaný upload backdoor maskovaný jako pomocný soubor z úplně jiného CMS — tedy soubor, který na první pohled působí jako pozůstatek staré migrace.
Databáze zároveň obsahovala perzistentní JavaScriptovou injekci v nastavení hlavního menu. Payload si ukládal kód do localStorage prohlížeče a opakovaně ho vkládal zpět do stránky. Prakticky to znamená, že i po vyčištění souborů by se skript vracel.
Ve webrootu jsme navíc našli zastaralý instalační balíček a starší zálohy dostupné z internetu. U instalačního balíčku se nepotvrdilo, že by byl vstupním bodem — byl to ale rizikový pozůstatek, který do obnoveného webu nepatřil. Bez dostupných přístupových logů nešlo zpětně určit první požadavek útočníka.
Jak jsme postupovali
Souborovou a databázovou část incidentu jsme řešili odděleně. Vyřadili jsme nasazovací i upload backdoor, vyčistili konkrétní databázový parametr a prošli menu, moduly i obsah page builderu, jestli se stejný vzorec neopakuje jinde.
Z veřejného webrootu jsme odstranili staré instalační artefakty a zálohy, zkontrolovali uživatele, sessions, oprávnění a přístupy a provedli rotaci všech tajemství. Po nasazení čisté obnovené kopie jsme ověřili chování frontendu — právě u XSS uloženého v databázi je vizuální kontrola po obnově nezbytná — a zásah uzavřeli bezpečnostním skenem.
Výsledek
Případ vyžadoval současné vyčištění webrootu i databáze. Samotná výměna souborů by ponechala XSS v administraci; samotné vymazání databázového payloadu by ponechalo mechanismus, kterým se malware nasazoval znovu.
Co si z toho odnést
Kompromitace může mít víc vrstev najednou: soubory, databázi, účty i veřejně dostupné zálohy. Obnova musí ověřit všechny a skončit kontrolou proti reinfekci. A veřejně dostupné zálohy a instalační balíčky ve webrootu patří odstranit i tehdy, když se zrovna neprokáže, že byly vstupním bodem.