Symlink-following arbitrary write via github_workflows module
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
1Patches
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
4News mentions
0No linked articles in our index yet.