Posté par Bruno Michel le 2013-02-23
L'expansion d'entités XML sans restriction peut conduire à un déni de service dans REXML. Cette vulnérabilité a reçu l'assignation CVE-2013-1821. Nous recommandons fortement de mettre à jour Ruby.
Détails
Lors de la lecture de nœuds texte au sein d'un document XML, le parseur REXML peut être forcé à allouer des chaînes de caractères extrêmement larges, ce qui peut consommer toute la mémoire de la machine, entraînant un déni de service.
Le code concerné ressemble à ceci :
Quand la méthode `text` est appelée, les entités sont étendues. Un attaquant peut envoyer un document XML relativement petit qui, lors de cette étape, consommera d'énormes quantités de mémoire sur le système cible.
Veuillez noter que cette attaque est similaire, bien que différente, à celle de l'attaque Billion Laughs. C'est aussi en rapport avec le CVE-2013-1664 de Python.
Tous les utilisateurs d'une version concernée sont incités à mettre à jour Ruby ou utiliser l'un des contournements ci-dessous immédiatement.
Contournements
Si vous ne pouvez pas mettre à jour Ruby, utiliser ce monkey patch comme contournement :
Ce monkey patch limitera la taille des remplacements d'entités à 10k par nœud. REXML n'autorise déjà que 10000 remplacements d'entités par document (valeur par défaut). Ainsi la quantité maximale de mémoire pour le texte généré par les remplacements d'entités ne sera au maximum que d'environ 98 Mo.
Les versions de Ruby concernées
- Toutes les versions de Ruby 1.9 antérieures à la version 1.9.3 patchlevel 392
- Toutes les versions de Ruby 2.0 antérieures à la version 2.0.0 patchlevel 0
- Toutes les versions trunk avant la révision 39384
Crédits
Merci à Ben Murphy pour avoir remonté cette vulnérabilité.
Historique
- Publié initialement à 2013-02-22 12:00:00 (UTC)