Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2026-39866 — 概念验证实验室,演示 GitHub Actions 工作流调度中的命令注入漏洞(CVE-2026-39866)。并排运行存在漏洞的版本和已修补的版本,以供教学分析。 | Kitploit
工具/GitHubGitHub/abhayclasher/cve-2026-39866
漏洞分析漏洞利用Web应用程序漏洞利用命令与控制学习与教育实验室与实践
GitHubabhayclasher/cve-2026-39866

CVE-2026-39866

概念验证实验室,演示 GitHub Actions 工作流调度中的命令注入漏洞(CVE-2026-39866)。并排运行存在漏洞的版本和已修补的版本,以供教学分析。

查看仓库
55个月前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2026-39866 — 通过未加引号的 workflow dispatch 输入实现命令注入

CVE GHSA CWE-78 Patched

GitHub Actions workflow dispatch 命令注入的概念验证实验室


目的

CVE-2026-39866 是 Lawnchair 的 GitHub Actions 发布工作流中的一个命令注入漏洞。release_update.yml 文件将用户输入直接传递给 bash 而未加引号,因此攻击者可以注入命令。本仓库并排运行易受攻击版本和已修补版本。

快速事实

漏洞详情

该漏洞存在于 release_update.yml 工作流文件中。该操作接受一个 artifactName 参数,并将其直接传递给 bash 命令而未加引号。

root@kitploit:~
- name: Rename artifact
  run: mv ${{ inputs.artifactName }}.zip lawnchair.zip

GitHub Actions 在 shell 运行之前将变量值替换到字符串中。由于 ${{ inputs.artifactName }} 周围没有引号,shell 会将空格和分号解释为命令分隔符。

如果攻击者提供 file.zip; touch pwned.txt # 作为 artifactName:

GitHub Actions 如何解析它: ${{ inputs.artifactName }} → file.zip; touch pwned.txt #

Shell 如何执行它:

root@kitploit:~
mv file.zip; touch pwned.txt #.zip lawnchair.zip

Shell 执行 mv file.zip,然后执行 touch pwned.txt,然后将其余部分作为注释忽略。

影响

  • 在 GitHub Actions 运行器上执行任意命令。
  • 窃取暴露给运行器环境的仓库机密(如 GITHUB_TOKEN 或发布签名密钥)。
  • 在发布工件上传之前篡改它们。
  • 如果运行器是自托管的,则可横向移动到连接的底层设施。

系统要求

  • Node.js 18 或更高版本
  • Docker(可选,用于容器化实验室)
  • 500 MB 可用磁盘空间

设置

选项 1:直接运行

root@kitploit:~
git clone https://github.com/abhayclasher/CVE-2026-39866.git
cd CVE-2026-39866/app
npm install
node server.js

选项 2:使用 Docker 运行

root@kitploit:~
git clone https://github.com/abhayclasher/CVE-2026-39866.git
cd CVE-2026-39866
docker compose up -d

使用方法

服务器启动后,访问以下 URL:

URL描述
http://localhost:3000/workflow/vulnerable易受攻击的工作流 — 提交时执行命令注入
http://localhost:3001/workflow/patched应用了 fcba413 补丁的相同工作流

易受攻击的版本将在运行器上执行您注入的命令。已修补的版本将输入视为字面字符串。

您也可以运行独立的 PoC:

root@kitploit:~
cd poc
node exploit.js

这将在 3000 端口启动一个最小服务器,演示相同的漏洞,而无需完整的应用程序上下文。

工作原理

检测流程

root@kitploit:~
1. 攻击者控制 artifactName 输入参数
2. GitHub Actions 将 ${{ inputs.artifactName }} 展开到 YAML 中
3. run 步骤将其发送给 bash
4. Bash 看到未加引号的特殊字符,并将其视为命令语法
5. 命令以运行器环境权限执行

攻击链

root@kitploit:~
┌────────────────────────────────────────────────────┐
│  1. 恶意输入:                                       │
│                                                     │
│     artifactName = "file.zip; id #"                │
│                                                     │
│  2. GitHub Actions 替换到 YAML 中:                  │
│                                                     │
│     run: mv file.zip; id #.zip lawnchair.zip       │
│                                                     │
│  3. Bash 看到:                                      │
│     - mv file.zip                                   │
│     - id                    <-- 任意命令             │
│     - #.zip lawnchair.zip(被忽略)                  │
│                                                     │
│  4. Shell 执行任意命令                               │
└────────────────────────────────────────────────────┘

修复方案

版本 fcba413 在插值变量周围引入了引号:

root@kitploit:~
- name: Rename artifact
  run: mv "${{ inputs.artifactName }}.zip" lawnchair.zip

引号可防止 shell 解析特殊字符。有效载荷将保持为字面文件名字符串。

最佳实践是使用环境变量来完全隔离用户输入:

root@kitploit:~
- name: Rename artifact
  env:
    ARTIFACT_NAME: ${{ inputs.artifactName }}
  run: mv "$ARTIFACT_NAME.zip" lawnchair.zip

查看完整提交:fcba413

项目结构

root@kitploit:~
CVE-2026-39866/
├── README.md               # 本文件
├── docker-compose.yml      # Docker 实验室配置
├── app/
│   ├── Dockerfile          # 容器构建配置
│   ├── package.json        # Node.js 依赖
│   └── server.js           # 易受攻击 + 已修补工作流运行器模拟
└── poc/
    └── exploit.js          # 独立的最小概念验证

参考

  • NVD — CVE-2026-39866
  • GitHub 安全公告
  • 补丁提交
  • CWE-78

由 Abhay Kumar 报告。本仓库仅供本地教育用途。请勿在公共网络上部署易受攻击的服务器。

仅供教育目的 — 请在隔离环境中使用

下载工具
字段值
CVE IDCVE-2026-39866
GHSAGHSA-9prc-pp2c-3427
CWECWE-78(OS 命令中特殊元素的不当中和)
产品LawnchairLauncher/lawnchair
受影响版本所有低于 fcba413 的版本
已修补版本fcba413
发现者Abhay Kumar (@abhayclasher)