Halaman

Tampilkan postingan dengan label security. Tampilkan semua postingan
Tampilkan postingan dengan label security. Tampilkan semua postingan

Jumat, 05 Februari 2010

[shared] Directory Traversal in Rails

beberapa saat yang lalu di project yang sedang saia kerjakan, saia menyadari sebuah security hole yang bisa dibilang cukup berbahaya (untungnya sebelum terjadi hal2 yang tidak diinginkan). yang menyebabkan masalah, saia membuat sebuah page yang isinya berasal dari partial berdasarkan params, isi view-nya kurang lebih seperti ini:

# views/frontpages/show.html.erb
<h3>Title</h3>
<%= render :partial => params[:page] || "home" %>

jadi isi dari page tersebut tergantung dari params page. yang jadi masalah ketika user memasukkan suatu url seperti
http://..../frontpages/show?page=%2fadmin%2fusers%2flist
(url dapat dengan mudah dicari menggunakan dictionary attack atau sejenisnya)
maka partial yang di-load akan berasal dari halaman di admin::users.
walaupun besar kemungkinan user tidak akan dapat melihat data di halaman tersebut karena akses tidak melalui controller, tetapi hal tersebut tetap tidak seharusnya diperbolehkan. apalagi terkadang dengan alasan 'malas' atau lainnya kita melakukan pengambilan data tidak di dalam controller tetapi langsung di view atau helper dimana data tersebut digunakan (ini salah satu alasan mengapa pengambilan data harus berada di controller bukan di view)

untuk mengatasi hal tersebut saia memproses params page td sebelum digunakan di view, misalkan:

# /controllers/frontpages_controller.rb
# ...
def show
@partial = (params[:page].blank? ||
params[:page].try('include?', '/')) ?
'home' : params[:page]
end
# ...


# views/frontpages/show.html.erb
<h3>Title</h3>
<%= render :partial => @partial %>

atau lebih baik lagi dengan tidak meng-implementasi partial seperti ini dan membuat action terpisah untuk setiap page.

yah situasi di atas mungkin merupakan hal bodoh yang seharusnya tidak terjadi selama kita mengikuti konvensi dari rails, tp ada kalanya karena berbagai alasan kita melanggar konvensi dan menggunakan implementasi kita sendiri, karenanya sebaiknya kita berpikir 1000x (lebay) sebelum melakukan hal itu.

oh ya directory traversal sendiri bukan hanya dapat digunakan pada situasi seperti di atas, tetapi banyak situasi lain yang bisa dimanfaatkan dengan directory traversal ini. karena itu, berhati-hatilah, inget kata bang napi (halah..)

ok segitu aja, tadinya mao nulis lanjutan dari svn branching tapi ditunda buat next post ^_^