În utilitarul e2fsck, livrat ca parte a pachetului , (), care permite executarea codului malițios în timpul verificării sistemului de fișiere care conține directoare special concepute. Prezența vulnerabilității a fost confirmată în versiunile de la 1.43.3 la 1.45.4. Vulnerabilitatea a fost remediată în actualizarea . În distribuțiile problema rămâne nerezolvată (, , , , ).
Vulnerabilitatea este cauzată de o eroare în funcția mutate_name() din fișierul rehash.c, utilizată pentru reconstructia tabelelor hash asociate cu directoarele, care asigură corelarea cu directorul a tuturor fișierelor aflate în acesta. Coruperea structurii hash_entry asociate cu directorul poate duce la scrierea datelor atacatorului în zona din afara buffer-ului alocat. În cazul în care tabela hash conține mai multe fișiere cu același nume legate de director, utilitarul e2fsck redenumește fișierele repetate adăugând la nume ~0, ~1 și așa mai departe. Pentru stocarea temporară a noului nume în timpul acestei redenumiri, se alocă un buffer de 256 de octeți în stivă.
Dimensiunea datelor copiate este determinată de expresia "entry->name_len & 0xff", dar valoarea entry->name_len este încărcată din structura de pe disc, nu este calculată pe baza dimensiunii reale a numelui. Dacă dimensiunea este zero, indicele array-ului devine -1, creând condiții pentru o depășire a capacității prin sublimită a buffer-ului (integer underflow) și suprascrierea altor date în stivă cu valoarea "~0". Pentru sistemele de 64 de biți, exploatarea vulnerabilității este evaluată ca fiind improbabilă și necesită absența unor restricții pe dimensiunea stivei (ulimit -s unlimited). Pentru sistemele de 32 de biți, exploatarea este considerată posibilă, dar rezultatul depinde mult de modul în care a fost compilat fișierul executabil de către compilator.
Pentru a efectua un atac, atacatorul trebuie să corupă în mod special datele din secțiunea cu FS ext2, ext3 sau ext4. Deoarece această operațiune necesită privilegii de superuser, vulnerabilitatea reprezintă o amenințare atunci când utilitarul e2fsck verifică unități externe sau imagini FS obținute din exterior.
Sursa: opennet.ro
