Directory Traversal & LFI si la case mai mari – addons.mozilla.org
1Nu exista un sistem informatic sigur, poate doar cel care e inchis intr-un seif, la care i se scot toate perifericele si eventual ecranul, dar nici acolo nu e sigur. Acest lucru a mai fost confirmat inca o data, doar ca pe addons.mozilla.org. Neal Poole, un tanar pasionat de securitate web a raportat in urma cu foarte putina vreme o eroare in framework-ul CakePHP care poate duce la Directory Traversal si Local File Inclusion (LFI). Acest lucru i-a permis sa exploateze vulnerabilitatea in site-ul dedicat Addon-urilor pentru Mozilla Firefox.
Vulnerabilitatea se regaseste intr-un controller denumit pages_controller.php ce foloseste o incarcare statica a paginilor. Astfel, incarcarea paginii este determinata de parametrii care ii primeste respectivul query. Spre exemplu, https://addons.mozilla.org/en-US/firefox/pages/credits va incarca fisierul credits aferent. Codul vulnerabil arata ca mai jos :
function display() { if (!func_num_args()) { $this->redirect('/'); } $path = func_get_args(); $path_string = join('/', $path); if (!count($path) || ($path[0] == 'home')) { $this->redirect('/'); } // ...snip... $this->render($path_string);
Folosind caracterul ../ pentru coborarea unui nivel in arhitectura site-ului si %00 pentru blocarea extensiei, tanarul a reusit sa incarce fisierul etc/passwd al site-ului si sa demonstreze ca fisierele PHP sunt executate. Cele doua caractere speciale folosite au fost encodate pentru a putea fi parsate corect. URL-ul arata astfel :
https://addons.mozilla.org/en-US/firefox/pages/..%25252f..%25252f..%25252f..%25252f..%25252f..%25252f..%25252fetc/passwd%252500
Vulnerabilitatea a fost rezolvata, bazandu-se pe functiile interne ale frameworkului. Astfel, codul rezolvat arata acum astfel :
function display($page) { if (empty($page) || $page == 'home') { $this->redirect('/'); exit; } // ...snip... $this->render("/$page");
Promptitudinea developerilor de la CakePHP a fost una demna de laudat, varianta patchuita a framework-ului aparand la doar o ora si jumatate de la reclamatie. Totusi, evenimentul a demonstrat inca o data ca problemele de securitate exista, si inca la giganti. Abordarea a diferit, cu putin, vulnerabilitatea fiind observata mai intai in framework, iar apoi a fost anuntata companiei Mozilla.
Pentru asta exista mod_security 😀