Ld.so OpenBSD:n haavoittuvuus

Dynaaminen kuormaaja ld. niin, joka sisältyy OpenBSD:hen, saattaa tietyin edellytyksin SUID/SGID- sovellukset jättävät ympäristömuuttujan LD_LIBRARY_PATH ja sallivat siten kolmannen osapuolen koodin lataamisen korotetuilla oikeuksilla suoritettavan prosessin yhteydessä. Haavoittuvuuden korjaavia korjaustiedostoja on saatavana julkaisuille 6.5 и 6.6. Binaariset korjaustiedostot (syspatch) amd64-, i386- ja arm64-alustoille ovat jo tuotannossa ja niiden pitäisi olla ladattavissa tämän uutisen julkaisemiseen mennessä.

Ongelman ydin: ld.so poimii toiminnan aikana ensin LD_LIBRARY_PATH-muuttujan arvon ympäristöstä ja muuntaa sen _dl_split_path()-funktion avulla joukoksi merkkijonoja - polkuja hakemistoihin. Jos myöhemmin käy ilmi, että SUID/SGID-sovellus käynnistää nykyisen prosessin, luotu taulukko ja itse asiassa LD_LIBRARY_PATH-muuttuja tyhjennetään. Samanaikaisesti, jos _dl_split_path()-muisti loppuu (mikä on vaikeaa ympäristömuuttujien nimenomaisen 256 kt:n rajoituksen vuoksi, mutta teoriassa mahdollista), _dl_libpath-muuttuja saa arvon NULL ja seuraavat tarkistukset tämän muuttujan arvo pakottaa ohittamaan kutsun _dl_unsetenv("LD_LIBRARY_PATH").

Asiantuntijat löysivät haavoittuvuuden Qualyn, yhtä hyvin kuin useita aiemmin paljastettuja ongelmia. Haavoittuvuuden tunnistaneet tietoturvatutkijat panivat merkille, kuinka nopeasti ongelma ratkesi: korjaustiedosto valmistettiin ja päivitykset julkaistiin kolmen tunnin kuluessa siitä, kun OpenBSD-projekti oli saanut ilmoituksen.

Lisäys: Ongelmalle on annettu numero CVE-2019-19726. Tehty oss-security-postituslistalle virallinen ilmoitus, mukaan lukien prototyypin hyväksikäyttö, joka toimii OpenBSD 6.6-, 6.5-, 6.2- ja 6.1-arkkitehtuureissa
amd64 ja i386 (hyödynnettävyys voidaan sovittaa muihin arkkitehtuureihin).
Ongelma on hyödynnettävissä oletusasennuksessa ja sallii etuoikeutettoman paikallisen käyttäjän suorittaa koodin pääkäyttäjänä kirjaston korvaamisen kautta, kun chpass- tai passwd suid -apuohjelmat suoritetaan. Luodaksesi toiminnan edellyttämät vähän muistia, aseta RLIMIT_DATA-raja setrlimitin kautta.

Lähde: opennet.ru

Lisää kommentti