Dinamikus betöltő , amely az OpenBSD része, bizonyos körülmények között képes lehet -alkalmazásoknál megőrizni az LD_LIBRARY_PATH környezeti változót, ezáltal lehetővé téve harmadik fél kódjának betöltését magas privilégiumokkal futó folyamat kontextusában. A sebezhetőség javítására vonatkozó javítások elérhetők a kiadásokhoz és . A bináris javítások () amd64, i386 és arm64 platformok számára már gyártásba kerültek, és a hír közzétételének időpontjára elérhetővé kell válniuk a letöltésre.
A probléma lényege: ld.so futása során először kiolvassa a LD_LIBRARY_PATH környezeti változó értékét, és a _dl_split_path() függvény által karakterláncok tömbjévé alakítja azt – elérési utakként. Ha később kiderül, hogy a jelenlegi folyamat SUID/SGID-alkalmazásként fut, akkor a létrehozott tömb és magának a LD_LIBRARY_PATH változónak az értéke törlődik. Ezen kívül, ha a _dl_split_path() futtatása közben memóriahiány lép fel (ami nehéz, mivel a környezeti változók méretének explicit korlátja 256 kByte, de elméletileg lehetséges), akkor a _dl_libpath értéke NULL-t kap, és a következő ellenőrzés figyelmen kívül hagyja az _dl_unsetenv(«LD_LIBRARY_PATH») hívását.
A sebezhetőséget a szakértői fedezték fel, ahogyan probléma is. A sebezhetőség felfedezői gyorsan reagáltak a problémára: a javítást előkészítették, és a frissítéseket három órán belül kiadta az OpenBSD projekt.
Kiegészítés: A problémának a következő azonosítója van . Az oss-security levelezőlistán megjelent egy , amely tartalmaz egy prototípust is, amely az OpenBSD 6.6, 6.5, 6.2 és 6.1 rendszeren működik az
amd64 és i386 architektúrákon (a kihasználás más architektúrákra is alkalmazható).
A probléma alapértelmezett telepítés alatt kihasználható, és nem privilegizált helyi felhasználók számára lehetővé teszi, hogy root jogokkal kódot futtassanak a chpass vagy passwd SUID segédprogramok futtatása során. A kihasználáshoz szükséges memóriahiányt a RLIMIT_DATA korlátozás beállításával érik el a setrlimit által.
Forrás: opennet.ru
