Liens connexes

Dépêche modérée par

Dépêche éditée par

: Faille locale dans les fonctions pipe_*_open() du noyau Linux

Posté par Victor STINNER (Jabber id, page perso, ). Modéré le 05 novembre 2009.
38
Une situation de compétition (race condition) a été trouvée le 14 octobre dans les fonctions pipe_read_open(), pipe_write_open() et pipe_rdwr_open() du noyau Linux par Earl Chew, bug vieux de plus de dix ans. Deux jours plus tard, Earl a écrit un patch corrigeant le bug (commité le 21 octobre, il fait partie de la version 2.6.32-rc6).

L'histoire pourrait s'arrêter là, mais Eugene Teo de Red Hat a découvert cinq jours plus tard que le bug est une faille de sécurité. La faille est facile à exploiter avec la boîte à outils de Brad Spengler. Comme les dernières failles du noyau Linux (vmsplice(), tun_chr_pool() et perf_counter), la faille est liée au déréférencement d'un pointeur NULL. Brad Spengler a écrit un exploit (pouvoir passer root à partir d'un compte utilisateur) fonctionnant sur, au moins, Debian Etch, Fedora (6, 10 et 11), et RedHat (5.3 et 5.4). L'exploit contourne les protections SELinux dans le cas de Fedora 10 et RedHat 5.4. Il devrait publier son exploit dans les prochains jours.

Pour se protéger (ou vérifier si votre système est vulnérable ou non), assurez-vous que la valeur de /proc/sys/vm/mmap_min_addr ne soit pas nulle. Debian Sid, Mandriva Linux 2010.0, Fedora 12, Ubuntu (Ibex et supérieurs) et les noyaux patchés avec grsecurity ne sont pas vulnérables. Alors que Debian Lenny et Squeeze ont une valeur nulle par exemple (il est prévu de changer ça à partir de Debian 5.0.4). Comme l'option mmap_min_addr a été introduite dans Linux 2.6.23, Debian Etch (qui utilise un noyau 2.6.18) est vulnérable : vous pouvez utiliser les paquets etchhalf pour installer un noyau 2.6.24. Des correctifs pour RedHat sont déjà disponibles.

> Lire la suite (88 commentaires, moyenne: 3,3).   [dépêche : 2080 caractères]

Les fonctions pipe_read_open(), pipe_write_open() et pipe_rdwr_open() ont été introduites dans la version 1.3.44 du noyau Linux (novembre 1995). Un verrou a été ajouté dans la version 2.3.15 (août 1999). Sa découverte est sûrement due à la popularisation des processeurs multi-cœurs (exécution de plusieurs processus réellement parallèle, augmentant la probabilité des situations de compétition), et on peut craindre que d'autres bugs similaires soient découverts (bugs difficiles à identifier manuellement et à reproduire). Consultez l'article CVE-2009-3547: Linux kernel Pipe NULL Pointer Dereference Race Condition pour des explications sur la faille.

Une des raisons pour laquelle /proc/sys/vm/mmap_min_addr est toujours nul sur certaines distributions Linux est que cela pose problème avec quelques applications comme Qemu (pouvoir exécuter Qemu en tant qu'utilisateur non root, limitation supprimée dans les versions récentes), Wine ou DOSEMU.

Notons que la classe de bug « déréférencement de pointeur NULL » n'est pas spécifique à Linux, FreeBSD en est aussi victime par exemple. Pour preuve, ce bug récent découvert dans devfs : FreeBSD-SA-09:14 (lire Devfs/VFS NULL Pointer Race Condition pour les explications). Il existe une protection pour FreeBSD interdisant d'allouer une page mémoire à l'adresse NULL : FreeBSD-EN-09:05. Elle est activée par défaut sous FreeBSD 8, mais doit être activée manuellement sur les versions plus anciennes (ajoutez la ligne « security.bsd.map_at_zero="0" » dans /etc/sysctl.conf).

Cette discussion est archivée, il n'est plus possible de laisser des commentaires.

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.

Rien à voir mais

Posté par Laurent Cligny (page perso, ) le 05/11/2009 à 09:50. (lien). Évalué à 10.

Au lieu de Eugene Teo de Red Hat, j'ai lu Eugene Theo De Raadt et j'ai failli m'étouffer en croyant apprendre que le responsable du projet OpenBSD était passé passé sous Linux...

encore et toujours la meme faille (ou presque)

Posté par NeoX () le 05/11/2009 à 10:18. (lien). Évalué à 2.

cela se corrige en mettant une valeur differente de zero dans /proc/sys/vm/mmap_min_addr

la question qui reste etant de savoir si ce mmap_min_addr est un patch pour corriger une faille du noyau

ou une fonctionnalité de securité non utilisée par certaines distribs pour mettre de faire fonctionner des logiciels comme Wine (il parait que Wine ne fonctionne plus si mmap_min_dir n'est pas 0 )

--
Apprendre par les autres, c'est bien.
Apprendre par soi-meme (RTFM, man, et notre ami google) c'est mieux

Vérification à faire avec Ubuntu

Posté par Laurent Bonnaud () le 05/11/2009 à 10:40. (lien). Évalué à 2.

Le dépêche affirme que Ubuntu karmic n'est pas vulnérable. Or sur l'un de mes systèmes j'observe ceci:

$ cat /proc/sys/vm/mmap_min_addr
0

et sur un autre l'observe ceci:

$ cat /proc/sys/vm/mmap_min_addr
65536

Je ne sais pas encore d'où vient la différence, mais en tout cas, j'encourage tous les utilisateurs d'Ubuntu à vérifier eux mêmes.

Mais wine marche !

Posté par JGO () le 05/11/2009 à 11:13. (lien). Évalué à 1.

$ cat /proc/sys/vm/mmap_min_addr # Valeur non nulle par défaut (gentoo)
4096

$ wine notepad # wine-1.1.27 fonctionne...

Inverse de Ubuntu

Posté par tankey () le 05/11/2009 à 11:55. (lien). Évalué à 3.

Comme Laurent Bonnaud nous le fait remarquer pour Ubuntu, j'ai vérifié sur ma Fedora 11.

Fedora 11 non mise à jour (si !) depuis aout.
La valeur de /proc/sys/vm/mmap_min_addr est non nulle (65536 ici,...)
-> Selinux est activé en mode enforcing. Avec config, et pour un repertoire, à la racine, non standart : /local

Je ne dirai pas que la dépêche se trompe, loi de là :-) (au passage merci Victor pour cette dépêche : concise, précise, complète et agréable), simplement un message pour les autres utilisateurs de Fedora 10 et 11 : vérifiez... chez moi, une F11 non mise à jour, le bug n'existe pas.

Brad a publié son exploit

Posté par Victor STINNER (Jabber id, page perso, ) le 05/11/2009 à 12:05. (lien). Évalué à 9.

Vous ne pouvez plus ignorer la faille maintenant que l'exploit est public : http://grsecurity.net/~spender/enlightenment.tgz

Lancez "./run_null_exploit.sh", c'est l'exploit « MooseCox: Linux-2.X->Linux.2.6.31.unfixed pipe local root ». L'exploit ne fonctionne pas sur Ubuntu (car mmap_min_addr est non nul), mais fonctionne très bien sur Debian Lenny. J'espère que Debian va se bouger les fesses.

Les pauvres qui ont un blob binaire (genre Nvidia)

Posté par Grégoire G (Jabber id, page perso, ) le 05/11/2009 à 13:47. (lien). Évalué à 3.

il fait partie de la version 2.6.32-rc6

Vu que pour les anciennes cartes il n'existe pas de drivers pour ces noyaux, et que pour les cartes plus récentes il faut attendre (pour le moment, c'est bloqué à 2.6.29), cela démontre encore une fois que l'utilisation de drivers fermés est un problème.

Sinon, dans le cas d'un serveur virtuel (sans X11) sous OpenVZ, comment ça se passe, vu qu'il n'y a pas de root dans ces machines virtuelles?

A bientôt
Grégoire

Rien sous ArchLinux ?

Posté par sam101 () le 05/11/2009 à 15:54. (lien). Évalué à 1.

Chez moi, avec Wine d'installé, /proc/sys/vm/mmap_min_addr contient 4096... Pas de problème pour les utilisateurs d'Arch donc ;).

Debian Squeeze pas touché

Posté par gpe () le 05/11/2009 à 16:23. (lien). Évalué à 4.

contrairement à ce que dit la dépêche Debian Squeeze n'est pas touché. Il y a 4096 dans mmap_min_dir.

Exploitabilité *réelle*

Posté par Romain Be. () le 05/11/2009 à 18:37. (lien). Évalué à 1.

J'ai un peu du mal à capter la dangerosité de la faille. En particulier du fait que le bug permette une escalade de droits à partir d'un compte utilisateur normal.

Ainsi, par exemple, je ne me soucie pas trop de cette faille sur ma machine personelle. Je suis le seul à avoir un accès. D'autre part, si on parle d'accès distant sur un serveur, alors il y a de grandes chances que WINE et consors soient complètement hors-jeu, donc l'administrateur a juste à positionner le flag qui va bien, et je suis sur que c'est deja probablement le cas..

Pour finir, je rejoins totalement la position de Linus dans ce message:
http://article.gmane.org/gmane.linux.kernel/706950

one reason I refuse to bother with the whole security circus is that I think it glorifies - and thus encourages - the wrong behavior.

It makes "heroes" out of security people, as if the people who don't just fix normal bugs aren't as important.

In fact, all the boring normal bugs are _way_ more important, just because there's a lot more of them. I don't think some spectacular security hole should be glorified or cared about as being any more "special" than a random spectacular crash due to bad locking.

--
If you are the big tree,
We are the small axe...

s/RedHat/Red Hat Enterprise Linux/g

Posté par Krunch (Jabber id, page perso, ) le 05/11/2009 à 19:00. (lien). Évalué à 1.

http://www.redhat.com/f/pdf/corp/trademark_usage.pdf

Vous pouvez aussi gagner du karma en dénonçant le fait que ce PDF a été généré avec des outils propriétaires.

--
Free Softwares Users Group Arlon (Sud Luxembourg, Belgique)
pertinent, e adj. Approprié ; qui se rapporte exactement à ce dont il est question.

Revenir en haut de page