DoS vulnerability di REXML

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:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE member [
  <!ENTITY a "&b;&b;&b;&b;&b;&b;&b;&b;&b;&b;">
  <!ENTITY b "&c;&c;&c;&c;&c;&c;&c;&c;&c;&c;">
  <!ENTITY c "&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;">
  <!ENTITY d "&e;&e;&e;&e;&e;&e;&e;&e;&e;&e;">
  <!ENTITY e "&f;&f;&f;&f;&f;&f;&f;&f;&f;&f;">
  <!ENTITY f "&g;&g;&g;&g;&g;&g;&g;&g;&g;&g;">
  <!ENTITY g "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx">
]>
<member>
&a;
</member>

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.

http://www.ruby-lang.org/security/20080823rexml/rexml-expansion-fix.rb

Kemudian benahi aplikasi untuk meload rexml-expansion-fix.rb sebelum menggunakan REXML.

require "rexml-expansion-fix"
...
doc = REXML::Document.new(str)
...

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.

require "rexml-expansion-fix"

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:

REXML::Document.entity_expansion_limit = 1000

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.

Artikel Selengkapnya…

Jalinan Apple dan Ruby Semakin Mesra

Sejak gempar Mac OS X (Leopard) dirilis tahun lalu beserta dukungan penuh untuk Ruby dan Ruby on Rails berupa included dengan Sistem Operasi, sepertinya relasi Apple dan berkelebatnya Ruby semakin melaju dengan mesra.

Ada artikel di InfoQ yang menggarisbawahi beberapa cara menggunakan Ruby di Apple yang mungkin Anda lewatkan adalah sebagai berikut:

  • iPhone Configuration Web Utility - Sebuah tool yang ditulis dengan Ruby on Rails supaya customer enterprise bisa memanage iPhone.
  • SproutCore JavaScript framework - yang didesain untuk aplikasi-aplikasi yang mirip Desktop untuk Web dan digunakan aplikasi baru Apple MobileMe. SproutCore terinstalasi sebagai gem, menggunakan generator yang ditulis dengan Ruby untuk menciptakan resource-resource dan menggunakan Merb untuk generate karya HTML.
  • Proyek MacRuby - Apple port Ruby pada runtime Objective-C - yang membuat integrasi Cocoa untuk pengembangan aplikasi Desktop menjadi semakin mudah.

Sudah adakah di antara teman-teman di komunitas Ruby yang sudah mencoba bereksperimen dan menggunakan aplikasi web MobileMe dan SproutCore? Bagaimana pendapat Anda? Silakan ikut serta aktif bersuara lewat blog Anda dan pasang link Anda kesini.

Sumber Tulisan: RubyInside. Apple And Ruby: The Ongoing Relationship diterjemahkan ke Bahasa Indonesia oleh ariekeren

Artikel Selengkapnya…

Berita Lain

Arsip Sebelumnya…

Tertarik dengan Ruby?

Anda ingin tahu lebih lanjut tentang Ruby? Bergabunglah dengan milis id-ruby atau silakan isi form di bawah ini:

Bergabung dengan id-ruby
Layanan dari tech.groups.yahoo.com