Náš příběh
Jeden z našich významných klientů nás požádal o penetrační testy webové aplikace, která byla nasazena již v produkčním prostředí, a tedy dostupná z internetu. Aplikaci navíc nevyvíjel klient, ale externí dodavatel. Byl zde kladen velký důraz na provedení testů v co nejkratším možném čase a zároveň aby nebyla ohrožena dostupnost či integrita dat – vzhledem k externímu dodavateli bylo zvýšené riziko v případném zdržení při obnově aplikace/dat.
Při penetračních testech jsme objevili celou řadu velmi závažných zranitelností. Autentizovaný běžný uživatel mohl obejít autorizační schémata a v rámci aplikace eskalovat svá privilegia na úroveň administrátora, jinými slovy, obyčejný uživatel byl schopen kompletně převzít kontrolu nad celou aplikací a libovolně ji spravovat, provádět modifikace či útočit na další uživatele aplikace.
Popsaná zranitelnost nebyla ta nejzávažnější, která se v aplikaci vyskytovala. Funkcionalita pro nahrávání obrázků umožňovala, zcela jednoduchým způsobem, obejít nastavené restrikce, a nahrát prakticky libovolný soubor. php soubor (skriptovací jazyk, ve kterém je aplikace implementována) a pomocí něj spouštět systémové příkazy na daném aplikačním serveru. Tento nahraný soubor byl navíc volně dostupný i pro neautentizovaného uživatele (tedy zcela veřejně).
Popsaným způsobem jsme byli schopni plně kompromitovat aplikační server.
Další velmi kritická zranitelnost byla nalezena v neautentizované části aplikace, opět volně dostupná z internetu. Pole pro vyhledávání adekvátně neošetřovalo uživatelské vstupy, díky čemuž bylo možné převolávat přímo dotazy v databázi, tedy jednak získat neautorizovaný přístup ke všem datům, ale také zcela kompromitovat databázový server.
Popsané zranitelnosti ve vysoké míře ohrožovaly dobrou pověst společnosti včetně možných finančních dopadů při dalším zneužití klientských dat. Navíc, vzhledem k faktu, že je aplikace veřejně dostupná, mohl zmíněné útoky provést (většinu z nich) prakticky jakýkoli návštěvník webové aplikace.