Ditulis oleh Arie Kusuma Atmaja tanggal 2008-08-23
Terdapat DoS vulnerability di library REXML yang digunakan oleh Rails untuk memparse request XML yang datang. Rentan masalah ini biasa disebut sebagai teknik serangan "XML entity explosion" yang bisa digunakan secara remote untuk membuat aplikasi apa saja tidak bisa memparse XML yang sudah disediakan oleh user. Kebanyakan aplikasi Rails rentan dengan serangan ini.
Akibat
Penyerang dapat melakuka denial of service yang menyebabkan REXML memparse dokumen yang berisikan entitas bersarang rekursif seperti:
Versi Vulnerable
seri 1.8
- 1.8.6-p287 dan semua versi sebelumnya
- 1.8.7-p72 dan semua versi sebelumnya
seri 1.9
- semua versi
Solusi
Silakan mendownload monkey patch berikut untuk membenahi masalah ini.
https://www.ruby-lang.org/security/20080823rexml/rexml-expansion-fix.rb
Kemudian benahi aplikasi untuk meload rexml-expansion-fix.rb sebelum menggunakan REXML.
Kalau Anda memiliki aplikasi Rails, copy file rexml-expansion-fix.rb
ke direktori yang berada di load path (misalkan di RAILS_ROOT/lib/
),
dan tambahkan baris-baris kode berikut ini ke config/environment.rb
.
Kalau aplikasi Anda menggunakan Rails 2.1 atau lebih baru, Anda bisa
dengan mudah mengcopy file rexml-expansion-fix.rb
ke dalam direktori
RAILS_ROOT/config/initializers
dan file monkey patch tersebut akan
dipanggil dan disertakan secara otomatis.
Secara default, batas XML entity expansion adalah 10000. Anda bisa
menggantinya dengan cara mengubah
REXML::Document.entity_expansion_limit
. Misalkan:
Pembenahan ini akan tersedia sebagai gem dan digunakan di rails versi berikutnya, tetapi pengguna Ruby termasuk aplikasi terkait (seperti Rails) seharusnya mengambil langkah preventif sesegera mungkin untuk membenahi aplikasinya.
Kredit
Kredit untuk Luka Treiber dan Mitja Kolsek dari ACROS Security yang telah membeberkan rahasia sekuriti ini ke Tim Sekuriti Ruby dan Rails.
Kredit untuk Michael Koziarski dari Tim Utama Rails yang telah membuatkan monkey patch untuk membenahi vulnerability masalah keamanan ini.