# Eigent pull_request_target 远程代码执行漏洞
## 概述
Eigent 的 CI 工作流文件 `.github/workflows/ci.yml` 存在严重安全漏洞,允许攻击者在拉取请求(PR)来自 fork 仓库时执行任意代码。
## 影响版本
所有使用 `.github/workflows/ci.yml` 且配置为 `pull_request_target` 触发器并检出不受信任 PR 代码的版本。
## 细节
- 漏洞位于 CI 工作流 `.github/workflows/ci.yml`。
- 使用 `pull_request_target` 事件触发工作流,该事件在 PR 来自 fork 时仍具有仓库写权限和敏感环境变量访问权限。
- 工作流在触发后直接检出并执行来自 PR 的代码(使用 `actions/checkout`),导致执行不受信任的代码。
- 攻击者可构造恶意 PR,利用此行为窃取 GitHub 凭据(如 `GITHUB_TOKEN`)、提交代码、发布版本或在 PR 中发布恶意评论。
## 影响
攻击者可实现任意代码执行,进而:
- 窃取仓库密钥和身份凭证
- 未经授权提交代码或创建恶意发布
- 操控 CI/CD 流程以持久化攻击
- 危害项目完整性和安全性
是否为 Web 类漏洞: 未知
判断理由:
| # | POC 描述 | 源链接 | 神龙链接 |
|---|
标题: fix(security): Prevent arbitrary code execution in CI workflow by ColeMurray · Pull Request #837 · eigent-ai/eigent · GitHub -- 🔗来源链接
标签:x_refsource_MISC
神龙速读:
### 关键信息
- **漏洞描述**:
- 类型:任意代码执行
- 触发条件:通过fork pull request触发CI流程
- **漏洞细节**:
- 问题:使用`pull_request_target`触发器结合`actions/checkout`导致write权限和secrets访问
- 恶意代码通过`github.event.pull_request.head.sha`注入并执行
- **攻击向量**:
1. 攻击者fork仓库
2. 添加恶意`node_modules`中的脚本
3. 提交PR触发CI
4. `npx`执行攻击者代码代替正常工具
5. 代码以仓库写权限运行
- **影响**:
- 在CI环境中执行任意代码
- 提取git runner凭证
- 利用凭证在PR上留言
- 将数据泄露到外部服务器
- **修复措施**:
- CI流程拆分为`ci.yml`和`lint-markdown.yml`,分别处理不同权限和触发条件
- 使`pull_request`触发器以只读权限运行fork PR,隔离恶意代码
- **额外改进**:
- 更新GitHub Actions版本
- 固定`markdownlint-cli`版本防止供应链攻击
- 添加安全注释说明改动原因
标题: Security PoC: Demonstrate CI workflow vulnerability by ColeMurray · Pull Request #836 · eigent-ai/eigent · GitHub -- 🔗来源链接
标签:x_refsource_MISC
神龙速读:
## 关键信息总结
### 漏洞概述
- **类型**: CI工作流漏洞
- **漏洞点**: 使用`pull_request_target`事件并在`on`字段中控制,且检查出不受信任的PR代码
- **风险**: 攻击者可以执行任意代码,窃取GitHub令牌和其他机密,推送恶意代码,创建包含恶意软件的发布,以及危及下游用户
### 攻击向量示例
- 具体说明了攻击者如何利用漏洞通过配置文件`.markdownlintrc.js`执行任意JavaScript来利用`markdownlint-cli`工具
### 解决方案
1. 使用`pull_request`事件替换`pull_request_target`
2. 不在使用`pull_request_target`时检查不受信任的PR代码
3. 使用`actions/checkout`行动时,不包含`ref`参数,仅检查基本分支
### 关联参考资料
- [GitHub Security Lab: Keeping your GitHub Actions and workflows secure](链接到相关资源)
```
此总结精炼地涵盖了截图中关于此CI工作流安全漏洞的关键信息,如问题的本质、潜在攻击途径以及如何进行修复和预防。
标题: Arbitrary Code Execution via pull_request_target CI Workflow · Advisory · eigent-ai/eigent · GitHub -- 🔗来源链接
标签:x_refsource_CONFIRM
神龙速读:
## 关键漏洞信息
### 漏洞标题
- **Arbitrary Code Execution via pull_request_target CI Workflow**
### 漏洞标识符
- **GHSA ID:** GHSA-gvh4-93cq-5xxp
- **CVE ID:** CVE-2026-22869
### 漏洞严重性
- **CVSS v3 base metrics:** 10.0/10
- **Attack Vector:** Network
- **Attack Complexity:** Low
- **Privileges Required:** None
- **User Interaction:** None
- **Scope:** Changed
- **Confidentiality:** High
- **Integrity:** High
- **Availability:** None
### 影响文件
- `.github/workflows/ci.yml` (GitHub Actions)
### 受影响版本
- `< 2026-01-13`
### 补丁版本
- `None`
### 漏洞描述
- **Summary:** CI工作流程(`.github/workflows/ci.yml`)中的一个严重安全漏洞允许从具有仓库写权限的fork拉取请求中执行任意代码。攻击者可以利用这一点窃取凭据、发布评论、推送代码或创建发布。
### 漏洞细节
- **Vulnerable Workflow:** 使用 `pull_request_target` 触发器结合检出不受信任的PR代码。
- **Vulnerable CI Config:**
```yaml
on:
pull_request_target: # 授予写权限 + 秘密访问
branches:
- main
jobs:
job2:
...
- run: npx markdownlint-cli # 执行来自攻击者的代码
```
- **Vulnerable File:** `.github/workflows/ci.yml` (lines 75-81)
- **Vulnerable Event Privileges:** Pull_request_target 事件运行时具有写入仓库的权限、访问仓库秘密的权限、具有提升权限的 GITHUB_TOKEN。
### 证明概念 (PoC)
- **Steps:**
1. 叉仓库
2. 在 `node_modules/.bin/markdownlint-cli` 中创建带有提取凭据恶意代码。
3. 创建任意 `.md` 文件触发工作流程。
4. 向第三方 `eigent-ai/eigent` 开发一个PR。
5. CI工作流程将执行带有写权限的恶意脚本。
- **PoC PR:** #836
- **PoC Impact:**
- 执行CI环境中的任意JavaScript代码。
- 提取Git身份验证头。
- 使用凭据对PR进行评论。
- 将数据泄露到外部服务器。
### 影响
- **Severity:** High
- **Impact:**
1. 窃取凭据。
2. 修改仓库内容。
3. 供应链攻击。
4. 数据泄露。
### 提交修复
- **Fix:** #837
标题: fix(security): Prevent arbitrary code execution in CI workflow (#837) · eigent-ai/eigent@bf02500 · GitHub -- 🔗来源链接
标签:x_refsource_MISC
神龙速读:
## 关键信息总结
### 安全更新
- **提交ID:** bf02500
- **提交作者:** Wending-Fan
- **提交日期:**上周
- **提交描述:** 防止CI工作流中任意代码执行 (#837)
### 文件变更
- **变更文件数量:** 2 个文件(+.github/workflows/ci.yml 和 .github/workflows/lint-markdown.yml)
- **总变更行数:** +40 -32
### 主要变更点
- `.github/workflows/ci.yml`
- 删除了“job1: Check Not Allowed File Changes”工作。
- 添加了“check-files: Check Not Allowed File Changes”工作并修改了其路径过滤逻辑。
- 修改了“Comment About Changes We Can't Accept”工作的动作版本和错误处理逻辑。
- 删除了“Check Not Linted Markdown”工作。
- 修改了“Lint Markdown”工作的触发逻辑和执行步骤。
- `.github/workflows/lint-markdown.yml`
- 添加了新的Markdown校验工作流,包含对请求分支和路径的限制,确保代码检出和执行的权限为只读,防止恶意请求的注入。
暂无评论