IPBUF安全漏洞报告
English
CVE-2025-56005 CVSS 9.8 严重

CVE-2025-56005: PLY库yacc()函数picklefile参数远程代码执行漏洞

披露日期: 2026-01-20

漏洞信息

漏洞编号
CVE-2025-56005
漏洞类型
远程代码执行
CVSS评分
9.8 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
PLY (Python Lex-Yacc) 3.11

相关标签

CVE-2025-56005远程代码执行PLYpickle反序列化Python Lex-Yacc

漏洞概述

PLY(Python Lex-Yacc)是一个广泛使用的Python词法分析器和解析器生成库。在版本3.11中,yacc()函数存在一个未文档化的picklefile参数,该参数接受.pkl文件并使用pickle.load()进行反序列化。由于pickle模块允许通过__reduce__()方法执行嵌入的代码,攻击者可以通过构造恶意pickle文件实现任意代码执行。该参数在官方文档和GitHub仓库中均未被提及,但在PyPI发布的版本中处于活跃状态。这构成了一个隐蔽的后门和持久化风险。值得注意的是,有第三方指出该漏洞的PoC未能成功完成任意代码执行,应予以驳回。

技术细节

漏洞源于PLY库yacc()函数中的picklefile参数,该参数允许加载.pkl文件并使用pickle.load()反序列化。攻击者可通过构造恶意pickle文件利用__reduce__()方法执行任意代码。由于该参数未在官方文档中记录,攻击具有隐蔽性。

攻击链分析

STEP 1
步骤1
攻击者创建包含恶意代码的pickle文件
STEP 2
步骤2
通过picklefile参数将其传递给PLY的yacc()函数
STEP 3
步骤3
yacc()函数调用pickle.load()反序列化文件
STEP 4
步骤4
恶意代码通过__reduce__()方法执行

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import pickle import os class RCE: def __reduce__(self): cmd = 'whoami' # 替换为实际命令 return (os.system, (cmd,)) # 生成恶意pickle文件 with open('malicious.pkl', 'wb') as f: pickle.dump(RCE(), f) # 漏洞利用 from ply import yacc parser = yacc(picklefile='malicious.pkl')

影响范围

PLY < 3.11

防御指南

临时缓解措施
立即升级PLY库,禁用picklefile参数使用

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表