Vundebleco en ld.so OpenBSD

Dinamika ŝargilo ld.tiel, inkluzivita kun OpenBSD, povas, sub certaj kondiĉoj, SUID/SGID- aplikaĵoj forlasas la mediovariablon LD_LIBRARY_PATH kaj tiel permesas ŝarĝon de triaparta kodo en la kunteksto de procezo funkcianta kun altigitaj privilegioj. Flikaĵoj kiuj riparas la vundeblecon estas disponeblaj por eldonoj 6.5 и 6.6. Binaraj pecetoj (syspatch) por amd64, i386 kaj arm64 platformoj jam estas en produktado kaj devus esti disponeblaj por elŝuto antaŭ la tempo kiam ĉi tiu novaĵo estos publikigita.

La esenco de la problemo: dum operacio, ld.so unue ĉerpas la valoron de la variablo LD_LIBRARY_PATH el la medio kaj, uzante la funkcion _dl_split_path(), igas ĝin tabelo de ĉenoj - vojoj al dosierujoj. Se poste montriĝas, ke la nuna procezo estas komencita de SUID/SGID-aplikaĵo, tiam la kreita tabelo kaj, fakte, la variablo LD_LIBRARY_PATH estas forigitaj. Samtempe, se _dl_split_path() elĉerpiĝas la memoro (kio estas malfacila pro la eksplicita limo de 256 kB pri la grandeco de mediovariabloj, sed teorie ebla), tiam la variablo _dl_libpath ricevos la valoron NULL, kaj postajn kontrolojn de la valoro de ĉi tiu variablo devigos preterlasi la vokon al _dl_unsetenv ("LD_LIBRARY_PATH").

Vulnerabileco trovita de spertuloj Tiu de Qualy, kaj ankaŭ pluraj antaŭe malkaŝitaj problemoj. La sekurecaj esploristoj, kiuj identigis la vundeblecon, rimarkis kiom rapide la problemo estis solvita: diakilo estis preparita kaj ĝisdatigoj estis publikigitaj ene de tri horoj post kiam la projekto OpenBSD ricevis sciigon.

Aldono: La problemo ricevis nombron CVE-2019-19726. Farite en la dissendolisto oss-security oficiala anonco, inkluzive de prototipa ekspluato funkcianta sur OpenBSD 6.6, 6.5, 6.2 kaj 6.1 arkitekturoj
amd64 kaj i386 (la ekspluato povas esti adaptita por aliaj arkitekturoj).
La problemo estas ekspluatebla en la defaŭlta instalo kaj permesas al senprivilegia loka uzanto ekzekuti kodon kiel radikon per biblioteka anstataŭigo dum funkciado de la iloj chpass aŭ passwd suid. Por krei la malaltajn memorkondiĉojn necesajn por funkciado, agordu la RLIMIT_DATA-limon per setrlimit.

fonto: opennet.ru

Aldoni komenton