ld.so OpenBSD жүйесіндегі осалдық

Динамикалық жүктеуші лд.с.OpenBSD-мен қамтылған , белгілі бір жағдайларда, SUID/SGID- қолданбалар LD_LIBRARY_PATH ортасының айнымалы мәнінен шығады және осылайша жоғарылатылған артықшылықтармен орындалатын процесс контекстінде үшінші тарап кодын жүктеуге мүмкіндік береді. Осалдықты түзететін патчтар шығарылымдар үшін қол жетімді 6.5 и 6.6. Екілік патчтар (syspatch) amd64, i386 және arm64 платформалары үшін қазірдің өзінде шығарылымда және бұл жаңалық жарияланған кезде жүктеп алуға қолжетімді болуы керек.

Мәселенің мәні: жұмыс кезінде ld.so алдымен ортадан LD_LIBRARY_PATH айнымалысының мәнін шығарып алады және _dl_split_path() функциясын пайдаланып, оны жолдар массивіне - каталогтарға жолдарға айналдырады. Ағымдағы процесс SUID/SGID қолданбасы арқылы басталғаны кейінірек анықталса, жасалған массив және шын мәнінде, LD_LIBRARY_PATH айнымалысы тазаланады. Сонымен қатар, егер _dl_split_path() жады таусылып қалса (бұл орта айнымалыларының өлшеміне 256 кБ анық шектеуге байланысты қиын, бірақ теориялық мүмкін), онда _dl_libpath айнымалысы NULL мәнін алады және одан кейінгі тексеру осы айнымалы мәннің мәні _dl_unsetenv("LD_LIBRARY_PATH") шақыруды өткізіп жіберуге әкеледі.

Сарапшылар анықтаған осалдық Qualyдікі, Сонымен қатар бірнешеу бұрын ашылған проблемалар. Осалдықты анықтаған қауіпсіздік зерттеушілері мәселенің қаншалықты жылдам шешілгенін атап өтті: патч дайындалды және OpenBSD жобасы хабарлама алғаннан кейін үш сағат ішінде жаңартулар шығарылды.

Қосымша: мәселеге нөмір берілді CVE-2019-19726. Oss-қауіпсіздікті жіберу тізімінде жасалған ресми хабарландыру, соның ішінде OpenBSD 6.6, 6.5, 6.2 және 6.1 архитектураларында жұмыс істейтін эксплойт прототипі
amd64 және i386 (эксплейт басқа архитектуралар үшін бейімделуі мүмкін).
Мәселе әдепкі орнатуда пайдаланылады және артықшылығы жоқ жергілікті пайдаланушыға chpass немесе passwd suid утилиталарын іске қосқан кезде кітапхананы ауыстыру арқылы кодты түбір ретінде орындауға мүмкіндік береді. Жұмыс істеуге қажетті жад көлемі аз жағдайларды жасау үшін setrlimit арқылы RLIMIT_DATA шегін орнатыңыз.

Ақпарат көзі: opennet.ru

пікір қалдыру