Zyxel Telnet 漏洞分析(CVE-2025-0890、CVE‑2024‑40891)

2025-03-07 9 0

作者:fan@知道创宇404实验室
日期:2025年2月14日
原文链接:https://paper.seebug.org/3278/

1.前言

这是2025年开年分析的第一个洞。2月4日 Zyxel发布安全公告,旗下部分旧款 DSL客户终端设备(CPE)存在严重的安全漏洞[1],包括 默认凭证不安全问题和 命令注入漏洞,攻击者可通过默认凭证登录 Telnet并利用此漏洞在受影响的设备上执行任意命令。

2.产品介绍

Zyxel DSL CPE是 Zyxel公司生产的一种网络设备,用于通过电话线(DSL 技术)连接互联网。它集成了调制解调器和路由器功能,可将电话线的宽带信号转换为网络信号,供用户上网、使用 Wi-Fi或打电话。这类设备广泛应用于家庭和小型企业,适合通过 DSL或 VDSL技术接入互联网的场景。

简单来说,这是一种用电话线上网的设备,既能提供网络,又能支持无线连接和语音通话。

3.漏洞分析

固件下载地址[2]

安全公告里提到的受影响型号包括:

VMG1312-B10A、VMG1312-B10B、VMG1312-B10E、VMG3312-B10A、VMG3313-B10A、VMG3926-B10B、VMG4325-B10A、VMG4380-B10A、VMG8324-B10A、VMG8924-B10A、SBG3300、SBG3500

CVE-2025-0890涉及以上设备存在默认凭证,攻击者可能利用这些弱凭据直接登录设备管理界面。CVE-2024-40891是一个需要认证的命令注入漏洞,攻击者可以通过 Telnet在受影响设备上执行操作系统命令。两个漏洞的结合使得攻击者可以先通过 CVE-2025-0890使用默认凭证登录设备,然后利用 CVE-2024-40891实现任意命令注入,最终完全控制目标设备。

3.1 CVE-2025-0890

CVE-2025-0890 漏洞描述

漏洞描述:Telnet功能存在默认凭证不安全的问题。如果管理员没有更改默认凭证,攻击者可能会利用这些默认凭证登录管理界面。需要注意的是,默认情况下已禁用 WAN访问和 Telnet功能。

首先,分析 CVE-2025-0890寻找默认凭证。

默认凭证保存在 /etc/default.cfg文件中,我们来分析一下这个文件。

/etc/default.cfg

default.cfg包含了两个用户 admin和 zyuser以及权限范围。其中 adminzyuser两者均拥有 remoteMGMT远程管理功能,可以通过 Telnet登录设备。

这里遇到一个问题,我下载的固件是 VMG1312-B10A_1.00,其中 Password是经过加密并 base64编码的。通过 base64解码后的结果是乱码,说明还需要进行解密。于是我通过搜索关键字 grep -rni "etc/defaulf.cfg",试图找到处理 default.cfg的方式。

grep -rni "etc/defaulf.cfg"

以上三个二进制文件对 etc/defaulf.cfg进行操作,但是我并没有找到有关解密的相关逻辑。于是我尝试转变思路,换个固件试试,于是在 VMG4325-B10A_1.00中找到仅仅被 base64编码,并没有加密的账户密码。

/etc/default.cfg

default.cfg包含了三个用户 supervisoradmin和 zyuser以及权限范围。其中 supervisoradminzyuser均拥有 remoteMGMT远程管理功能,可以通过 Telnet登录设备。

supervisor:zyad1234
admin:1234
zyuser:1234

3.2 CVE-2024-40891

CVE-2024-40891 漏洞描述

漏洞描述:存在身份验证后命令注入漏洞。该漏洞可能允许经过身份验证的攻击者通过 Telnet在受影响的设备上执行操作系统命令。需要注意的是,默认情况下已禁用 WAN访问和 Telnet功能。

当成功登录 Telnet后,我们接下来分析 CVE-2024-40891如何触发命令注入漏洞,

先分析入口 telnetd

telnetd main函数

main通过 cmsDal_getNetworkAccessMode检查客户端的网络访问权限, sub_4016C4判断是否创建 Telnet会话。

分析 cmsDal_getNetworkAccessMode,函数被定义在 lib/private/libcms_dal.so

libcms_dal.so cmsDal_getNetworkAccessMode函数

这段代码的功能是判断客户端 IP地址是通过 lan侧访问还是 wan侧访问,并返回访问网络访问模式。漏洞情报说明默认情况下禁止 wan访问,所以漏洞利用前提是设备允许 wan访问。

接着回到 telnetd的 sub_4016C4分析后续操作。

telnet sub_4016C4函数

sub_4016C4的功能是为新的 Telnet会话分配资源并创建子进程来处理客户端连接。会通过 cmsCli_authen进行客户端身份认证。

通过验证后 cmsCli_run函数会启动一个命令行交互环境,该函数被定义在 lib/libcms_cli.so

libcmd_cli.so cmsCli_run函数

cmsCli_run会启动命令行交互环境后,通过不断调用 sub_69F0处理用户的输入和命令执行。

libcmd_cli.so sub_69F0函数

sub_69F0通过 cmdedit_read_input获取用户输入,再通过 cli_processCliCmd和 cli_processHiddenCmd分别处理常规命令和隐藏命令。cli_processHiddenCmd可能需要管理员权限才能调用,我们先看 cli_processCliCmd

libcms_cli.so cli_processCliCmd函数

首先提取命令名称,当遇到空格、管道符、分号或者逻辑运算符是认为命令名称结束。接着获取用户权限,supervisorNameGet判断是否为超级用户,如果不是超级用户则遍历配置查看当前用户权限。命令存储在 off_892BC中,遍历匹配命令。

执行命令的逻辑为,如果命令有对应的处理函数 off_892BC[6 * i + 3],调用处理函数执行命令。如果没有处理函数,但包含分隔符(如 |或 ;),则会调用 prctl_runCommandInShellWithTimeout在 Shell中运行命令。这个地方就是触发命令注入漏洞的关键了,所以我们现在要做的就是判断 check_cmd_with_split和寻找没有处理函数的命令。

libcms_cli.so check_cmd_with_split函数

check_cmd_with_split首先调用 strtok_r按照分隔符 |;和 &将命令字符串分割成多个子命令。再通过 is_cmd_allowed检查是否运行被执行。

livcms_cli.so is_cmd_allowed函数

is_cmd_allowed会先判断是否为特殊命令 sh,如果是 sh进一步判断是否为超级用户(这个地方应该是给超级用户留的后门)。

接着会再次判断权限,然后遍历另一个命令表 off_8A3E0检查当前子命令是否在其中。

off_8A3E0 命令表

结果发现,命令表 off_8A3E0中包含隐藏命令 sh

那么下一步只要在 off_892BC找到没有处理函数的命令,即可触发命令注入。

off_892BC 命令表

命令表 off_892Bc中,类似 helplogout会直接调用对应的处理函数(如 sub_F31Csub_E9B8),但是 pingifconfigps等没有处理函数,因此会调用 prctl_runCommandInShellWithTimeout执行命令。

prctl_runCommandInShellWithTimeout被定义在 libcms_util.so

libcms_cli.so prctl_runCommandInShellWithTimeout函数

prctl_runCommandInShellWithTimeout再调用 sub_116E0执行命令。

libcms_cli.so sub_116E0函数

sub_116E0通过 fork和 execv在子进程中执行用户提供的命令。

最后,我们构造了一个 poc

ifconfig || sh

4.环境问题

分析过程中,我们使用 QEMU模拟环境,telnet服务有问题导致一直是未授权访问,具体情况如下。

先找到相关文件 telnetd

find . -name "telnet"

/usr/sbin/telnetd能成功启动 Telnet服务,但是存在认证问题导致未授权访问且没有权限。

/strace /usr/sbin/telnetd -l /bin/login -F

strace看了一下存在子进程无法打开 /dev/pts/0和配置文件缺失问题(无法启动 IPv6支持)。

后续,我们尝试运行 /bin/telnetd,同样存在内核无法启动 IPv6问题,因为整体不影响漏洞分析,所以我们没有进一步深入研究。

5.相关链接

[1] 安全公告

https://www.zyxel.com/global/en/support/security-advisories/zyxel-security-advisory-for-command-injection-and-insecure-default-credentials-vulnerabilities-in-certain-legacy-dsl-cpe-02-04-2025

[2] 固件下载

https://drivers.softpedia.com/get/Router-Switch-Access-Point/Zyxel/


4A评测 - 免责申明

本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。

不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。

本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。

如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!

程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。

侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)

相关文章

XSS 漏洞深度解析:攻防对抗与高阶利用
本地密码管理工具——python
小白首选最新版VMware Workstation Pro详细下载和安装教程
代码审计——SpringBoot SpEL 表达式注入漏洞
CISA警告VMware漏洞正遭积极利用,敦促企业立即修补
LibreOffice 严重漏洞:攻击者可通过宏 URL 执行任意脚本

发布评论