[hackmeeting] Problema de seguridad en OpenBSD

Hubble Hubble en flashmail.com
Dom Mayo 19 22:19:23 CEST 2002


Hol en s,

Antes corrian por aquí gente que usaba el openBSD, 

adioses,

Hubble, 8-)

 -------------------------------------------------------------------
  Hispasec - una-al-dia                                  17/05/2002
  Todos los dias una noticia de seguridad          www.hispasec.com
 -------------------------------------------------------------------

 Problema de seguridad en OpenBSD
 -------------------------------- 

Las versiones actuales de OpenBSD permiten que cualquier usuario
local del sistema bloquee la maquina y, bajo ciertas condiciones,
obtenga privilegios de administrador o "root".

El problema radica en la verificacion de los descriptores de
ficheros 0, 1 y 2 (entrada, salida y error estandar, respectivamente)
cuando se intenta ejecutar un proceso SETUID o SETGID.

Debido a la forma en la que se hace dicha verificacion, un usuario
local del sistema puede llenar la tabla de descriptores del
sistema, creando un ataque DoS (denegacion de servicio) y, bajo
ciertas circunstancias, lograr privilegios de administrador o "root".

Las versiones en desarrollo de OpenBSD ya estan "parcheadas".

Gracias a las ventajas del codigo abierto, los usuarios pueden
parchear sus propios sistemas sin necesidad de esperar una nueva
version del sistema operativo. Con este parche, el kernel abortara
la ejecucion de la funcion "exec()" sobre un ejecutable
SETUID/SETGID si se detecta algun tipo de problema:

>>>>>

Aplicar el parche con:
cd /usr/src
patch -p0 < 003_fdalloc2.patch

y luego recompilar el kernel.

Index: sys/kern/kern_exec.c
===================================================================
RCS file: /cvs/src/sys/kern/kern_exec.c,v
retrieving revision 1.66
diff -u -r1.66 kern_exec.c
- --- sys/kern/kern_exec.c 14 Mar 2002 17:17:23 -0000 1.66
+++ sys/kern/kern_exec.c 8 May 2002 20:18:41 -0000
@@ -534,9 +534,6 @@
  * allocated.  We do not want userland to accidentally
  * allocate descriptors in this range which has implied
  * meaning to libc.
- - *
- - * XXX - Shouldn't the exec fail if we can't allocate
- - *       resources here?
  */
  if (fp == NULL) {
  short flags = FREAD | (i == 0 ? 0 : FWRITE);
@@ -544,7 +541,7 @@
  int indx;
 
  if ((error = falloc(p, &fp, &indx)) != 0)
- - break;
+ goto exec_abort;
 #ifdef DIAGNOSTIC
  if (indx != i)
  panic("sys_execve: falloc indx != i");
@@ -552,13 +549,13 @@
  if ((error = cdevvp(getnulldev(), &vp)) != 0) {
  fdremove(p->p_fd, indx);
  closef(fp, p);
- - break;
+ goto exec_abort;
  }
  if ((error = VOP_OPEN(vp, flags, p->p_ucred, p)) != 0) {
  fdremove(p->p_fd, indx);
  closef(fp, p);
  vrele(vp);
- - break;
+ goto exec_abort;
  }
  if (flags & FWRITE)
  vp->v_writecount++;

<<<<<
 
Opina sobre esta noticia:
http://www.hispasec.com/unaaldiacom.asp?id=1300

Mas Informacion:

# 003: SECURITY FIX: May 8, 2002
A race condition exists where an attacker could fill the file descriptor 
table and defeat the kernel's protection of fd slots 0, 1, and 2 for a 
setuid or setgid process.
http://www.openbsd.org/errata.html#fdalloc2

Parche OpenBSD 3.1
ftp://ftp.openbsd.org/pub/OpenBSD/patches/3.1/common/003_fdalloc2.patch

Parche OpenBSD 3.0
ftp://ftp.openbsd.org/pub/OpenBSD/patches/3.0/common/021_fdalloc2.patch

Parche OpenBSD 2.9
ftp://ftp.openbsd.org/pub/OpenBSD/patches/2.9/common/026_fdalloc2.patch


Jesus Cea Avion
jcea en hispasec.com



Más información sobre la lista de distribución HackMeeting