Posté par Jean-Denis Vauguet le 2010-01-10
Une vulnérabilité a été découverte dans le module WEBRick, qui fait partie de la bibliothèque standard. Elle permet à des tiers malveillants d'injecter des séquences d'échappement vers les logs de WEBRick, en vue notamment de l'exécution de caractères de contrôles dangereux au sein d'un terminal utilisateur.
Un fix a d'ores et déjà été produit pour contrer cette faille. De nouvelles versions intégrant le patch seront produites sous peu. [màj : solutions disponibles dans la suite de cette news]
Description détaillée
Les séquences d'échappement de terminaison sont utilisées pour autoriser un certain nombre d'interactions entre le terminal d'exécution des processus et ces derniers. Un problème classique réside dans le fait qu'a priori, ces séquences ne sont pas censées être produites par une ressource non autorisée du point de vue du terminal, du type réseau tiers (internet…). Jusqu'alors, WEBRick ne filtrait pas les séquences d'échappement en se basant sur cette approche standard, de sorte que la protection des logs était faible. Un attaquant distant pouvait mettre à profit certaines faiblesses bien connues des terminaux en injectant dans les logs WEBRick des séquences d'échappement bien placées, en vue de leur exécution dans un terminal client.
Exemple, avec une version non patchée de WEBRick :
% xterm -e ruby -rwebrick -e 'WEBrick::HTTPServer.new(:Port=>8080).start' &
% wget http://localhost:8080/%1b%5d%32%3b%6f%77%6e%65%64%07%0a
Regardez le titre de la fenêtre xterm.
Versions concernées
- Ruby 1.8.6 patchlevel 383 et toutes les versions précédentes
- Ruby 1.8.7 patchlevel 248 et toutes les versions précédentes
- Versions de développement de Ruby 1.8 (1.8.8dev)
- Ruby 1.9.1 patchlevel 376 et toutes les versions précédentes
- Versions de développement de Ruby 1.9 (1.9.2dev)
Solutions
- Des fixs pour les versions 1.8.6, 1.8.7 et 1.9.1 suivront bientôt
cette annonce.
- Mise-à-jour 1.8.7 pl. 249 règle le problème pour la brache 1.8. Les utilisateurs de la version 1.8.7 sont encouragés à appliquer le patch.
- Mise-à-jour 1.9.1 pl. 378 règle le problème pour la branche 1.9. Les utilisateurs de la version 1.9.1 sont encouragés à appliquer le patch.
- Pour ce qui est des versions de développement, une mise-à-jour vers la révision la plus récente règle le problème.
Sources
Merci à Giovanni "evilaliv3" Pellerano, Alessandro "jekil" Tanasi et Francesco "ascii" Ongaro pur la découvert de cette vulnérabilité.