Sårbarhet i ld.so OpenBSD

Dynamisk lastare ld.så, som ingår i OpenBSD, kan under vissa förutsättningar, SUID/SGID- applikationer lämnar miljövariabeln LD_LIBRARY_PATH och tillåter således att tredjepartskod laddas i samband med en process som körs med förhöjda privilegier. Patchar som åtgärdar sårbarheten är tillgängliga för utgåvor 6.5 и 6.6. Binära patchar (syspatch) för amd64, i386 och arm64 är plattformarna redan i produktion och bör vara tillgängliga för nedladdning när den här nyheten publiceras.

Kärnan i problemet: under drift extraherar ld.so först värdet på variabeln LD_LIBRARY_PATH från miljön och, med hjälp av funktionen _dl_split_path() förvandlar den till en array av strängar - sökvägar till kataloger. Om det senare visar sig att den aktuella processen startas av en SUID/SGID-applikation, rensas den skapade arrayen och, faktiskt, variabeln LD_LIBRARY_PATH. Samtidigt, om _dl_split_path() tar slut på minne (vilket är svårt på grund av den explicita gränsen på 256 kB för storleken på miljövariabler, men teoretiskt möjlig), så kommer variabeln _dl_libpath att få värdet NULL, och efterföljande kontroller av värdet på denna variabel tvingar att hoppa över anropet till _dl_unsetenv("LD_LIBRARY_PATH").

Sårbarhet hittad av experter Qualy's, såväl som flera tidigare avslöjat problem. Säkerhetsforskarna som identifierade sårbarheten noterade hur snabbt problemet löstes: en patch förbereddes och uppdateringar släpptes inom tre timmar efter att OpenBSD-projektet mottog meddelande.

Tillägg: Problemet har tilldelats ett nummer CVE-2019-19726. Gjord på oss-securitys e-postlista officiellt tillkännagivande, inklusive en prototypexploat som körs på OpenBSD 6.6, 6.5, 6.2 och 6.1 arkitekturer
amd64 och i386 (exploatet kan anpassas för andra arkitekturer).
Problemet kan utnyttjas i standardinstallationen och tillåter en oprivilegierad lokal användare att köra kod som root via biblioteksersättning när de kör verktygen chpass eller passwd suid. För att skapa de låga minnesförhållanden som krävs för drift, ställ in RLIMIT_DATA-gränsen via setrlimit.

Källa: opennet.ru

Lägg en kommentar