В ядре FreeBSD 6.x — 7.x обнаружена критическая уязвимость

BSDКак сообщает Przemyslaw Frasunek, известный специалист в сфере безопасности, в ядре FreeBSD 6.x обнаружена уязвимость, позволяющая получить права root любому непревлилгированному процесу.
Уязвимость была найдена в интерфейсе уведомлений о событиях kqueue, которая приводит к разыменованию null-указателя в в ядре. Рабочий эксплойт позволяет запускать любой процесс с привилегиями root, разместив его в странице памяти с указателем на этот адрес — 0×0.

Информация об уязвимости поступила в сообщество FreeBSD 29 Августа 2009 года, но была проигнорирована.

К сожалению неясно, в каких точно версиях имеется эта уязвимость. Изначально были затронуты версии 6.0-6.4, но мне удалось успешно запустить эксплоит на версии 7.2.

Учитывая, что в nginx недавно была обнаружена уязвимость, позволяющая удаленно выполнять запуск кода с правами nginx, комбинация этих двух уязвимостей может привести к тому, что на FreeBSD с работающим nginx будет скомпроментирован root.

Источник информации.

P.S. По этическим причинам ссылка на рабочий эксплоит убрана с блога.

P.P.S. По просьбам посетителей опубликован патч ядра FreeBSD:

/*
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
*/


1 звезда2 звезды3 звезды4 звезды5 звезд (15 голосов, средний: 3.80 из 5)
Loading ... Loading ...

Комментарии: 7 к “В ядре FreeBSD 6.x — 7.x обнаружена критическая уязвимость”

  1. John Lepikhin Says:

    Посмотрел на нескольких машинах в исходниках разной старости. Везде EBADF возвращается. Отсюда мораль: либо это совсем свежая дыра, либо её никогда не было. Эксплойт не сработал.

  2. taleks Says:

    > но мне удалось успешно запустить эксплоит на

    > версии 7.2.

    что тогда исправляет приведённый в вашем сообщении патч, если эти изменения были внесены ещё в 2006 году?

  3. neko Says:

    > 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);

    }

    Поздравляем с удачной криоразморозкой.

  4. unscrubber Says:

    укажите в таком случае больше информации о багрепорте и о номере уязвимости.

    в исходниках версии 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 $»);

  5. Elight Says:

    В новости сказано — «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» в возврате прописан.

  6. Dorlas Says:

    Посмотрел исходники от FreeBSD 6.3...в файле kern_descrip.c везде стоит return (EBADF);

    Новость попахивает бульварной прессой...

  7. TeesejoiliRef Says:

    Привет, что-то я иничего не понял. Как именно это действует