Noyau Linux : déni de service via execve
mer, 03/02/2010 - 15:13
Une vulnérabilité très facile a exploiter a été découverte dans le noyau Linux. L'exploit aboutit à un déni de service de la machine attaquée.
La vulnérabilité est ainsi décrite sur Vigil@ance
"Les appels système (select(), poll(), etc.) et l'espace mémoire sont différents d'un système à l'autre. Par exemple, un programme conçu pour utiliser select() de Solaris peut ne pas fonctionner avec le select() de Linux à cause de différences mineures de comportement.
Les personnalités (ou domaines d'exécution) indiquent comment le noyau doit se comporter :
- PER_LINUX : mode normal pour Linux
- PER_SOLARIS : émuler le fonctionnement du noyau Solaris
- PER_IRIX32 : émuler le fonctionnement du noyau IRIX
- etc.
La macro SET_PERSONALITY() initialise ces personnalités.
Sur un processeur x86_64, un attaquant peut démarrer une application 32 bits, qui appelle via execve() un programme 64 bits, ce qui échoue. Cependant, la macro SET_PERSONALITY() était tout de même appelée durant le execve(). Le programme a alors obtenu une personnalité 64 bits, alors qu'il est 32 bits, ce qui corrompt son état, et stoppe le noyau.
Sur un processeur x86_64, un attaquant local peut donc employer un programme ELF illicite, afin de stopper le système. "
Source : Vigil@ance