---
# System prepended metadata

title: Firmware Security

---

# Firmware Security

## 1. TL-WR841N V10 
- Detail

    - Vendor: TP-Link
    - Affected firmware version: 3.16.9
    - Vulnerability: Stack-based buffer overflow 
    - Architecture: MIPS 
    - CVE: [CVE-2020-8423](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-8423)
    - Related link: [PoC](https://ktln2.org/2020/03/29/exploiting-mips-router/)
- Summary 
    - [vuln] 在 /usr/bin/httpd 中, 有一個 `stringModify()` 函數, 其功能相當於做字串複製 (src -> dest), 只是對某些特殊字元做代換, 因為沒有檢查 bound, 所以字串 dest 可能出現 overflow; 沒開 non-executable stack 和 ASLR 
    - trace 完可以發現函數 userRpm_popupSiteSurveyRpm_AP.htm() 會取得 GET request 的參數, 此參數會傳給 writePageParamSet(), 又 writePageParamSet() 會呼叫 stringModify(), 會把值再傳給 stringModify() 的字串 src
    - [exploit] 從 uClibc 找 gadget 構建出 rop chain, 透過 GET request 在 ssid 欄位塞 payload , 造成 stringModify() 的字串 dest overflow, 控制 pc, 拿到 shell 權限
    - [trick] 須注意 (1) MIPS branch/jump 指令有採用 delay slot 的機制, 所以 gadget 裡面 jmp 後面要多一道指令 (2) 為了解決 MIPS cache coherence 的問題, 即寫到 buffer 的資料不會馬上存到 stack 上, 要多呼叫 sleep() 等它一下

## 2. Cisco RV130 router
- Detail
    
    - Vendor: Cisco 
    - Affected firmware version: RV130 < 1.0.3.45 
    - Vulnerability: Stack-based buffer overflow
    - Architecture: ARM
    - CVE: [CVE-2019-1663](https://nvd.nist.gov/vuln/detail/CVE-2019-1663)
    - Related link: [Writeup](https://quentinkaiser.be/exploitdev/2019/08/30/exploit-cve-2019-1663/) 

- Summary
    - [vuln] 使用者可控制的 login 參數 `pwd` 會 pass 給 strcpy(), 又 strcpy() 是 dangerous function, 可能出現 stack-based 的 buffer overflow; ASLR 沒開
    - [exploit] 利用 return-to-libc 攻擊取得 root shell, 發出一個 POST request, 把設計好的 buffer 塞在參數的 pwd 欄位

## 3. Netgear WNDR3400v3
- Detail 

    - Vendor: Netgear 
    - Affected firmware version: 1.0.1.18 - 1.0.1.24 
    - Vulnerability: Stack-based buffer overflow
    - Architecture: MIPS
    - CVE: [CVE-2019-14363](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-14363)
    - Related link: [PoC](https://github.com/reevesrs24/CVE/blob/master/Netgear_WNDR2400v3/upnp_stack_overflow/upnp_stack_overflow.md)

- Summary
    - [vuln] upnpd binary 中有個 ssdp_http_method_check() 函數會呼叫 strcpy(), 有 stack-based buffer overflow; 有開 ASLR 但沒開 non-executable stack 
    - [exploit] 利用 `libc.so.0`, `libnat.so` 和 `libcrypt.so.0` 等有 static 位址的 library 找出 gadget, 串成 rop chain, 把設計好的 buffer 包成 UPnP SSDP 封包送出