HTTP all the things

Ruby 2.0 : Module#prepend

Rendez-vous à Paris Web

Sortie de la version 1.9.3-p286 de Ruby

La version 1.9.3-p286 de Ruby a été publiée.

Elle contient des correctifs de sécurité importants, en plus d'autres corrections de bugs :

Veuillez consulter les tickets et ChangeLog pour plus de détails.

Téléchargement

Vulnérabilité de contournement de $SAFE via Exception#to_s et NameError#to_s (CVE-2012-4464, CVE-2012-4466)

Des vulnérabilités ont été découvertes sur les méthodes Exception#to_s, NameError#to_s et name_err_mesg_to_s(), cette dernière faisant partie de l'API interne de l'interpréteur Ruby. Une personne malveillante peut contourner la vérification de $SAFE en utilisant un de ces trous de sécurité.

Détails

$SAFE est un mécanisme de Ruby n'autorisant du code provenant d'un utilisateur non-autorisé que dans un mode où la variable $SAFE est supérieure ou égale à 4. C'est une sorte de méthode de confinement, interdisant certaines opérations afin de protéger les données en dehors de la zone de confinement.

Le problème trouvé permet de contourner ce mécanisme. Les méthodes Exception#to_s, NameError#to_s et name_err_mesg_to_s() ne géraient pas correctement les bits $SAFE : une chaîne de caractères non-contaminée (untainted) pouvait être marquée comme contaminée (tainted), de manière destructive, par une de ces méthodes. Ainsi, du code non-autorisé dans une zone de confinement pouvait modifier une chaîne de caractère qui était initialement marquée comme non-contaminée.

Ruby 1.8 avait déjà eu une faille de sécurité similaire. Exception#to_s et NameError#to_s avaient été corrigées à sa suite, mais le problème est resté pour name_err_mesg_to_str() malgré le correctif de sécurité.

Versions de Ruby affectées

  • Toutes les versions de Ruby 1.8.7 antérieures au patchlevel 371
  • Toutes les versions de Ruby 1.9.3 antérieures au patchlevel 286
  • Toutes les branches de développement de Ruby 2.0 antérieures à la révision r37068

Solution

Mettre à jour vers la dernière version disponible.

Crédit

La vulnérabilité a été découverte par Tyler Hickes.

Mises à jour

  • Initialement publié le 2012-10-12 à 19:17:50 JST.

Création non-intentionnelle de fichiers

Une vulnérabilité a été découverte, qui permet la création non-intentionnelle de fichiers en insérant de manière bien choisie des caractères NUL dans le chemin des fichiers.

Détails

Ruby permet de manipuler des données binaires arbitraires en tant que chaînes de caractères, y compris des caractères NUL. Par contre, les systèmes d'exploitation et autres bibliothèques ont tendance à être plus restrictifs et à utiliser NUL comme marqueur de fin de chaînes. Ainsi, pour les interfacer correctement avec Ruby, il convient de traiter correctement les caractères NUL.

Cependant, certaines méthodes comme IO#open ne faisaient aucune vérification sur les noms de fichiers qui lui étaient passés, et transféraient telles quelles ces chaînes de caractères aux primitives de plus bas niveau. Cela pouvait conduire à la création non-intentionnelle de fichiers, comme dans cet exemple :

p File.exists?("foo")      #=> false
open("foobar", "w") { |f| f.puts "hai" }
p File.exists?("foo")      #=> true
p File.exists?("foobar") #=> raises ArgumentError

Versions de Ruby affectées

  • Toutes les versions de Ruby 1.9.3 antérieurs au patchlevel 286
  • Toutes les branches de développement de Ruby 2.0.0 antérieures à la révision r37163

Solution

Mettre à jour vers la version la plus récente.

Crédit

Ce problème a été remonté par Peter Bex.

Mises à jour

  • Initialement publiées le 2012-10-12 à 19:19:55 JST.

OSDC.fr est de retour !

Let Desi handle your menial Elastic Search chores!