Zpět na portfolio
Bezpečnost webů Joomla

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.