CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-12567

CVE-2026-12567: Symlink Following Vulnerability in BBOT github_workflows Module

Amit Schendel
Amit Schendel
Senior Security Researcher

Jun 18, 2026·6 min read·17 visits

Executive Summary (TL;DR)

A local symlink-following vulnerability in BBOT's github_workflows module allows an attacker sharing the scan directory to overwrite arbitrary local files when a victim scans a targeted repository.

The github_workflows module in BBOT (Black Lantern Security OSINT framework) versions 2.0.0 through 2.8.4 constructs local directory paths from user-controlled repository and owner names without validating for symbolic links. A local attacker sharing the scan directory can pre-plant a symlink at the predictable output path, forcing BBOT to write downloaded workflow artifacts or run logs to an arbitrary location on the filesystem.

Vulnerability Overview

BBOT is an active OSINT and reconnaissance framework used to gather threat intelligence and map external attack surfaces. The github_workflows module within BBOT retrieves workflow run logs and artifacts from a target GitHub repository. This functionality is exposed to the local filesystem through automatic directory creation and file storage procedures.

To store these gathered resources locally, the module organizes downloads based on the target repository owner and repository name. Because these names are determined dynamically during a scan, they serve as user-controlled variables. When configuring directories to save these files, the framework relies on path construction techniques that do not verify the underlying file types.

This lack of verification introduces an attack surface classified as CWE-59: Improper Link Resolution Before File Access ('Link Following'). A local adversary who has write access to the shared scan directory or a predictable public path (e.g., /tmp) can create symbolic links targeting sensitive system resources. When the victim initiates a scan, the framework resolves these links blindly, allowing arbitrary file writes to occur.

Root Cause Analysis

The root cause of CVE-2026-12567 lies in the omission of path-sanitization checks prior to invoking directory creation and file-write calls. Specifically, the framework constructs target paths by joining a trusted base directory with variables retrieved from GitHub API responses or user configurations.

The vulnerable execution flow follows this sequence:

folder = self.output_dir / owner / repo
self.helpers.mkdir(folder)
file_destination = folder / filename

The self.helpers.mkdir utility creates the requested folder structure recursively. However, it fails to verify whether any intermediate directory component (such as owner or repo) is an existing symbolic link pointing outside the designated output_dir boundary.

By leveraging this behavioral gap, a local attacker can exploit predictable paths. Because the framework organizes output directories using the format {output_dir}/{owner}/{repo}, the exact layout of the target directory is known beforehand. This allows the pre-creation of symlinks that route the eventual file creation payloads toward sensitive locations, bypassing normal filesystem organizational limits.

Code Analysis

In BBOT versions prior to 2.8.5, paths were created directly using the pathlib division operator without path-element inspection. The fix introduced in commit 16d9c42b6c591c07ee94d260cb0588e72d4eae2b mitigates this weakness by recursively inspecting each subdirectory component starting from the safe base path.

Below is the comparison between the vulnerable and patched file operations:

# Vulnerable Path construction (bbot/modules/github_workflows.py)
async def download_run_logs(self, owner, repo, run_id):
    folder = self.output_dir / owner / repo
    self.helpers.mkdir(folder)  # Vulnerable: Creates path recursively without link checks
    filename = f"run_{run_id}.zip"
    file_destination = folder / filename

The patch introduces the _check_output_path helper function to validate path components individually:

# Patched Implementation (bbot/modules/github_workflows.py)
def _check_output_path(self, folder):
    try:
        # Ensure the target folder is a child of the output_dir
        rel = folder.relative_to(self.output_dir)
    except ValueError:
        return False
    current = self.output_dir
    # Walk down the relative components and verify none are symlinks
    for part in rel.parts:
        current = current / part
        if current.is_symlink():
            self.warning(f"Refusing to write through symlink: {current}")
            return False
    return True

While this fix successfully blocks basic symlink redirection, a critical analysis reveals two limitations:

  1. Time-of-Check to Time-of-Use (TOCTOU): The framework performs the validation in Python before invoking the mkdir and file-write commands. In an active, multi-user shared filesystem, an attacker could monitor directory modifications. Using tools like inotify, the attacker can swap the verified directory with a symlink immediately after _check_output_path returns True but before the write operation finishes.

  2. Unchecked Base Directory: The validation assumes self.output_dir itself is secure and not a symlink. If the parent or base scan output directory is compromised, the logic can be subverted.

  3. Hardlink Attacks: The check depends on is_symlink(), which ignores hardlinks. If hardlink protection (fs.protected_hardlinks) is not enabled at the operating system level, an attacker might still attempt link attacks on files sharing the same physical partition.

Exploitation Methodology

To successfully execute a symlink attack against a BBOT instance using the github_workflows module, the following conditions must be met:

  • Local Access: The attacker must have local access to the filesystem hosting the BBOT scan or access to a shared directory where scan outputs are generated.
  • Predictable Pathing: The scan must be set to run in a directory writable by the attacker, such as /tmp or a shared group folder.
  • Victim Action: The victim must initiate a scan that targets the specific GitHub repository or owner for which the symlink was pre-planted.

The attack flow is visualized below:

An attacker begins by pre-creating the target directory structure. For example, if the victim is expected to scan a repository named testrepo owned by testowner, the attacker constructs the path inside the target scan folder:

mkdir -p /tmp/bbot_output/testowner
ln -s /home/victim/.ssh/authorized_keys /tmp/bbot_output/testowner/testrepo

When the victim runs BBOT, the module queries the GitHub API, retrieves run logs, and writes them to the target destination. Because the symlink points to /home/victim/.ssh/authorized_keys, the written data (in this case, compressed zip logs or text log formats) is directed into the SSH configuration file, corrupting it or appending uncontrolled text.

Impact Assessment

The impact of CVE-2026-12567 is limited compared to remote code execution bugs, resulting in a CVSS v3.1 score of 2.2 (Low). The vector breakdown is CVSS:3.1/AV:L/AC:H/PR:L/UI:R/S:U/C:N/I:L/A:N.

The attack vector is restricted to local system access (AV:L), and requires high attack complexity (AC:H) due to the timing and naming coordination required. The attacker must anticipate the exact GitHub repository and owner configuration targeted by the victim.

While the integrity impact is rated Low (I:L), successful exploitation results in writing user-controlled GitHub artifacts and logs into administrative or target files. An attacker could overwrite configuration files, system scripts, or security keys. This could potentially disrupt local services or allow the attacker to manipulate environmental variables or access credentials in subsequent phases of an intrusion.

Official Patches

Black Lantern SecurityOfficial fix addressing symbolic link resolution in BBOT's github_workflows module.

Fix Analysis (1)

Technical Appendix

CVSS Score
2.2/ 10
CVSS:3.1/AV:L/AC:H/PR:L/UI:R/S:U/C:N/I:L/A:N
EPSS Probability
0.09%
Top 99% most exploited

Affected Systems

BBOT installations running on multi-user or shared filesystem configurations

Affected Versions Detail

Product
Affected Versions
Fixed Version
BBOT
Black Lantern Security
>= 2.0.0, <= 2.8.42.8.5
AttributeDetail
CWE IDCWE-59
Attack VectorLocal
CVSS v3.1 Score2.2
EPSS Score0.0009 (Percentile: 0.60%)
ImpactLow Integrity Impact (Unsanitized local file write)
Exploit StatusProof of Concept (PoC) available in official test suite
KEV StatusNot listed in CISA KEV

MITRE ATT&CK Mapping

T1491Defacement
Impact
T1059Command and Scripting Interpreter
Execution
CWE-59
Improper Link Resolution Before File Access ('Link Following')

The software attempts to access a file based on a filename, but it does not properly associate the name with the intended file entity, which can allow an attacker to substitute a different file (e.g. via symbolic links).

Known Exploits & Detection

GitHubIntegration test validating symlink path rejection at repo and owner levels.

Vulnerability Timeline

Vulnerability discovered and patched in GitHub main branch
2026-03-01
CVE-2026-12567 assigned and published to NVD/MITRE
2026-03-02

References & Sources

  • [1]CVE-2026-12567 MITRE Record
  • [2]BBOT Git Patch Commit

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•1 day ago•CVE-2026-54068
5.9

CVE-2026-54068: Unauthenticated Server-Side Template Injection and SQLite Exfiltration in SiYuan PKM

An authentication bypass in the SiYuan personal knowledge management system before version 3.7.0 exposes a dynamic icon rendering endpoint. This endpoint processes client-supplied Go template directives. By submitting a crafted request, an unauthenticated remote attacker can leverage registered database template functions to execute arbitrary read-only SQL queries and exfiltrate workspace contents.

Amit Schendel
Amit Schendel
11 views•5 min read
•1 day ago•CVE-2026-54069
9.1

CVE-2026-54069: Authentication Bypass in SiYuan Note via Origin Header Spoofing

CVE-2026-54069 is a critical authentication bypass vulnerability in the SiYuan Note personal knowledge management system. The flaw is located in the HTTP server's middleware handling API authorization, which unconditionally trusts requests carrying a 'chrome-extension://' scheme in the Origin HTTP header, granting administrative access without validating API tokens.

Alon Barad
Alon Barad
9 views•5 min read
•1 day ago•CVE-2026-54089
9.1

CVE-2026-54089: Authentication Bypass by Spoofing in File Browser

CVE-2026-54089 is a critical authentication bypass vulnerability in File Browser affecting instances configured with proxy-based authentication. An unauthenticated remote attacker with direct network access can impersonate arbitrary users or register new accounts by spoofing configured HTTP headers.

Amit Schendel
Amit Schendel
7 views•7 min read
•2 days ago•GHSA-99J7-FHR2-XFJ4
10.0

GHSA-99J7-FHR2-XFJ4: Malicious Remote Code Execution Payload in 'exploration' Cargo Crate

The malicious Cargo package 'exploration' was uploaded to the crates.io registry. During compilation or package import, the crate executes code designed to establish an outbound TCP/HTTP connection, download an external second-stage binary, and execute the binary locally on the host machine. This creates an unauthenticated remote code execution vector impacting developer environments and continuous integration pipelines.

Amit Schendel
Amit Schendel
9 views•6 min read
•2 days ago•CVE-2026-54088
9.3

CVE-2026-54088: Pre-Authentication Remote Code Execution in File Browser Hook Authentication

CVE-2026-54088 is a critical command injection vulnerability in File Browser prior to version 2.63.6. When Hook Authentication is enabled, the application interpolates unsanitized credentials into a shell command, allowing unauthenticated remote code execution.

Alon Barad
Alon Barad
7 views•6 min read
•2 days ago•GHSA-QV4M-M73M-8HJ7
8.8

GHSA-qv4m-m73m-8hj7: Authenticated Arbitrary File Upload leading to Remote Code Execution in NotrinosERP

An authenticated remote code execution vulnerability exists in NotrinosERP (versions up to and including 1.0.0) within the Human Resource Management (HRM) module. Users with employee management permissions can upload arbitrary file types, including PHP scripts, which are written directly to a web-accessible directory. This allows for arbitrary code execution in the context of the web-server user.

Alon Barad
Alon Barad
7 views•6 min read