Skip to content

← Public intelligence

PyPI package

ciguard

Open actionable advisories and recorded vendor fixes. This public package view has no inventory attached and cannot establish whether your deployment is affected. A vendor fix never resolves your finding; verify your installed version and the source guidance.

Open advisories

4 actionable advisories, newest first. Withdrawn advisories and news are excluded. Coverage is partial.

  1. Low, CVSS 2.1PyPIAmendedPublished

    ciguard: Web UI is missing HTTP defence-in-depth headers

    GHSA-7ww3-xvf5-cxwm

    Affected
    • PyPI ciguard >= 0.1.0, <= 0.8.1
    Fixed in
    0.8.2· Vendor fix available
    Issue
    ciguard's FastAPI Web UI (src/ciguard/web/app.py) does not set HTTP defence-in-depth headers. OWASP ZAP baseline scan flagged 11 alerts: missing Content-Security-Policy (Medium), X-Frame-Options (Medium), Sub-Resource-Integrity on /api/docs (Medium), COOP / COEP / CORP (Low), Permissions-Policy (Low), X-Content-Type-Options (Low). Threat scenario For local-only deployment (current intent): minimal — there's no untrusted browser context, no third-party hosting, no auth surface to protect. For public hosting (PRD Slice 9 GitHub App or hosted dashboard, future): each missing header reduces a defence layer: - Missing CSP → injected XSS would have no second-line defence (first-line Jinja autoescape remains intact) - Missing X-Frame-Options → clickjacking against any UI button would be possible - Missing SRI on jsdelivr-hosted Swagger UI → if jsdelivr were compromised, attacker JS would run in the docs page context Patch - New SecurityHeadersMiddleware at…

    Recommended action: Upgrade to 0.8.2 or later, then redeploy and verify.A vendor fix does not resolve your finding until you verify it in your own systems.

    Sources:osv.dev (1)github.com (2)Source checked Evidence →
  2. Low, CVSS 2.4PyPIAmendedPublished

    ciguard: discover_pipeline_files follows symlinks out of scan root

    CVE-2026-44220 · GHSA-8cxw-cc62-q28v

    Affected
    • PyPI ciguard >= 0.8.0, <= 0.8.1
    Fixed in
    0.8.2· Vendor fix available
    Issue
    The discoverpipelinefiles() function in src/ciguard/discovery.py (introduced in v0.8.0 and used by the MCP scanrepo tool shipped in v0.8.1) walks a directory tree following symlinks, with cycle protection via tracking visited resolved paths. An attacker who can plant a symlink in a directory the user (or AI agent) scans can cause discovery to walk into the symlink target and return paths to pipeline-shaped files outside the requested root. Threat scenario MCP confused-deputy. A user runs Claude Desktop / Claude Code / Cursor with the ciguard MCP server registered. The agent is fed an adversarial prompt to scan a directory containing planted symlinks (e.g. via a malicious clone or extracted tarball). ciguard.scanrepo walks the symlinks, returning paths and (via subsequent scan calls) file content from ~/.aws/, ~/.config/, /etc/some-pipeline-config/, etc. Pipeline files often contain hardcoded secrets, internal hostnames, deploy keys. Patch - New followsymlinks: bool = False…

    Recommended action: Upgrade to 0.8.2 or later, then redeploy and verify.A vendor fix does not resolve your finding until you verify it in your own systems.

    Sources:osv.dev (1)github.com (2)Source checked Evidence →
  3. Low, CVSS 1.8PyPIAmendedPublished

    ciguard: Container image runs as root (no USER directive)

    CVE-2026-44218 · GHSA-jrm4-4pcf-4763

    Affected
    • PyPI ciguard >= 0.1.0, <= 0.8.1
    Fixed in
    0.8.2· Vendor fix available
    Issue
    The published ghcr.io/jo-jo98/ciguard container image inherits the default root user because the Dockerfile lacks a USER directive. ciguard is a static analyser with no need for root privileges; running as root inside a container makes any future container-runtime escape CVE more impactful than it needs to be. Threat scenario Defence-in-depth gap. Without a known container-runtime CVE in the chain, this finding is not directly exploitable. Recent runc CVEs (e.g. CVE-2024-21626) provided escape primitives that depended on host UID = container UID = 0 for full impact; with this fix, any future such escape primitive lands as a non-root user on the host. Patch - Dockerfile adds RUN groupadd -r ciguard && useradd -r -g ciguard -d /home/ciguard -m -s /usr/sbin/nologin ciguard && chown -R ciguard:ciguard /reports /policies-mount /app. - Followed by USER ciguard before the CMD directive. - Trivy DS-0002 misconfig clears (Tests: 20 SUCCESSES: 20 FAILURES: 0). Discovery Found by Trivy…

    Recommended action: Upgrade to 0.8.2 or later, then redeploy and verify.A vendor fix does not resolve your finding until you verify it in your own systems.

    Sources:osv.dev (1)github.com (2)Source checked Evidence →
  4. Medium, CVSS 6.3PyPIAmendedPublished

    ciguard: SCA HTTP client reads response body without size cap

    CVE-2026-44219 · GHSA-xw8c-rrvx-f7xq

    Affected
    • PyPI ciguard >= 0.6.0, <= 0.8.1
    Fixed in
    0.8.2· Vendor fix available
    Issue
    Both SCA HTTP clients (src/ciguard/analyzer/sca/osv.py and src/ciguard/analyzer/sca/endoflife.py) call payload = json.loads(resp.read().decode('utf-8')) without a maximum-bytes cap. A hostile or compromised endoflife.date / OSV.dev (or a successful TLS MITM) could return a multi-GB response, exhausting the ciguard process's memory. Threat scenario ciguard process memory exhaustion → OOM kill or system swap thrash. Realistic when ciguard runs in CI with a limited memory budget (typical: 4-8 GB). No data integrity or confidentiality impact. Realism caveat: both URLs are hardcoded HTTPS, so this is a low-realism threat (HTTPS prevents MITM unless the attacker controls a trusted CA or hijacks DNS in a way that doesn't trigger cert validation). The unbounded read is structural defence-in-depth, not a directly exploitable bug today. Patch - New MAXRESPONSEBYTES = 5 1024 1024 (5 MB) constant in both modules. - body = resp.read(MAXRESPONSEBYTES + 1) with overflow check returns None…

    Recommended action: Upgrade to 0.8.2 or later, then redeploy and verify.A vendor fix does not resolve your finding until you verify it in your own systems.

    Sources:osv.dev (1)github.com (2)Source checked Evidence →