GitHub 安全实验室(GHSL)的安全研究员 Michael Stepankin(@artsploit)在一项新的分析中发现了广泛使用的 Java 安全框架 pac4j 中的一个关键漏洞。该漏洞被追踪为 CVE-2023-25581,CVSS 得分为 9.2,攻击者可利用该漏洞在受影响的系统上执行任意代码。
pac4j 的设计目的是简化 Java 应用程序中的身份验证和授权,提供一套全面的工具来确保网络应用程序和网络服务的安全。然而,Stepankin 的分析揭示了 4.0.0 之前版本中的一个关键漏洞。
该漏洞源于 pac4j 处理用户配置文件属性的方式。正如 Stepankin 在分析中解释的那样,“org.pac4j.core.profile.InternalAttributeHandler#restore 方法反序列化了不受信任的数据”。从本质上讲,该框架未能正确验证存储在用户配置文件中的序列化 Java 对象。
攻击者可通过向用户配置文件属性注入恶意序列化对象(前缀为 {#sb64},并进行 Base64 编码)来利用这一漏洞。当还原方法处理该属性时,会不知不觉地反序列化恶意对象,从而可能导致远程代码执行(RCE)。“Stepankin 警告说:”有可能诱使程序执行任意 Java 类的反序列化。
尽管 pac4j-core 采用了限制对象输入流(RestrictedObjectInputStream)来限制可被反序列化的对象类型,但这些限制并不足以完全防止漏洞利用。正如研究人员强调的那样,“它仍然允许广泛的 Java 包,并有可能被不同的小工具链利用”。这意味着攻击者仍然可以通过利用不同的对象类型来利用该漏洞,从而可能导致远程代码执行。
RCE 是该漏洞最严重的后果之一,因为它可能允许攻击者在受影响的系统上运行任意代码,导致数据被盗、服务中断或进一步破坏网络。
好消息是,pac4j 4.0.0 及更高版本不受 CVE-2023-25581 影响。Stepankin 和 GHSL 团队强烈建议所有早期版本的用户立即升级。