Ngarkues dinamik , i përfshirë me OpenBSD, mund, në kushte të caktuara, - 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 и . Arna binare () 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 , si dhe 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 . Bërë në listën e postimeve oss-security , 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
