Les méthodes d'exception peuvent outrepasser $SAFE

Exception#to_s peut être utilisée pour contourner les vérifications liées à $SAFE, ce qui permet à de modifier toute chaîne de caractères.

Description du problème

Ruby met à disposition un flag numérique $SAFE, dont le niveau 4 signifie l'autorisation d'exécuter du code tiers (par exemple, un plugin). Les niveaux supérieurs font des vérifications supplémentaires pour empêcher ce comportement et protéger les données internes.

Exception#to_s comporte une vulnérabilité qui permet de contourner ces vérifications, ce qui rend possible la corruption de chaîne de caractères pure. Un exemple du mécanisme serait le suivant :

$secret_path = "foo"

proc do
    $SAFE = 4
    Exception.new($secret_path).to_s
    $secret_path.replace "/etc/passwd"
end.call

open($secret_path) do
  ...
end

Versions touchées

Cette vulnérabilité ne touche pas les branches 1.9.x. Les versions affectées sont :

  • Ruby 1.8.6 patchlevel 420 et toutes les versions précédentes
  • Ruby 1.8.7 patchlevel 330 et toutes les versions précédentes
  • Les versions de développement de Ruby 1.8 (1.8.8dev)

Solutions

Les utilisateurs concernés sont encouragés à mettre à jour leur installation de Ruby.

Mises-à-jour