CVE-2026-44220

ciguard: discover_pipeline_files follows symlinks out of scan root

Published May 12, 2026 CVSS 3.1 · 3.2 Low EPSS < 1% KEV · Not listed
Description
ciguard is a static security auditor for CI/CD pipelines. From 0.8.0 to 0.8.1 , the discover_pipeline_files() function in src/ciguard/discovery.py 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. This vulnerability is fixed in 0.8.2.

Analysis

AI-generated

Technical impact

The discover_pipeline_files() function in ciguard’s discovery module walks a directory tree, following symbolic links with only cycle protection based on visited resolved paths. This design flaw allows an attacker who can place a symlink inside a directory that a CI/CD scan processes to cause the discovery routine to traverse outside the intended scan root and reveal paths to pipeline‑styled files that are not part of the targeted repository. The vulnerability is a classic directory traversal issue identified as CWE‑59 and can result in unauthorized disclosure of internal pipeline artifacts or configuration files.

Affected Systems

Ciguard versions 0.8.0 through 0.8.1, inclusive, are affected. The issue has been patched in release 0.8.2, so any deployment using 0.8.0 or 0.8.1 requires an upgrade to avoid the exposed file paths.

Risk and Exploitability

The CVSS score of 3.2 indicates a moderate severity. EPSS data is unavailable, and the vulnerability is not listed in the CISA KEV catalog, suggesting that it has not yet been actively exploited in the wild. Attackers would need local or elevated privileges to place a symlink within a scanned directory, making the threat scope limited to environments where build agents or CI runners run with write access to the repository’s working tree. Without such privileges, the risk remains low. Nevertheless, the potential for leaking sensitive pipeline configuration warrants prompt remediation.

Remediation

No solution or workaround provided in the CVE record.

OpenCVE Recommended Actions

  • Upgrade ciguard to version 0.8.2 or later to apply the fix that prevents walking beyond the scan root.
  • If upgrading is not immediately possible, restrict write permissions to directories scanned by ciguard so that attackers cannot create malicious symlinks.
  • As a temporary measure, disable symbolic link resolution in the discovery logic if the environment allows modifying configuration or source to stop following symlinks.

Generated by OpenCVE AI on May 12, 2026 at 21:48 UTC.

Tracking

Sign in to view the affected projects.

Advisories

Source ID Title
Github GHSA Github GHSA GHSA-8cxw-cc62-q28v ciguard: discover_pipeline_files follows symlinks out of scan root
History
Type Values Removed Values Added
Metrics ssvc

{'options': {'Automatable': 'no', 'Exploitation': 'poc', 'Technical Impact': 'partial'}, 'version': '2.0.3'}

Type Values Removed Values Added
First Time appeared Jo-jo98
Jo-jo98 ciguard
Vendors & Products Jo-jo98
Jo-jo98 ciguard
Type Values Removed Values Added
Description ciguard is a static security auditor for CI/CD pipelines. From 0.8.0 to 0.8.1 , the discover_pipeline_files() function in src/ciguard/discovery.py 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. This vulnerability is fixed in 0.8.2.
Title ciguard: discover_pipeline_files follows symlinks out of scan root
Weaknesses CWE-59
References
Metrics cvssV3_1

{'score': 3.2, 'vector': 'CVSS:3.1/AV:L/AC:L/PR:L/UI:R/S:C/C:L/I:N/A:N'}

Weaknesses
  • CWE-59

    Improper Link Resolution Before File Access ('Link Following')

Sources

Status
PUBLISHED
Assigner
GitHub_M
Published
Updated
May 13, 2026, 3:37 PM
Reserved
May 5, 2026, 3:42 PM
Status
Deferred
Published
May 12, 2026, 8:16 PM
Modified
Oct 26, 2026, 6:10 PM