În utilitarul e2fsck furnizat ca parte a pachetului
Vulnerabilitatea este cauzată de o eroare în funcția mutate_name() din fișierul rehash.c, care este utilizată la reconstruirea tabelelor hash asociate unui director, asigurându-se că toate fișierele din director sunt potrivite cu directorul. Coruperea structurii hash_entry asociată cu un director ar putea duce la un atacator să scrie date într-o zonă din afara buffer-ului alocat. Dacă mai multe fișiere cu același nume sunt identificate în tabelul hash ca fiind legate la un director, utilitarul e2fsck redenumește fișierele duplicate adăugând ~0, ~1 etc. la nume. Pentru a stoca temporar noul nume în timpul unei astfel de redenumiri, pe stivă este alocat un buffer de 256 de octeți.
Mărimea datelor de copiat este determinată de expresia „entry->name_len & 0xff”, dar valoarea entry->name_len este încărcată dintr-o structură de pe disc, mai degrabă decât calculată din dimensiunea reală a numelui. Dacă dimensiunea este zero, atunci indexul matricei ia valoarea -1 și sunt create condiții pentru depășirea întregului prin limita inferioară a buffer-ului (încărcare întreg) și suprascrierea altor date din stivă cu valoarea „~0”. Pentru sistemele pe 64 de biți, exploatarea vulnerabilității este evaluată ca improbabilă și nu necesită restricții privind dimensiunea stivei (ulimit -s nelimitat). Pentru sistemele pe 32 de biți, exploatarea este considerată posibilă, dar rezultatul depinde foarte mult de modul în care a fost compilat executabilul de către compilator.
Pentru a efectua un atac, un atacator trebuie să corupă datele într-un anumit mod în partiția cu sistemul de fișiere ext2, ext3 sau ext4. Deoarece această operațiune necesită privilegii de superutilizator, vulnerabilitatea reprezintă o amenințare atunci când utilitarul e2fsck scanează unități externe sau imagini FS primite extern.
Sursa: opennet.ru