VYPR
Low severity2.2NVD Advisory· Published Jun 17, 2026

Symlink-following arbitrary write via github_workflows module

CVE-2026-12567

Description

The github_workflows module constructs local directory paths from user-controlled repository names without validating for symlinks. A local attacker sharing the scan directory can plant a symlink at the predictable output path, causing workflow data to be written to an attacker-chosen location.

AI Insight

LLM-synthesized narrative grounded in this CVE's description and references.

Affected products

1

Patches

Vulnerability mechanics

Root cause

"Missing symlink validation in output path construction allows a local attacker to redirect file writes via a pre-planted symlink."

Attack vector

A local attacker who shares the scan output directory with the BBot process can pre-plant a symlink at the predictable `output_dir/owner/repo` path. When the `github_workflows` module later writes workflow logs or artifacts to that path, the write follows the symlink and lands in an attacker-chosen location [ref_id=1]. This is a classic symlink-follow / time-of-check-time-of-use vulnerability where the attacker controls the repository name used in path construction.

Affected code

The `github_workflows` module in `bbot/modules/github_workflows.py` constructs output paths from user-controlled `owner` and `repo` names without validating for symlinks. The `download_run_logs()` and `download_run_artifacts()` methods build `folder = self.output_dir / owner / repo` and call `self.helpers.mkdir(folder)` without checking whether any path component is a symlink [patch_id=6466801].

What the fix does

The patch adds a `_check_output_path()` method that walks each path component between the trusted `output_dir` and the target folder, calling `current.is_symlink()` on every intermediate directory [patch_id=6466801]. If any component is a symlink, the method returns `False` and the caller (`download_run_logs` or `download_run_artifacts`) aborts the write. This prevents the attacker's pre-planted symlink from being followed, closing the arbitrary-write vector.

Preconditions

  • configAttacker must have write access to the scan output directory (e.g., shared filesystem or multi-tenant environment).
  • inputAttacker must know or predict the owner/repo path that BBot will use.

Generated on Jun 18, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.

References

4

News mentions

0

No linked articles in our index yet.