Sårbarhed i ld.so OpenBSD

Dynamisk læsser ld.så, inkluderet i OpenBSD, kan under visse betingelser, SUID/SGID- applikationer forlader miljøvariablen LD_LIBRARY_PATH og tillader således tredjepartskode at blive indlæst i sammenhæng med en proces, der kører med forhøjede rettigheder. Patches, der løser sårbarheden, er tilgængelige for udgivelser 6.5 и 6.6. Binære patches (syspatch) for amd64, i386 og arm64 platforme er allerede i produktion og bør være tilgængelige til download, når denne nyhed offentliggøres.

Essensen af ​​problemet: under drift udtrækker ld.so først værdien af ​​variablen LD_LIBRARY_PATH fra miljøet og ved hjælp af funktionen _dl_split_path() omdanner den til en række strenge - stier til mapper. Hvis det senere viser sig, at den aktuelle proces startes af en SUID/SGID-applikation, ryddes det oprettede array og faktisk LD_LIBRARY_PATH-variablen. På samme tid, hvis _dl_split_path() løber tør for hukommelse (hvilket er svært på grund af den eksplicitte 256 kB grænse på størrelsen af ​​miljøvariabler, men er teoretisk muligt), så vil _dl_libpath variablen modtage værdien NULL, og efterfølgende kontrol af værdien af ​​denne variabel vil forårsage springe kaldet til _dl_unsetenv("LD_LIBRARY_PATH").

Sårbarhed fundet af eksperter Qualy's, såvel som flere tidligere afsløret problemer. Sikkerhedsforskerne, der identificerede sårbarheden, bemærkede, hvor hurtigt problemet blev løst: en patch blev forberedt, og opdateringer blev frigivet inden for tre timer efter, at OpenBSD-projektet modtog notifikation.

Tilføjelse: Problemet er blevet tildelt et nummer CVE-2019-19726. Lavet på oss-security mailinglisten officiel meddelelse, inklusive en prototypeudnyttelse, der kører på OpenBSD 6.6, 6.5, 6.2 og 6.1 arkitekturer
amd64 og i386 (benyttelsen kan tilpasses til andre arkitekturer).
Problemet kan udnyttes i standardinstallationen og tillader en uprivilegeret lokal bruger at udføre kode som root via bibliotekserstatning, når de kører chpass- eller passwd suid-værktøjerne. For at skabe de betingelser med lav hukommelse, der er nødvendige for drift, skal du indstille RLIMIT_DATA-grænsen via setrlimit.

Kilde: opennet.ru

Tilføj en kommentar