Pyinstaller本地特权升级漏洞CVE-2025-59042
PyInstaller是将Python程序打包成独立可执行文件的工具,支持Windows、Linux和macOS等操作系统,简化Python应用程序分发和管理。
PyInstaller是一个跨平台的Python工具,用于将Python脚本打包成独立可执行文件(如.exe文件),使程序无需安装Python环境即可运行。
一、基本情况
PyInstaller将Python应用程序及其所有依赖项捆绑成单独的包,将Python脚本及其依赖项(如库和资源文件)转换为平台特定可执行文件。
栋科技漏洞库关注到Pyinstaller受影响版本中存在本地特权升级漏洞,该漏洞现已被追踪为CVE-2025-59042,漏洞CVSS 3.X评分为5.7。
二、漏洞分析
CVE-2025-59042漏洞是Pyinstaller受影响版本中存在的一个具有本地特权升级漏洞,可能导致被无特权攻击者欺骗执行任意python代码。
由于PyInstaller冻结的应用程序的引导过程中,一个特殊条目被附加到sys.path,且由于引导脚本试图加载一个可选模块进行字节码解密。
该条目仍存在于sys.path中,当满足以下所有条件时,PyInstaller<6.0.0构建的应用程序可能被无特权攻击者欺骗,执行任意python代码。
首先,应用程序是使用PyInstaller < 6.0.0构建的,无论是onedir还是onefile模式都会受到影响。
其次,在应用程序构建过程中,未启用可选的字节码加密代码功能。
第三,攻击者可以在可执行文件所在的目录中创建文件/目录。
第四,文件系统支持创建包含“?”名称的文件/目录(即非Windows系统)。
第五,攻击者能够确定PYZ存档在可执行文件中的偏移量。
攻击者可以创建一个目录(或zip文件),它位于可执行文件旁边,使用PyInstaller引导加载程序用于传输PYZ存档位置信息的格式来命名。
如果此目录(或zip存档)包含一个python模块,其名称与可选字节码加密功能使用的名称匹配,则此模块将由引导脚本加载和执行。
此模块将由引导脚本加载和执行需要在没有启用字节码加密功能时存在的真实内置模块的情况下,
这会导致任意代码执行,不需要修改可执行文件本身。
若可执行文件以提升的权限运行(例如,由于设置了setuid位),则注入模块中的代码会以所述提升的权限执行,从而导致本地权限升级。
PyInstaller 6.0.0(f5adf291c8b832d5aff7632844f7e3ddf7ad4923)移除了对字节码加密的支持,重新设计了引导过程,
这有效地以避免使用`sys.path`来传输PYZ存档的位置,消除了描述的攻击向量,因为引导脚本不再尝试加载用于字节码解密的可选模块。
如果无法升级PyInstaller,可以通过确保对包含安全敏感的可执行文件(即设置了setuid位的可执行文件)的正确权限来避免这个问题。
三、影响范围
PyInstaller < 6.0.0
四、修复建议
PyInstaller >= 6.0.0
五、参考链接
