В ядре FreeBSD 6.x — 7.x обнаружена критическая уязвимость
Информация об уязвимости поступила в сообщество FreeBSD 29 Августа 2009 года, но была проигнорирована. К сожалению неясно, в каких точно версиях имеется эта уязвимость. Изначально были затронуты версии 6.0-6.4, но мне удалось успешно запустить эксплоит на версии 7.2. Учитывая, что в nginx недавно была обнаружена уязвимость, позволяющая удаленно выполнять запуск кода с правами nginx, комбинация этих двух уязвимостей может привести к тому, что на FreeBSD с работающим nginx будет скомпроментирован root. P.S. По этическим причинам ссылка на рабочий эксплоит убрана с блога. P.P.S. По просьбам посетителей опубликован патч ядра FreeBSD:
Как сообщает Przemyslaw Frasunek, известный специалист в сфере безопасности, в ядре FreeBSD 6.x обнаружена уязвимость, позволяющая получить права root любому непревлилгированному процесу.
Уязвимость была найдена в интерфейсе уведомлений о событиях kqueue, которая приводит к разыменованию null-указателя в в ядре. Рабочий эксплойт позволяет запускать любой процесс с привилегиями root, разместив его в странице памяти с указателем на этот адрес — 0×0./*
Patch for this vulnerability, as in CVS:
--- src/sys/kern/kern_descrip.c 2006/09/04 10:30:09 1.279.2.8
+++ src/sys/kern/kern_descrip.c 2006/09/29 18:30:48 1.279.2.9
@@ -35,7 +35,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: /usr/local/www/cvsroot/FreeBSD/src/sys/kern/kern_descrip.c,v 1.279.2.8 2006/09/04 10:30:09 pjd Exp $");
+__FBSDID("$FreeBSD: /usr/local/www/cvsroot/FreeBSD/src/sys/kern/kern_descrip.c,v 1.279.2.9 2006/09/29 18:30:48 jmg Exp $");
#include "opt_compat.h"
#include "opt_ddb.h"
@@ -2602,7 +2602,7 @@ static int
badfo_kqfilter(struct file *fp, struct knote *kn)
{
- return (0);
+ return (EBADF);
}
static int
*/
Вы можете отслеживать комментарии к этой записи с помощью RSS 2.0. Комментарии и эхо-тестирование не разрешены.


Посмотрел на нескольких машинах в исходниках разной старости. Везде EBADF возвращается. Отсюда мораль: либо это совсем свежая дыра, либо её никогда не было. Эксплойт не сработал.
> но мне удалось успешно запустить эксплоит на
> версии 7.2.
что тогда исправляет приведённый в вашем сообщении патч, если эти изменения были внесены ещё в 2006 году?
> uname -rs
FreeBSD 7.2-STABLE
> cat /usr/src/sys/kern/kern_descrip.c | grep FBSDID
__FBSDID («$FreeBSD: src/sys/kern/kern_descrip.c,v 1.313.2.19 2009/07/14 19:48:31 jhb Exp $»);
> less /usr/src/sys/kern/kern_descrip.c | /kqfilter
badfo_kqfilter (struct file *fp, struct knote *kn)
{
return (EBADF);
}
Поздравляем с удачной криоразморозкой.
укажите в таком случае больше информации о багрепорте и о номере уязвимости.
в исходниках версии 7.0 нет никакого return (0) в функции badfo_kqfilter в строке 2638, там как и в патче return (EBADF);
вероятно речь идет о очень старых версиях, старее чем @38
__FBSDID («$FreeBSD: src/sys/kern/kern_descrip.c,v 1.313.4.1 2008/02/14 11:45:41 simon Exp $»);
В новости сказано — «Versions 7.1 and and beyond are not vulnerable.», так что непонятно как у вас мог сработать эксплоит на 7.2.
kern_descrip.c в 7.1 имеет версию «$FreeBSD: src/sys/kern/kern_descrip.c,v 1.313.2.10.2.2 2008/12/06 20:36:46 peter Exp $», патч бесполезен — там и так «EBADREF» в возврате прописан.
Посмотрел исходники от FreeBSD 6.3...в файле kern_descrip.c везде стоит return (EBADF);
Новость попахивает бульварной прессой...
Привет, что-то я иничего не понял. Как именно это действует