ciguard: SCA HTTP client reads response body without size cap
Summary
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
MAX_RESPONSE_BYTES = 5 * 1024 * 1024(5 MB) constant in both modules. body = resp.read(MAX_RESPONSE_BYTES + 1)with overflow check returnsNone(caller falls back to stale cache).- 3 regression tests in
tests/test_sca_rules.py::TestSCAResponseSizeCap.
Discovery
Found during ciguard's first self-conducted pentest cycle, 2026-04-26.
CVSS Scoring
- CVSS v3.1:
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:L— 3.7 (Low) - CVSS v4.0:
CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N— first.org calc 3.1 (Low); GitHub's calc 6.3 (Medium). Vector is correct — choosing v3.1 as the structured score keeps the consistent Low rating across consumers.
Reproduction
Monkey-patch urllib.request.urlopen to return a fake 50 MB response; observe memory growth before/after the call. Pre-fix: process memory grows by ~50 MB. Post-fix: _fetch returns None, memory growth bounded to MAX_RESPONSE_BYTES.
References
- Fix released in v0.8.2
- CI regression gate added in v0.8.3
- https://www.cve.org/CVERecord?id=CVE-2026-44219
Affected software
Click a technology to see all vulnerabilities affecting it.
| Platform | Package | Vulnerable versions | Fixed in |
|---|---|---|---|
| Python (PyPI) | ciguard | >= 0.6.0, < 0.8.2 | 0.8.2 |
References
- https://github.com/Jo-Jo98/ciguard/security/advisories/GHSA-xw8c-rrvx-f7xq
- https://nvd.nist.gov/vuln/detail/CVE-2026-44219
- https://github.com/Jo-Jo98/ciguard
- https://github.com/Jo-Jo98/ciguard/releases/tag/v0.8.2
- https://github.com/Jo-Jo98/ciguard/releases/tag/v0.8.3
- https://pypi.org/project/ciguard
- https://github.com/advisories/GHSA-xw8c-rrvx-f7xq
- CVSS vector
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:L- Weakness (CWE)
CWE-770- Platform
- Python (PyPI)
- Package
ciguard- Disclosed
- 05.05.2026
- Updated
- 11.10.2026 14:17
Sources and licenses
OSV / GitHub Advisory Database - PYSEC-2026-2410 - PyPA Advisory Database; CC BY 4.0
OSV / GitHub Advisory Database - GHSA-xw8c-rrvx-f7xq - CC BY 4.0
Vulnerability history: ciguard
All published vulnerabilities of this package (Python (PyPI)), newest first. Shows whether this is a one-off slip or a package that needs watching.
- Total entries
- 4
- First → latest
- 05.2026 05.2026
- Without a fix
- 0
- Exploited in attacks
- 0
Severity breakdown
- Medium 1
- Low 3
Disclosures per year
- 2026: 4
-
ciguard: SCA HTTP client reads response body without size cap this entry
Know which vulnerabilities affect your application
With the DockRay integration and software inventory enabled, DockRay checks reported component versions against known vulnerabilities and notifies you about confirmed matches. Coverage depends on the supported technology and available advisory data.