XiaomiBE10000 Pro固件模拟及漏洞复现

新发布小米固件模拟命令执行
2026-08-11 07:06
4108

漏洞概述

产品型号:Xiaomi路由器BE10000 Pro 稳定版
固件版本:miwifi_rp04_firmware_85be4_1.0.70.bin
漏洞类型:授权后远程命令注入漏洞
漏洞危害:由于未对用户输入参数进行有效过滤,已授权攻击者可构造恶意请求,最终以root权限在设备上执行任意命令。

风险等级:高危

固件下载 https://miuirom.org/load?o=xiaomi-router-be10000-pro&v=1.0.70&l=en&t=router

提取文件系统

分析固件

binwalk miwifi_rp04_firmware_85be4_1.0.70.bin

图片.png

在偏移 752(0x2F0) 处,识别到了一个 UBI erase count header,它是 UBI 镜像的头部信息。这意味着从这个位置开始,存放着一个 UBI 镜像。

xxd miwifi_rp04_firmware_85be4_1.0.70.bin | head -20

图片.png

魔术HDR1就是小米固件头,还有下面这些可读的字符串,其中就包括了明文的版本配置啥的比如 '1.0.89' 、release

binwalk -Me miwifi_rp04_firmware_85be4_1.0.70.bin

图片.png

有2F0.ubi 和ubifs-root文件夹 ,往这个文件夹翻找最后只有一个kernel目录,那么着重分析这个2F0.ubi

file 2F0.ubi

图片.png

说明是完整有效的UBI镜像

UBI 镜像由等大的 PEB 组成,每个 PEB 开头是 EC header(魔数 UBI#)。观察所有 UBI#的位置,间距就是 PEB 大小

strings -t x 2F0.ubi | grep "UBI#" | head -5

图片.png

那么他们的间距就是0x2000 = 2x16x16x16x16=131072/1024=128,知道了PEB=128KB,用ubireader 导出卷

ubireader_extract_imagesubireader 工具集中的一个命令行工具,专门用于从 UBI 镜像中提取出所有的 UBI 卷

ubireader_extract_images -o images 2F0.ubi

图片.png

提取出俩个卷,但是经过解压都解不出来,换另一种方法,用内核挂载,但是也失败了是因为校验 CRC 不通过,我们进一步观察CRC

hexdump -C -n 64 2F0.ubi

图片.png

第 60-63 字节的 CRC32 值是 0a a4 93 6e

再使用crc32验证下

head -c 60 2F0.ubi > 1.bin && crc32 1.bin

图片.png

0a a4 93 6ef55b6c91CRC 校验不匹配

CRC修复

厂商在生成固件时,使用了非标准的打包流程或对UBI头部进行了后处理,导致头部的CRC32校验值没有根据头部内容重新计算,与标准UBI镜像规范不符。

接下来就是修复CRC,脚本如下,整个过程就是取出每个 UBI PEB 的 EC Header 前 60 字节,用 CRC32 重算,然后把结果覆盖回后 4 字节(第 60-63 字节)

import struct, zlib
data = bytearray(open('2F0.ubi','rb').read())
PEB = 131072
for peb_off in range(0, len(data), PEB):
    ec = data[peb_off:peb_off+64]
    if ec[:4] == b'UBI#':                       # 是 EC header
        vid_off = struct.unpack('>I', ec[16:20])[0]
        ec[60:64] = struct.pack('>I', zlib.crc32(ec[:60]) & 0xffffffff)
        vid = data[peb_off+vid_off:peb_off+vid_off+64]
        if vid[:4] == b'UBI!':                  # 是 VID header
            vid[60:64] = struct.pack('>I', zlib.crc32(vid[:60]) & 0xffffffff)
open('2F0_fixed.ubi','wb').write(data)
python fix.py

图片.png

尝试提取

nandsim 模拟 NAND 芯片

sudo modprobe nandsim id_bytes=0x2c,0xda,0x00,0x15
#加载 nandsim 模拟 NAND 芯片(ID 决定参数:256MB, 2048页, 64 OOB, 128KB擦除块)

图片.png

#将修复后的 UBI 镜像对齐到 PEB 边界(128KB 的整数倍)
truncate -s %131072 2F0_fixed.ubi                            
       
#写入模拟 NAND(bs=4096 对齐到页)
sudo dd if=2F0_fixed.ubi of=/dev/mtd0 bs=4096 status=progress  
sync

#附加 UBI 设备
sudo ubiattach -O 2048 -m 0 -d 0 /dev/ubi_ctrl                 

#查看卷信息   
sudo ubinfo -a

图片.png

接下尝试UBIFS挂载rootfs 卷

sudo mount -t ubifs ubi0:ubi_rootfs /mnt/xiaomi-rootfs

试读结束,发布七天后转为公开

公开时间:2026年8月18日 07:06:46

提前解锁全文,需花费 50 积分

登录解锁全文
分享到

参与评论

0 / 200

全部评论 3

能混的头像
确实厉害
2026-08-11 08:27
江南第一深禽的头像
dddd
2026-08-11 07:18
yyjy的头像
🐂爆了
2026-08-11 07:17
投稿
签到
联系我们
关于我们