文章总结: OpenBSD修复了PPP协议栈中已存在27年的认证绕过漏洞,该漏洞源于sppppapinput函数中bcmp比较逻辑缺陷,攻击者可通过设置PAP数据帧长度字段为0绕过身份验证,并可能造成内核堆越界读取。漏洞影响1999年7月至2026年6月14日所有版本,修复方案采用长度预检查机制阻止零长度绕过并消除内存读取问题。 综合评分: 82 文章分类: 漏洞分析,二进制安全,系统安全,网络安全,代码审计
OpenBSD 修复已存在27年的 PPP 协议栈认证绕过漏洞
Sergiu Gatlan Sergiu Gatlan
代码卫士
2026年6月17日 11:51 北京
在小说阅读器读本章
去阅读
聚焦源代码安全,网罗国内外最新资讯!
编译:代码卫士
OpenBSD修复PPP协议栈中已存在长达27年之久的身份验证绕过漏洞。该漏洞源于sppp_pap_input函数中用于PAP(密码认证协议)凭证验证的bcmp比较逻辑存在缺陷,可用于在无需任何凭证的情况下完成PPP认证,并可能造成内核堆内存越界读取。
该漏洞自1999年7月1日最初导入OpenBSD源代码树起便存在,影响此后所有版本的OpenBSD,直至2026年6月14日被修复。
漏洞简述
该漏洞源自一行代码,sppp_pap_input函数在验证PAP凭证时,直接使用来自传入PAP数据帧中攻击者可控制长度字段(name_len和passwd_len)作为bcmp比较的长度。当攻击者将这两个长度字段设为0时,bcmp比较会无条件返回0(因为比较长度为0),从而绕过用户名和密码的验证,直接通过PAP认证。此外,若攻击者提供的name_len大于实际配置凭证的分配长度,bcmp会读取堆对象之后的内存,导致内核堆越界读取。
漏洞影响
攻击者可在同一广播域内通过PPPoE数据路径,即pppoe_data_input → pppoeintr → sppp_input → sppp_pap_input,利用该漏洞,无需知晓任何凭证即可完成PPPoE握手全过程(包括发现、LCP协商、零长度PAP认证、IPCP协商),最终建立网络连接并劫持受害者的IP流量。
修复方案
修复方式参照了同一文件中CHAP处理程序已有的正确模式,使用精确长度预检查:
if (name_len != strlen(sp->hisauth.name) || passwd_len != strlen(sp->hisauth.secret) || bcmp(name, sp->hisauth.name, name_len) != 0 || bcmp(passwd, sp->hisauth.secret, passwd_len) != 0) {
该修复防范同时阻止了零长度绕过,并将bcmp的比较长度限定为存储凭证的确切大小,从而消除了越界读取问题。修复提交于2026年6月14日,提交ID为openbsd/src@076e2b1。
开源卫士试用地址:https://oss.qianxin.com/#/login
代码卫士试用地址:https://sast.qianxin.com/#/login
推荐阅读
开源操作系统 OpenBSD 被曝四个严重的认证绕过和提权漏洞(详情)
出于安全考虑,OpenBSD 禁用英特尔 CPU 超线程
phpBB 论坛软件修复已存在10年的认证绕过漏洞
PAN-OS GlobalProtect 认证绕过漏洞已遭活跃利用
原文链接
https://blog.argus-systems.ai/blog/openbsd-pap-27-year-auth-bypass.html
题图:Pixabay License
本文由奇安信编译,不代表奇安信观点。转载请注明“转自奇安信代码卫士 https://codesafe.qianxin.com”。
奇安信代码卫士 (codesafe)
国内首个专注于软件开发安全的产品线。
觉得不错,就点个 “在看” 或 “赞” 吧~
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:代码卫士 Sergiu Gatlan Sergiu Gatlan《OpenBSD 修复已存在27年的 PPP 协议栈认证绕过漏洞》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。











评论