Fuika0306/codex-verified-secure-release
GitHub: Fuika0306/codex-verified-secure-release
一款采用失败即阻挡策略的 Codex Skill,在代码公开发布前结合本地敏感信息稽核与 Codex Security AppSec 扫描产物验证,缺乏安全证据即阻止发布。
Stars: 0 | Forks: 0
# Codex 双层安全发布验证工具
[](https://github.com/Fuika0306/codex-verified-secure-release/actions/workflows/validate.yml)
[](LICENSE)
这是一个采取失败即阻挡策略的 Codex Skill:先在本机稽核密钥、个资与
Git 历史,再验证已完成的 Codex Security AppSec 扫描产物,最后产生一个
保守的发布判定。
这是一个采用失败即阻挡(fail-closed)策略的 Codex Skill,将确定性的公开发布稽核与来自 OpenAI Codex Security 的已验证规范产物相结合。
## 为什么要结合这两层?
一个代码库可能没有应用层漏洞,但仍然会在可访问的 Git 历史中泄露 token、个人邮箱、公网 IP、带有凭证的远端仓库或已删除的密钥。它也可能通过了泄露扫描,但仍然包含可利用的授权、注入、目录遍历或信任边界缺陷。
这个 Skill 将这些问题分开处理,并产生一个保守的判定:
1. **本机发布稽核** — 确定性、脱敏、只读,且无需网络。
2. **Codex Security 产物把关** — 可选的对已完成的官方 AppSec 扫描的验证。
AppSec 层绝不会由内置脚本启动。安装、身份验证、模型使用和扫描仍然是明确的外部操作。
## 本机层检查的内容
- 凭证和私钥特征
- 个人邮箱和公网 IPv4 暴露
- 敏感文件名和本地产物
- 包含凭证的 Git 远端
- 暂存区、工作树、已追踪树和可访问历史的内容
- 提交邮箱暴露
- 符号链接和意外的二进制文件
- GitHub Actions 权限和未固定的 Actions
匹配的值、远端 URL 和符号链接目标永远不会被打印。
## Codex Security 层验证的内容
合并器仅接受标准的 Codex Security `1.0` 文档:
- `scan-manifest.json`
- `findings.json`
- `coverage.json`
它验证文档类型、schema 版本、已完成的扫描状态、匹配的扫描 ID、规范引用、覆盖率一致性、常规文件边界、位于目标代码库外部的产物位置、大小限制以及清单的 SHA-256 哈希。
合并后的报告会省略原始摘要、代码证据、攻击路径、修复文本、PoC、远端 URL 和绝对本机路径。
## 要求
- Python 3.10 或更高版本
- Git
- 可选:访问官方 Codex Security Plugin 或 CLI 以进行 AppSec 阶段
Codex Security CLI/SDK 的可用性和授权与此 Skill 无关。
## 作为 Codex Skill 安装
PowerShell:
```
$codexHome = if ($env:CODEX_HOME) { $env:CODEX_HOME } else { Join-Path $HOME '.codex' }
Copy-Item -Recurse -Force .\skills\verified-secure-release (Join-Path $codexHome 'skills\verified-secure-release')
```
Bash:
```
codex_home="${CODEX_HOME:-$HOME/.codex}"
cp -R skills/verified-secure-release "$codex_home/skills/verified-secure-release"
```
重启 Codex 或打开一个新任务,以便重新加载 Skill 清单。
## 运行本机预检
在将现有的代码库公开之前,请扫描可访问的历史:
```
python -B -X utf8 skills/verified-secure-release/scripts/verified_secure_release.py . --mode all --profile release-only --format json
```
除非发布稽核返回 `PASS`,否则请停止。仅针对暂存区的扫描并不能证明可访问的历史是干净的。
## 合并已完成的 Codex Security 扫描
将官方扫描输出保存在私有且位于代码库之外的位置。从一次完成的扫描中获取三个规范文件后:
```
python -B -X utf8 skills/verified-secure-release/scripts/verified_secure_release.py . --mode all --profile full --codex-security-dir ../private-codex-security-results --format json
```
在代码库外部写入私有的合并报告:
```
python -B -X utf8 skills/verified-secure-release/scripts/verified_secure_release.py . --mode all --profile full --codex-security-dir ../private-codex-security-results --output ../verified-secure-release.json --format json
```
输出路径必须不存在。脚本拒绝将合并报告写入目标代码库内部。
## 判定结果
| 判定 | 含义 | 退出码 |
| --- | --- | ---: |
| `PASS` | 配置文件选定的每个阶段均已完成,且没有活动发现 | `0` |
| `REVIEW` | 不阻塞的本机或 AppSec 发现需要人工审查 | `1` |
| `BLOCKED` | 仍存在阻塞性的泄露/隐私/工作流发现,或高危/严重级别的 AppSec 发现 | `1` |
| `PARTIAL` | AppSec 阶段未运行,或覆盖率是部分的/未知的 | `2` |
| `INCOMPLETE` | 扫描器、schema、路径或产物完整性错误导致无法完成 | `2` |
## 安全边界
- 内置脚本不进行任何网络调用
- 不自动进行 Codex Security 安装、登录或扫描
- 不进行暂存、提交、推送、发布、历史重写、远端更改、hooks 或修补
- 合并报告中不包含原始 AppSec 证据或发布稽核匹配值
- 如果缺少产物、哈希不匹配、不支持的 schema、部分覆盖、扫描器错误或没有未验证的候选者,均不予通过
- 不覆盖已存在的合并报告
## 代码库布局
```
skills/verified-secure-release/
SKILL.md
agents/openai.yaml
references/codex-security-integration.md
scripts/audit_release.py
scripts/verified_secure_release.py
tests/test_audit_release.py
tests/test_verified_secure_release.py
```
## 开发
```
python -B -X utf8 tests/validate_skill.py
python -B -X utf8 -m unittest discover -s skills/verified-secure-release/tests -p "test_*.py" -v
```
测试使用一次性的本地 Git 代码库和合成的凭证。它们不会调用网络服务或调用 Codex Security。
## 中文摘要
这个 Skill 先在本机检查 Token、个资、Git 历史与发布外泄;只有本机阶段通过后,才允许整合已完成的官方 Codex Security 扫描结果。合并器不会自行安装、登录、上传代码、执行扫描、修补或发布。
## 上游与署名
- 确定性扫描器源自 [Fuika0306/codex-public-release-audit](https://github.com/Fuika0306/codex-public-release-audit),基于 MIT License。
- 规范产物契约基于公开的 [`openai/codex-security`](https://github.com/openai/codex-security) schema 版本 `1.0`。此集成未包含任何 OpenAI 源代码。
## 许可证
[MIT](LICENSE)
标签:DevSecOps, StruQ, 上游代理, 发布控制, 安全合规, 密钥泄露检测, 网络代理, 网络安全研究, 自动化检查, 逆向工具