Dynamic loader
D'Essenz vum Problem: während der Operatioun extrahéiert ld.so fir d'éischt de Wäert vun der Variabel LD_LIBRARY_PATH aus der Ëmwelt a benotzt d'Funktioun _dl_split_path() an verwandelt se an eng Rei vu Saiten - Weeër fir Verzeichnisser. Wann et spéider erausstellt datt den aktuelle Prozess vun enger SUID/SGID Applikatioun gestart gëtt, da ginn déi erstallt Array an tatsächlech d'LD_LIBRARY_PATH Variabel geläscht. Zur selwechter Zäit, wann _dl_split_path () aus Erënnerung leeft (wat schwéier ass wéinst der explizit 256 kB Limit op d'Gréisst vun den Ëmfeldvariablen, awer theoretesch méiglech ass), da kritt d'_dl_libpath Variabel de Wäert NULL, a spéider Iwwerpréiwung vum Wäert vun dëser Variabel wäert den Uruff un _dl_unsetenv ("LD_LIBRARY_PATH") iwwersprangen.
Schwachstelle fonnt vun Experten
Zousatz: De Problem gouf eng Nummer zougewisen
amd64 an i386 (den Exploit ka fir aner Architekturen ugepasst ginn).
D'Thema ass exploitéierbar an der Standardinstallatioun an erlaabt en onprivilegéierte lokale Benotzer Code als Root iwwer Bibliothéikssubstitutioun auszeféieren wann Dir de chpass oder passwd suid Utilities leeft. Fir déi niddereg Erënnerungsbedéngungen ze kreéieren déi néideg sinn fir Operatioun, setzt d'RLIMIT_DATA Limit iwwer setrlimit.
Source: opennet.ru