Динамичен загрузчик , част от OpenBSD, при определени условия може да -приложения остави променлива на средата LD_LIBRARY_PATH и по този начин да позволи зареждането на несвойствени кодове в контекста на процес, изпълняван с повишени привилегии. Патчовете за отстраняване на уязвимостта са налични за версиите и . Бинарните патчове () за платформите 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").
Уязвимостта е открита от специалисти , както и проблеми. Откриващите уязвимостта изследователи по сигурността отбелязаха бързото решение на проблема: патчът е подготвен и актуализациите са издадени в рамките на три часа след получаване на уведомлението от проекта OpenBSD.
Допълнение: На проблема е присвоен номер . В списъка за разпространение oss-security е направен , включващ прототип на експлоит, работещ в OpenBSD 6.6, 6.5, 6.2 и 6.1 на архитектурите
amd64 и i386 (експлоитът може да бъде адаптиран и за други архитектури).
Проблемът се експлоатира в инсталацията по подразбиране и позволява на непривилигирован локален потребител да изпълнява код с правата на root чрез подмяна на библиотеката при стартиране на suid-утилитите chpass или passwd. За създаването на необходимите условия за експлоатация се използва настройка на ограничения RLIMIT_DATA чрез setrlimit.
Източник: opennet.ru
