Faille CVE-2015-7551 : vulnérabilité liée à une chaîne de caractère dans Fiddle et DL

La librairie Fiddle (wrapper libffi) et l’API DL comportent une vulnérabilité liée à la possibilité de compromettre une chaîne de caractère. Cette vulnérabilité s’est vue assigner l’identifiant CVE CVE-2015-7551.

Détails

La vulnérabilité a tout d’abord été signalée sous l’identifiant CVE-2009-5147 dans DL. Elle a été corrigée, puis malheureusement réintroduite lors de la réécriture de DL avec Fiddle et libffi.

La correction initiale pour CVE-2009-5147 s’est faite dans Ruby 1.9.1, mais n’a pas été portée sur les autres branches, de sorte que les versions de Ruby incorporant DL (mise à part Ruby 1.9.1) sont touchées par cette faille.

Voici une démonstration de la vulnérabilité :

handle = Fiddle::Handle.new(dangerous_user_input)

Ou bien encore :

handle = Fiddle::Handle.new(some_library)
function_pointer = handle[dangerous_user_input]

Nous invitons fortement tous les utilisateurs d’une version affectée par cette vulnérabilité à procéder à une mise à jour, ou au minimum à implémenter un contournement (hotfix) le plus rapidement possible (cf. ci-après).

Versions affectées

  • Toutes les releases de niveau “patch” pour Ruby 1.9.2 et Ruby 1.9.3 (DL et Fiddle).
  • Toutes les releases de niveau “patch” pour Ruby 2.0.0 avant p648 (DL et Fiddle).
  • Toutes les versions de Ruby 2.1 antérieures à Ruby 2.1.8 (DL et Fiddle).
  • Toutes les versions de Ruby 2.2 antérieures à Ruby 2.2.4 (Fiddle).
  • Ruby 2.3.0-preview 1 et -preview 2 (Fiddle).
  • Sur le trunk, toute version avant la révision 53153 (Fiddle).

Contournements

Si vous ne pouvez pas mettre à jour votre version de Ruby, vous pouvez choisir d’implémenter un contournement pour Fiddle :

class Fiddle::Handle
  alias :old_initialize :initialize

  def initialize file, *args
    raise SecurityError if file.tainted? && $SAFE > 0
    old_initialize file, *args
  end

  alias :sym :[]
  alias :old_call :[]

  def [] fun
    raise SecurityError if fun.tainted? && $SAFE > 0
    old_call fun
  end
end

Si vous utilisez encore DL, passez à Fiddle.

Remerciements

À Christian Hofstaedtler zeha@debian.org pour avoir remonter le bug !

Historique

  • Initialement publié le 16 décembre 2015 à 12:00:00 UTC