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 被曝四个严重的认证绕过和提权漏洞(详情)
PAN-OS GlobalProtect 认证绕过漏洞已遭活跃利用
原文链接
https://blog.argus-systems.ai/blog/openbsd-pap-27-year-auth-bypass.html
题图:Pixabay License
本文由奇安信编译,不代表奇安信观点。转载请注明“转自奇安信代码卫士 https://codesafe.qianxin.com”。
奇安信代码卫士 (codesafe)
国内首个专注于软件开发安全的产品线。
觉得不错,就点个 “在看” 或 \"赞” 吧~
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论