CVE-2026-123960 是 TOTOLINK CA300-PoE 路由器固件 6.2c.884 中一个远程可触发的缓冲区溢出漏洞
原创
mourenzheng
mourenzheng
网络安全民工
2026年11月8日 15:00
北京
去阅读
一、漏洞定性:一个经典的 setWanConfig 缓冲区溢出
TOTOLINK CA300-PoE 是一款带 PoE 供电能力的无线接入控制器/路由器。漏洞位于其 Web 管理 CGI 的 /cgi-bin/cstecgi.cgi 端点,具体在 setWanConfig 函数中。问题出在对 pppoeUser、priDns、secDns 这三个参数的处理上:服务端在将这些参数的值拷贝到目标缓冲区时,没有验证输入长度是否小于缓冲区容量,构成了经典的缓冲区溢出(CWE-120 / CWE-119)。
| 项 | 值 |
|---|---|
| 漏洞类型 | 缓冲区溢出(CWE-120 / CWE-119) |
| 影响产品 | TOTOLINK CA300-PoE,固件 6.2c.884 |
| 攻击入口 | /cgi-bin/cstecgi.cgi,setWanConfig 函数,pppoeUser/priDns/secDns 参数 |
| 认证要求 | 低权限(PR:L),但攻击可远程发起(AV:N) |
| 利用复杂度 | 低(AC:L,VulDB:“exploitation is known to be easy”) |
| 公开 PoC | 已有(托管在 lavender-bicycle-a5a.notion.site,VulDB 标注为公开 exploit) |
| CVSS 评分 | 8.6 High(NVD/CNA VulDB,CVSS 4.0);VulDB Meta Base Score 9.9;CIRCL/Launchpad 引用 9.4 Critical |
| 在野利用 | 未确认。不在 CISA KEV,Mallory 标注 “No exploitation reported” |
| 修复版本 | 无。VulDB 明确指出“没有已知的对抗措施”,建议“用替代产品替换受影响的对象” |
评分差异的来源是 CVSS 版本和计算方式的不同:NVD 采用的 CVSS 4.0 基础评分为 8.6(AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H),VulDB 自己的 Meta 评分(结合了时间和利用状态)达到 9.9,而部分聚合平台引用的 CNA 评分为 9.4。无论取哪个数字,High 到 Critical 的区间都指向同一个结论:这是一个需要认真对待的远程内存损坏漏洞。
二、技术原理:参数拷贝没有边界
setWanConfig 是路由器 Web 界面用来配置 WAN 连接(如 PPPoE 拨号)的函数。pppoeUser(PPPoE 用户名)、priDns 和 secDns(主/备 DNS 服务器)都是用户可提交的字符串参数。在正常的实现中,每个参数都应该被复制到一个固定大小的缓冲区里,并且在复制前检查传入字符串的长度。
这个漏洞的本质是这个检查不存在。当一个远超目标缓冲区容量的值被提交时,拷贝操作会越过目标缓冲区的边界,覆盖相邻的内存区域。在嵌入式路由器这类环境中,堆或栈上的相邻内存往往包含函数指针、返回地址或关键的控制结构,溢出可能直接导致控制流被劫持。VulDB 的 CWE 标注同时包含了 CWE-120(缓冲区复制未检查输入大小)和 CWE-119(内存缓冲区边界内的操作限制不当),描述的是同一个根本问题。
Mallory 的分析对此保持了恰当的谨慎:具体的利用效果(如任意代码执行)尚未被公开证实。公开信息停留在“PoC 已披露、内存损坏已确认”的层面。但这不改变风险的定性——一个远程可触发、有公开 PoC、且厂商无补丁的内存损坏漏洞,本身就是攻击链中价值最高的原语之一。
三、利用条件与真实风险
利用这个漏洞需要满足的条件很少:
- 网络可达性:攻击者需要能访问路由器的 Web 管理接口(通常是 HTTP 端口 80 或 443)。
- 管理接口暴露:该接口通常监听在 LAN 侧。如果路由器开启了远程管理(从 WAN 侧可达),或者攻击者已经处于同一局域网内,利用即可发生。
- 低权限:CVSS 向量中的
PR:L意味着攻击者需要某种形式的低权限访问,而不是完全未认证。但这通常只是指“能向管理接口发送请求”——在很多路由器配置中,管理界面的某些功能对未登录用户也是可触达的。
风险最高的是那些将管理接口暴露在互联网上的 CA300-PoE 设备,或者部署在攻击者可以访问 LAN 侧的网络环境中(如共享办公空间、酒店网络、多租户楼宇)。
VulDB 的记录中有一个值得注意的细节:“没有关于可能的对抗措施(countermeasures)的信息”,并建议“用替代产品替换受影响的对象”。这不是敷衍,而是对“厂商无补丁”这一现实的直接反映。
四、检测与排查:确认型号、固件和暴露面
由于 TOTOLINK 尚未发布修复版本,检测的核心是资产清点和暴露面评估,而不是扫描漏洞本身。发送溢出载荷来“测试”漏洞,在非授权环境中就是实施攻击。
4.1 Python 检测脚本(只读指纹与暴露面探测)
以下脚本仅做只读探测:尝试识别 TOTOLINK CA300-PoE 的管理接口,并检查 /cgi-bin/cstecgi.cgi 端点是否存在。不发送任何溢出载荷。
#!/usr/bin/env python3# -*- coding: utf-8 -*-\"\"\"CVE-2026-123960 TOTOLINK CA300-PoE 指纹与暴露面检测(只读)用法: python check_totolink_ca300.py http://target仅探测管理接口与端点存在性,不发送溢出载荷。\"\"\"import sysimport requestsimport urllib3urllib3.disable_warnings()
TIMEOUT = 8
def check(base): base = base.rstrip(\"/\") print(f\"[*] 目标: {base}\")
# 1) 尝试识别 TOTOLINK 管理界面 try: r = requests.get(base, timeout=TIMEOUT, verify=False, allow_redirects=True) except requests.RequestException as e: print(f\"[-] 连接失败: {e}\") return
markers = [\"TOTOLINK\", \"CA300\", \"cstecgi\"] if any(m.lower() in r.text.lower() for m in markers): print(\"[*] 检测到 TOTOLINK 管理界面特征\") else: print(\"[*] 未在前端检测到明确的 TOTOLINK 特征,继续探测端点\")
# 2) 探测 cstecgi.cgi 端点是否存在(空 GET/POST,不携带溢出参数) endpoint = f\"{base}/cgi-bin/cstecgi.cgi\" try: rp = requests.get(endpoint, timeout=TIMEOUT, verify=False) except requests.RequestException: try: rp = requests.post(endpoint, data={}, timeout=TIMEOUT, verify=False) except requests.RequestException: print(\"[-] 无法访问 cstecgi.cgi 端点\") return
if rp.status_code in (200, 400, 500): print(f\"[!] 端点 /cgi-bin/cstecgi.cgi 可达(HTTP {rp.status_code})\") print(\"[!] 该端点的 setWanConfig 函数存在缓冲区溢出(CVE-2026-123960)\") print(\"[!] 公开 PoC 已存在,利用难度被评估为“easy”\") else: print(f\"[*] 端点返回 HTTP {rp.status_code},需人工判断是否为 CA300-PoE\")
print(\"\
[*] 固件版本确认:请在管理界面查看“系统信息”或“固件版本”\") print(\"[*] 受影响版本:6.2c.884。无修复固件可用。\") print(\"[*] VulDB 建议:用替代产品替换受影响的对象。\")
if __name__ == \"__main__\": if len(sys.argv) != 2: print(f\"用法: {sys.argv[0]} http://target\") sys.exit(1) check(sys.argv[1])
说明:脚本不发送任何 pppoeUser/priDns/secDns 参数,仅确认端点是否存在。如果端点返回 200/400/500,说明目标正在处理对该路径的请求,结合前端特征可初步判断为 TOTOLINK 设备。
4.2 Nuclei 模板(安全指纹版)
id: CVE-2026-123960-totolink-ca300-detect
info: name: TOTOLINK CA300-PoE CVE-2026-123960 - Safe Endpoint Fingerprint author: security-research severity: high description: | 探测 TOTOLINK CA300-PoE 的 /cgi-bin/cstecgi.cgi 端点是否存在。 不发送溢出载荷,不触发漏洞。 reference: - https://nvd.nist.gov/vuln/detail/CVE-2026-123960 - https://vuldb.com/vuln/432023 classification: cvss-metrics: CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H cvss-score: 8.6 cwe-id: CWE-120 tags: cve,cve2026,totolink,ca300,buffer-overflow,detect
http: - method: GET path: - \"{{BaseURL}}/\" - \"{{BaseURL}}/cgi-bin/cstecgi.cgi\"
stop-at-first-match: true matchers-condition: or matchers: - type: word part: body words: - \"TOTOLINK\" - \"CA300\" - \"cstecgi\" condition: or case-insensitive: true - type: status status: - 200 - 400 - 500
extractors: - type: kval name: server kval: - server
运行方式:
nuclei -t CVE-2026-123960-totolink-ca300-detect.yaml -u http://target
说明:模板仅做端点和产品指纹,不发送任何溢出载荷。由于漏洞利用是单请求即可触发的缓冲区溢出,发送利用载荷本身就构成攻击。
五、缓解措施:没有补丁时的防御逻辑
TOTOLINK 官方尚未发布修复固件,VulDB 明确表示没有已知的对抗措施。在补丁缺位的情况下,网络层的暴露面收敛是唯一有效的防御手段。
| 措施 | 效果 | 局限 |
|---|---|---|
| 禁用远程管理(如果设备支持) | 阻止从 WAN 侧触达管理接口 | 仅覆盖互联网暴露场景 |
| 将管理接口限制在专用 VLAN 或可信设备 | 阻止 LAN 侧的未授权攻击者 | 需要网络架构调整 |
监控对 /cgi-bin/cstecgi.cgi 的异常请求 |
发现利用尝试 | 需要流量可见性 |
| 考虑替换设备 | VulDB 的建议是“用替代产品替换” | 成本较高,但是没有补丁时的确定性方案 |
特别提示:由于 CVSS 向量中标注的是 PR:L(低权限)而非 PR:N(无认证),攻击者可能需要某种形式的低权限会话才能触达 setWanConfig。但这不意味着设备可以安全地暴露——在许多路由器配置中,管理界面的某些路径对未登录用户也是可达的,而“低权限”的具体门槛取决于设备的实际实现。
六、今晚的判断
CVE-2026-123960 的风险画像:远程可触发、有公开 PoC、利用难度低、厂商无补丁。 CVSS 评分在 8.6 到 9.9 之间的分歧,不应该成为延迟处理的理由——分歧的只是“有多严重”,而不是“是否存在风险”。
行动顺序:
- 清点 TOTOLINK CA300-PoE 设备,确认固件是否为 6.2c.884。
- 检查管理接口的暴露面:是否开启了远程管理?是否处于不可信网络可达的范围?
- 对暴露的管理接口进行网络隔离(VLAN、ACL、VPN)。这是当前唯一能确定性降低风险的动作。
- 如果设备在关键位置且无法隔离,认真考虑替换。VulDB 的建议不是随口的——当一个有公开 PoC 的远程内存损坏漏洞没有厂商补丁时,“等待”本身就是一个风险决策。
一个 CVSS 8.6 以上、PoC 公开、利用简单、没有补丁的远程缓冲区溢出,在暴露于不可信网络的前提下,暴露面收敛的时间窗口,就是攻击者利用的时间窗口。
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论