CVE-2014-8090 : Un autre déni de service sur l'expansion XML

Une entité non restreinte peut mener à une vulnérabilité dans REXML, similaire aux failles “Vulnérabilité de type Déni de service par expansion des entités dans REXML (bombe XML, CVE-2013-1821)” et “CVE-2014-8080 : Déni de service sur l’expansion XML”. Cette vulnéranilité a reçu l’identifiant CVE CVE-2014-8090. Nous vous recommandons vivement de mettre à jour Ruby.

Détails

Ceci est correctif supplémentaire pour les failles “CVE-2013-1821” et “CVE-2014-8080”. Les précédents correctifs corrigaient la récursion d’expansions dans un certain nombre de lieux et la taille total des chaînes de caractères créées. Cependant, cela n’a pas pris en compte l’ancienne limite utilisée pour l’expansion d’extension. La récursion d’expansion d’une chaîne de caractères peut amener à l’occupation totale du CPU. Lors de la lecture des nœuds d’un document XML, le parseur REXML peut être forcé à créer des chaînes de caractères d’une très grande taille et qui consomme la totalité de la mémoire de la machine, causant ainsi une attaque par déni de service.

Le code impacté ressemble à ceci :

require 'rexml/document'

xml = <<XML
<!DOCTYPE root [
  # ENTITY expansion vector
]>
<cd></cd>
XML

p REXML::Document.new(xml)

Tous les utilisateurs utilisant une version impactée doivent soit mettre à jour ou utiliser une solution de contournement dans les plus brefs délais.

Versions concernées

  • Toutes les versions de Ruby 1.9 antérieures à Ruby 1.9.3 patchlevel 551
  • Toutes les versions de Ruby 2.0 antérieures à Ruby 2.0.0 patchlevel 598
  • Toutes les versions de Ruby 2.1 antérieures à Ruby 2.1.5
  • Toutes les révisions du trunk antérieures à 48402

Solution de contournement

Si vous ne pouvez pas mettre à jour Ruby, utilisez le patch suivant :

class REXML::Document
  def document
    self
  end
end

Crédit

Merci à Tomas Hoger pour le signalement de ce bug.

Historique

  • Article publié le 13 novembre 2014 à 12h00 (UTC)