潜伏27年的OpenBSD身份验证绕过漏洞:技术细节与概念验证利用代码已公开披露"

admin 2026-10-22 03:04:23 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

cover_image

潜伏27年的OpenBSD身份验证绕过漏洞:技术细节与概念验证利用代码已公开披露

sec随谈
sec随谈

sec随谈

2026年6月22日 09:21
北京

在小说阅读器读本章

去阅读

潜伏27年的漏洞终被发现

Argus 公司的研究人员公开披露了一个存在于 OpenBSD 操作系统中长达27年却未被发现的身份验证绕过漏洞。该漏洞被追踪为 CVE-2026-55706,允许攻击者在不掌握任何凭据的情况下,绕过 OpenBSD PPP 协议栈上的 PAP 登录验证。值得关注的是,研究团队同时发布了完整的技术细节和可运行的概念验证利用代码。

该漏洞位于 OpenBSD sppp(4) 子系统中的 sppp\_pap\_input() 函数内,该代码负责处理同步 PPP 链路,是 PPPoE 连接的底层基础。

OpenBSD 身份验证绕过漏洞的工作原理

该漏洞的成因几乎简单得令人难以置信。当 OpenBSD 充当 PAP 认证方时,它使用 bcmp 函数对对端的用户名和密码进行比较。然而,比较长度直接来源于传入的 PAP 数据帧,这意味着攻击者可对其进行控制。

由于 bcmp 在长度为零时返回 0,因此提供空的用户名和密码字段可使两项检查均通过。结果是失败分支永远不会执行,OpenBSD 随即回复 PAP\_ACK,在完全没有凭据的情况下完成身份验证。

第二个问题与第一个共享相同的根本原因:提供超长的用户名长度会使 bcmp 越过已分配的缓冲区,从而泄露相邻的内核堆内存。

可通过 PPPoE 发起攻击,无需任何凭据

上述两个漏洞均存在于 PPPoE 数据路径上。因此,在同一广播域内运行恶意 PPPoE 服务器的攻击者可冒充合法服务器。一旦握手完成,OpenBSD 便会将受害者的流量路由至攻击者的端点,从而实现流量拦截或中间人攻击。

该攻击向量属于网络相邻型,而非互联网范围内的攻击。因此,MITRE 将 CVE-2026-55706 评定为 5.8 分(中等)。尽管如此,在不受信任的二层网段上运行 PPPoE 身份验证的场景中,其影响依然不容小觑。

技术细节与概念验证利用代码已公开

研究人员在 QEMU/KVM 环境中针对 OpenBSD 7.6(amd64)验证了该攻击。完整的27年漏洞溯源分析已发布于 Argus 博客,概念验证利用脚本也已一并公开,可在空字段情况下完成握手并触发 PAP\_ACK。

该漏洞模式可追溯至1999年7月从 FreeBSD 引入的代码。2009年的一次将凭据迁移至动态分配的变更,后来引入了堆越界读取问题。值得注意的是,同一文件中的 CHAP 处理程序始终使用了正确的精确长度检查,而 PAP 处理程序却从未获得同样的修复。

当前应对措施

OpenBSD 开发者 mvs 于2026年6月14日提交了修复补丁,距负责任披露仅两天。该补丁在每次比较前添加了精确长度检查,同时修复了绕过漏洞和越界读取问题。

管理员应尽快更新至已修复的 OpenBSD 版本。与此同时,依赖 PPPoE PAP 认证的团队应将其二层网段视为不受信任的环境,并密切监控是否存在恶意接入集中器。

参考链接:

https://blog.argus-systems.ai/blog/openbsd-pap-27-year-auth-bypass.html


GhostBits(幽灵比特):被强制类型转换\"吃掉\"的高位" 网络安全文章

GhostBits(幽灵比特):被强制类型转换\"吃掉\"的高位"

GhostBits是一种由宽字符向窄字节强制类型转换时高位截断引发的新型攻击面。当多字节字符(如Javachar/Gorune)被截断为单字节时,丢弃的高位可能形成危险ASCII序列(如…/、\\\\r\\\\n),从而绕过基于字符串的安全校验。文档通过C++/Go/Java示例演示了路径穿越、WAF绕过等攻击场景,并给出防御建议:避免直接类型转换、使用显式编码、在最终形态进行安全校验。
评论:0   参与:  0