Dobësi në ld.so OpenBSD

Ngarkues dinamik ld.pra, i përfshirë me OpenBSD, mund, në kushte të caktuara, SUID/SGID- aplikacionet largohen nga ndryshorja e mjedisit LD_LIBRARY_PATH dhe kështu lejojnë që kodi i palës së tretë të ngarkohet në kontekstin e një procesi që funksionon me privilegje të ngritura. Arna që rregullojnë cenueshmërinë janë të disponueshme për lëshime 6.5 и 6.6. Arna binare (syspatch) për platformat amd64, i386 dhe arm64 janë tashmë në prodhim dhe duhet të jenë të disponueshme për shkarkim deri në kohën e publikimit të këtij lajmi.

Thelbi i problemit: gjatë funksionimit, ld.so së pari nxjerr vlerën e ndryshores LD_LIBRARY_PATH nga mjedisi dhe, duke përdorur funksionin _dl_split_path(), e kthen atë në një grup vargjesh - shtigje drejt drejtorive. Nëse më vonë rezulton se procesi aktual është nisur nga një aplikacion SUID/SGID, atëherë grupi i krijuar dhe, në fakt, ndryshorja LD_LIBRARY_PATH pastrohet. Në të njëjtën kohë, nëse _dl_split_path() mbaron memoria (gjë që është e vështirë për shkak të kufirit të qartë prej 256 kB në madhësinë e variablave të mjedisit, por teorikisht i mundur), atëherë ndryshorja _dl_libpath do të marrë vlerën NULL dhe kontrollet pasuese të vlera e kësaj ndryshore do të detyrojë të kapërcejë thirrjen te _dl_unsetenv("LD_LIBRARY_PATH").

Dobësi e gjetur nga ekspertët Cilët, si dhe disa të zbuluara më parë probleme. Studiuesit e sigurisë që identifikuan cenueshmërinë vunë re se sa shpejt u zgjidh problemi: u përgatit një korrigjim dhe përditësimet u lëshuan brenda tre orëve pasi projekti OpenBSD mori njoftimin.

Shtim: Problemit i është caktuar një numër CVE-2019-19726. Bërë në listën e postimeve oss-security njoftim zyrtar, duke përfshirë një shfrytëzim prototip që funksionon në arkitekturat OpenBSD 6.6, 6.5, 6.2 dhe 6.1
amd64 dhe i386 (shfrytëzimi mund të përshtatet për arkitektura të tjera).
Problemi është i shfrytëzueshëm në instalimin e paracaktuar dhe lejon një përdorues lokal të paprivilegjuar të ekzekutojë kodin si rrënjë nëpërmjet zëvendësimit të bibliotekës kur ekzekuton shërbimet chpass ose passwd suid. Për të krijuar kushtet e memories së ulët të nevojshme për funksionimin, vendosni kufirin RLIMIT_DATA nëpërmjet setrlimit.

Burimi: opennet.ru

Shto një koment