Skip to main content

forgeguard

CI PyPI Python License: Apache-2.0

Read-only security posture self-check for self-hosted Gitea and Forgejo.

ForgeGuard helps operators of self-hosted Gitea/Forgejo instances understand patch currency, registry exposure, anonymous access posture, and basic security configuration without exploit probes or internet-wide scanning. It is intended to close a visibility gap after self-hosting: operators need quick, repeatable evidence about whether one authorized forge is patched and whether anonymous surfaces look intentionally constrained.

What It Checks In v0.2

  • Forge version and patch currency against the fixed Gitea 1.26.2 release for CVE-2026-27771.
  • CVE-2026-27771 posture using safe root response inference.
  • Anonymous registry posture via safe /v2/ response inference.
  • Sign-in and anonymous access posture.
  • Basic registry exposure.

What it does not do

  • No mass scanning.
  • No exploit PoC.
  • No private blob or manifest retrieval.
  • No unauthenticated third-party probing.
  • No AI code review.
  • No guarantee of full security.

Install

python -m pip install forgeguard

Or install the latest from source:

python -m pip install "git+https://github.com/gexiro-global/forgeguard.git"

For local development:

git clone https://github.com/gexiro-global/forgeguard.git
cd forgeguard
python -m pip install -e ".[dev]"

Quickstart

mkdir -p reports
forgeguard scan --url https://git.example.com --authorized --out ./reports/scan_report.md

Use --known-version when your version endpoint is intentionally hidden:

forgeguard scan --url https://git.example.com --authorized --known-version 1.26.2 --format md,json --out ./reports/scan_report.md

Sample output

A before/after on a synthetic instance, showing the CVE-2026-27771 patch-currency gap closing after a Gitea update.

Before — Gitea 1.25.3 (mitigated, but the code-level fix is missing):

# 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)

After — Gitea 1.26.2 (patched):

# 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.
Finding Before (1.25.3) After (1.26.2)
FG-VER - patch currency FAIL / HIGH PASS
FG-CVE-27771 - exposure posture WARN / CRITICAL (mitigated) PASS
FG-SIGNIN / FG-REG / FG-ANON PASS PASS
Score 66/100 (C) 100/100 (A)

The update closes the code-level patch-currency gap; the posture checks were already passing. Full synthetic reports: examples/scan_report_mitigated_pre_update.md and examples/scan_report_patched_post_update.md.

Scoring

ForgeGuard scoring is deterministic and does not use AI. Findings subtract fixed penalties from 100: critical -40, high -20, medium -10, low -4. Warning findings use WARN_FACTOR = 0.35, so a critical warning subtracts 14 points. Grades are A at 90+, B at 75+, C at 60+, D at 40+, and F below 40.

Security and ethics

Run ForgeGuard only on instances you own or are explicitly authorized to assess. ForgeGuard v0.2 uses read-only HTTP GET checks and stops at posture signals; it does not request package contents or registry artifacts. Reports are posture evidence, not proof of compromise.

See Authorized Use and Security Policy.

Roadmap

  • v0.3: runner, token, and TLS posture checks.
  • v0.4: optional issue emitter and AI remediation notes.
  • v1: supply-chain, SBOM, and OSV enrichment.
  • Later: semantic code intelligence.

Responsible disclosure

To report a vulnerability in ForgeGuard itself, see Security Policy.

License

Apache-2.0. See LICENSE.

Built and maintained by Gexiro Global Enterprises Ltd.

Part of the Gexiro open-source toolkit.

ForgeGuard by Gexiro

Not affiliated with Gitea, Forgejo, Codeberg, GitHub, or GitLab.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

forgeguard-0.2.1.tar.gz (24.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

forgeguard-0.2.1-py3-none-any.whl (21.4 kB view details)

Uploaded Python 3

File details

Details for the file forgeguard-0.2.1.tar.gz.

File metadata

  • Download URL: forgeguard-0.2.1.tar.gz
  • Upload date:
  • Size: 24.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for forgeguard-0.2.1.tar.gz
Algorithm Hash digest
SHA256 54b57390bbd7783327deeff804eabeb450f34cab61a87b108d065ea2e32a7169
MD5 0cd8bfc2d2f34e03a12e2c8e3ff8826a
BLAKE2b-256 15fb860ea351f9bbe8133712ecb98d38528d102833f0fe757d73c7c0fb6ce2b2

See more details on using hashes here.

Provenance

The following attestation bundles were made for forgeguard-0.2.1.tar.gz:

Publisher: release.yml on gexiro-global/forgeguard

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file forgeguard-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: forgeguard-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 21.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for forgeguard-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 63f196ad404b917e4c73736c0f7d896d05237ad63acf44d1c286b7c1f6f2139a
MD5 998f9ff5e12f6485ab36ce1bd698f808
BLAKE2b-256 e92c518a7a7b5aef802df50613fc3094a72cf80616a6b934e754e64a1ff1f241

See more details on using hashes here.

Provenance

The following attestation bundles were made for forgeguard-0.2.1-py3-none-any.whl:

Publisher: release.yml on gexiro-global/forgeguard

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page