gexiro-global/forgeguard

GitHub: gexiro-global/forgeguard

一款针对自托管 Gitea 和 Forgejo 的只读安全态势自查工具,帮助运维人员以可重复方式评估补丁状态和匿名暴露面。

Stars: 1 | Forks: 0

# Gexiro 出品 ForgeGuard [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/d97696febe000535.svg)](https://github.com/gexiro-global/forgeguard/actions/workflows/ci.yml) [![PyPI](https://img.shields.io/pypi/v/forgeguard.svg)](https://pypi.org/project/forgeguard/) [![Python](https://img.shields.io/pypi/pyversions/forgeguard.svg)](https://pypi.org/project/forgeguard/) [![License](https://img.shields.io/pypi/l/forgeguard.svg)](https://github.com/gexiro-global/forgeguard/blob/main/LICENSE) 针对自托管 Gitea 和 Forgejo 的只读安全态势自查工具。 ForgeGuard 旨在帮助自托管 Gitea/Forgejo 实例的运维人员了解补丁更新情况、registry 暴露面、匿名访问态势以及基础的安全配置,整个过程无需进行漏洞探测或全网扫描。它的目的是填补自托管后的可见性盲区:运维人员需要快速、可重复的证据,来确认已授权的代码托管平台是否已打上补丁,以及匿名暴露面是否已被刻意限制。 ## v0.2 版本检查内容 - 针对修复了 CVE-2026-27771 的 Gitea 1.26.2 正式版,检查平台版本及补丁更新情况。 - 通过安全的根响应推断 CVE-2026-27771 的安全态势。 - 通过安全的 `/v2/` 响应推断匿名 registry 态势。 - 登录与匿名访问态势。 - 基础的 registry 暴露情况。 ## 不会执行的操作 - 不进行大规模扫描。 - 不包含漏洞 PoC。 - 不获取私有 blob 或 manifest。 - 不进行未经身份验证的第三方探测。 - 不提供 AI 代码审查。 - 不提供绝对的安全保证。 ## 安装 ``` python -m pip install forgeguard ``` 或者从源码安装最新版本: ``` python -m pip install "git+https://github.com/gexiro-global/forgeguard.git" ``` 用于本地开发: ``` git clone https://github.com/gexiro-global/forgeguard.git cd forgeguard python -m pip install -e ".[dev]" ``` ## 快速开始 ``` forgeguard scan --url https://git.example.com --authorized --out ./reports/scan_report.md ``` 当你的版本 endpoint 被刻意隐藏时,请使用 `--known-version`: ``` forgeguard scan --url https://git.example.com --authorized --known-version 1.26.2 --format md,json --out ./reports/scan_report.md ``` ## 示例输出 以下是一个模拟实例更新前后的对比,展示了在 Gitea 更新后 CVE-2026-27771 补丁滞后的差距被缩小。 **更新前** - Gitea `1.25.3`(已缓解,但缺少代码级修复): ``` # ForgeGuard by Gexiro - https://git.example.com Forge: gitea 1.25.3 | Score: 66/100 (C) Summary: critical 1 | high 1 | medium 0 | low 0 | pass 3 Top action: P1 - Update Gitea to >=1.26.2 (CVE-2026-27771 window present, mitigation active, code-level fix missing) ``` **更新后** - Gitea `1.26.2`(已修复): ``` # ForgeGuard by Gexiro - https://git.example.com Forge: gitea 1.26.2 | Score: 100/100 (A) Summary: critical 0 | high 0 | medium 0 | low 0 | pass 5 Top action: None - all checks pass. ``` | 发现项 | 更新前 (1.25.3) | 更新后 (1.26.2) | |---|---|---| | FG-VER - 补丁情况 | FAIL / HIGH | **PASS** | | FG-CVE-27771 - 暴露态势 | WARN / CRITICAL (已缓解) | **PASS** | | FG-SIGNIN / FG-REG / FG-ANON | PASS | PASS | | **评分** | **66/100 (C)** | **100/100 (A)** | 此次更新弥补了代码级别的补丁滞后差距;而态势检查在此前就已经通过了。完整的模拟报告:[`examples/scan_report_mitigated_pre_update.md`](examples/scan_report_mitigated_pre_update.md) 和 [`examples/scan_report_patched_post_update.md`](examples/scan_report_patched_post_update.md)。 ## 评分机制 ForgeGuard 的评分机制是确定性的,并且不使用 AI。各项发现会从 100 分中扣除固定的惩罚分:critical 扣 40 分,high 扣 20 分,medium 扣 10 分,low 扣 4 分。警告级别的发现使用 `WARN_FACTOR = 0.35`,因此一条 critical 级别的警告会扣除 14 分。评级标准为:90 分及以上为 A,75 分及以上为 B,60 分及以上为 C,40 分及以上为 D,低于 40 分为 F。 ## 安全与道德 请仅在您拥有或获得明确授权评估的实例上运行 ForgeGuard。ForgeGuard v0.2 使用只读的 HTTP GET 检查,并在获取到态势信号后即停止;它不会请求软件包内容或 registry 产物。报告仅作为态势证据,不能作为被入侵的证明。 请参阅 `AUTHORIZED_USE.md` 和 `SECURITY.md`。 ## 路线图 - v0.3:runner、token 以及 TLS 态势检查。 - v0.4:可选的 issue emitter 和 AI 修复建议。 - v1:供应链、SBOM 以及 OSV 扩展。 - 未来:语义化代码智能分析。 ## 负责任的漏洞披露 若要报告 ForgeGuard 本身的漏洞,请参阅 `SECURITY.md`。 Gexiro 出品 ForgeGuard 不隶属于 Gitea、Forgejo、Codeberg、GitHub 或 GitLab。
标签:DevSecOps, Forgejo, Gitea, Python, 上游代理, 安全基线检查, 开源治理, 无后门, 逆向工具