Vulnérabilité WEBrick par injection d'une séquence d'échappement

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

Sources

Merci à Giovanni "evilaliv3" Pellerano, Alessandro "jekil" Tanasi et Francesco "ascii" Ongaro pur la découvert de cette vulnérabilité.