Уязвимость в ld.so OpenBSD

Динамический загрузчик ld.so, входящий в состав 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»).

Источник: http://www.opennet.ru/opennews/art.shtml?num=52012