CVE-2014-8090: Denial of Service Lain Ekspansi pada XML

Ekspansi entitas yang tidak dilarang dapat menyebabkan sebuah celah DoS pada REXML, seperti “Kerentanan DoS Ekspansi Entity pada REXML (Bom XML, CVE-2013-1821)” dan “CVE-2014-8080: Parameter Entity expansion DoS vulnerability in REXML”. Celah ini telah ditetapkan dalam CVE identifier CVE-2014-8090. Kami sangat merekomendasikan untuk memperbarui Ruby.

Detil

Ini adalah perbaikan tambahan untuk CVE-2013-1821 dan CVE-2014-8080. patches sebelumnya memperbaiki ekspansi rekursif di beberapa tempat dan jumlah dari ukuran Strings yang dibuat. Namun demikian, mereka tidak dapat mengambil akun resmi yang digunakan untuk ekspansi entitas. 100% utilitas CPU dapat terjadi sebagai hasil ekspansi rekursif dengan sebuah string kosong. Ketika membaca ujung teks dari sebuah dokumen XML, REXML parser dapat dipaksa mengalokasikan objek string yang sangat besar yang mana dapat mengonsumsi semua memori dalam sebuah mesin, menyebabkan sebuah denial of service.

Imbas tersebut akan terlihat dari kode berikut:

require 'rexml/document'

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

p REXML::Document.new(xml)

Semua pengguna yang terkena imbas rilis ini seharusnya memperbarui atau menggunakan salah satu solusi di bawah ini segera.

Versi yang Terkena Imbas

  • Semua Ruby versi 1.9 hingga 1.9.3 patchlevel 551
  • Semua Ruby versi 2.0 hingga 2.0.0 patchlevel 598
  • Semua Ruby versi 2.1 hingga 2.1.5
  • sebelum revisi trunk 48402

Solusi

Jika Anda tidak dapat memperbarui Ruby, gunakan monkey patch di bawah ini sebagai solusi lain:

class REXML::Document
  def document
    self
  end
end

Credits

Terima kasih Tomas Hoger telah melaporkan masalah ini.

Histori

  • Semula dipublikasikan pada 2014-11-13 12:00:00 UTC