CVE-2014-8090: Otro ataque por negación de servicio en la expansión de XML

La expansión de entidades en XML sin restricciones puede llegar a causar una vulnerabilidad por negación de servicio (DoS) en REXML, similar a la “Vulnerabilidad DoS por expansión de entidades en REXML” y a “CVE-2014-8080: Negación de Servicio (DoS) por Expansión de XML”. A esta vulnerabilidad se le ha asignado el identificador CVE-2014-8090. Te recomendamos actualizar tu versión de Ruby lo antes posible.

Detalles

Esta es una corrección aparte de CVE-2013-1821 y CVE-2014-8080. En los parches anteriores se corrigieron expansiones recursivas en varias partes y en el tamaño total de las cadenas creadas. Sin embargo, no se tomó en cuenta el limite anterior utilizado para la expansión de entidades. Puede darse el caso en que la utilización del CPU ascienda al 100% como resultado de la expansión de entidades con una cadena vacía. Cuando se está leyendo los nodos de un documento XML el intérprete de REXML puede ser forzado a apartar cantidades enormes de memoria lo cual puede terminar consumiendo toda la memoria de la máquina, resultando en una negación del servicio.

Código afectado sería similar a esto:

require 'rexml/document'

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

p REXML::Document.new(xml)

Todos los usuarios que están utilizando una versión afectada de Ruby deberían actualizar o utilizar una de las soluciones alternas cuanto antes.

Versiones afectadas

  • Todas las versiones de Ruby 1.9 anteriores a 1.9.3 patchlevel 551
  • Todas las versiones de Ruby 2.0 anteriores a 2.0.0 patchlevel 598
  • Todas las versiones de Ruby 2.1 anteriores a 2.1.5
  • Todo código en trunk anterior a la revisión 48402

Soluciones alternas

Si por alguna razón no puedes actualizar Ruby, este parche puede ser usado como solución alterna:

class REXML::Document
  def document
    self
  end
end

Creditos

Gracias a Tomas Hoger por reportar el problema.

Historia

  • Publicado originalmente 2014-11-13 12:00:00 UTC