Noyau Linux : déni de service via execve

Par:
fredericmazue

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