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-12566

CVE-2026-12566: Server-Side Request Forgery (SSRF) in Black Lantern Security BBOT docker_pull Module

Amit Schendel
Amit Schendel
Senior Security Researcher

Jun 18, 2026·6 min read·21 visits

Executive Summary (TL;DR)

Black Lantern Security BBOT's docker_pull module blindly parses and requests the realm URL from a Docker registry's WWW-Authenticate header, leading to Server-Side Request Forgery (SSRF) and potential credential exposure.

A Server-Side Request Forgery (SSRF) vulnerability exists in the docker_pull module of Black Lantern Security BBOT. By returning a maliciously crafted WWW-Authenticate header from a rogue Docker registry or executing a Man-in-the-Middle (MitM) attack, an attacker can coerce the BBOT scanner into making arbitrary HTTP requests to internal system services or external infrastructure, potentially disclosing sensitive authorization tokens and host metadata.

Vulnerability Overview

The Docker Registry HTTP API V2 protocol implements a decentralized, token-based authentication scheme. When an unauthenticated client queries a registry endpoint, the registry responds with an HTTP 401 Unauthorized status and a WWW-Authenticate header. This header contains details on how and where the client can obtain an authentication token, specifically referencing a target realm URL.

In Black Lantern Security's BBOT recursive internet scanner (versions 2.0.0 through 2.8.4), the docker_pull module handles these authentication requests. The module extracts the realm parameter directly from the HTTP response header and issues a subsequent HTTP GET request to retrieve the required token.

Because the application does not validate the authority or target domain of the parsed realm URL, this design creates an unauthenticated Server-Side Request Forgery (SSRF) vulnerability. An attacker can exploit this behavior by hosting a malicious Docker registry or performing a Man-in-the-Middle (MitM) interception of standard registry traffic.

Root Cause Analysis

The root cause of this vulnerability lies in the implicit trust placed in the WWW-Authenticate response header. Specifically, the docker_pull module failed to perform validation on the parsed realm parameter prior to using it to construct a outbound HTTP request.

During a standard connection sequence, BBOT initiates an anonymous API call to the registry. If the registry returns an HTTP 401 response, BBOT parses the www-authenticate header using crude, fragile string split operations. This parsing mechanism lacks any sanity checking or input validation.

After retrieving the value of the realm parameter, the application directly passes the constructed URL to its HTTP client helper. This behavior allows any remote endpoint that behaves as a Docker registry to control the destination of BBOT's subsequent outbound HTTP connection, exposing local interfaces, cloud metadata endpoints, and internal network infrastructure to unauthorized web requests.

Code Analysis

An analysis of the vulnerable code path in bbot/modules/docker_pull.py reveals how the unvalidated parameter is processed and executed:

async def docker_api_request(self, url: str):
    ...
    response = await self.helpers.request(url, headers=self.headers, follow_redirects=True)
    if response is not None and response.status_code != 401:
        return response
    try:
        www_authenticate_headers = response.headers.get("www-authenticate", "")
        # Crude, fragile string splits to extract parameters
        realm = www_authenticate_headers.split('realm="')[1].split('"')[0]
        service = www_authenticate_headers.split('service="')[1].split('"')[0]
        scope = www_authenticate_headers.split('scope="')[1].split('"')[0]
    except (KeyError, IndexError):
        self.log.warning(f"Could not obtain realm, service or scope from {url}")
        break
    auth_url = f"{realm}?service={service}&scope={scope}"
    # SSRF Bottleneck Step: Direct HTTP request to the untrusted realm URL
    auth_response = await self.helpers.request(auth_url)
    ...

The split mechanism reads the raw, unescaped string in www-authenticate. The value of realm is used to construct the absolute destination URL auth_url without verifying that the hostname in realm matches the hostname in the parent request url. Because self.helpers.request() carries session headers, any auth tokens or system identifiers configured in the module are transmitted directly to the attacker-specified domain.

Exploitation & Attack Methodology

An attacker can exploit this vulnerability through two main vectors: a malicious registry domain or a local network Man-in-the-Middle (MitM) attack.

In the malicious registry scenario, the attacker sets up an internet-accessible Docker registry (e.g., evil-registry.com). When BBOT scans this registry, the registry sends a crafted HTTP 401 response with a payload pointing to an internal target:

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer realm="http://169.254.169.254/latest/meta-data/",service="registry.docker.io",scope="repository:library/nginx:pull"

Upon parsing this header, BBOT issues an internal GET request targeting the AWS or cloud Link-Local Instance Metadata Service (IMDSv1). This allows the attacker to retrieve sensitive system configuration data or cloud environment security credentials.

If the attacker is positioned as a local network MitM, they can intercept standard HTTP outbound connections from BBOT and inject the same challenge response, redirecting the scanner's internal web client to any internal TCP port or web application interface on the local network segment.

Patch Evaluation & Residual Risks

Black Lantern Security addressed this vulnerability in commit c2f4bc0f4e4bb4d00f06750dcabf1d9c74c0d3b4. The patch introduces structured parsing of the authenticate header and validation logic to verify the target realm domain:

def _validate_realm(self, registry_url, realm):
    registry_host = self.helpers.urlparse(registry_url).hostname or ""
    realm_host = self.helpers.urlparse(realm).hostname or ""
    _, registry_domain = self.helpers.split_domain(registry_host)
    _, realm_domain = self.helpers.split_domain(realm_host)
    if not realm_domain or realm_domain != registry_domain:
        self.warning(f"Auth realm TLD ({realm_domain}) does not match registry TLD ({registry_domain}), skipping")
        return False
    return True

While the patch successfully prevents cross-domain open redirection and basic SSRF attacks, several advanced bypass vectors remain open. First, the patch does not perform IP-level validation prior to initiating the HTTP request. This allows private IP DNS mapping, where an attacker maps a wildcard subdomain of their registered registry (e.g., local.evil-registry.com) directly to 127.0.0.1 or 10.0.0.1. Since both the registry and the realm share the registrable domain evil-registry.com, validation passes, and the internal service is queried.

Second, the system is vulnerable to DNS Rebinding attacks. An attacker can set a low TTL on their registry DNS record, resolving to a benign public IP during validation, but changing to an internal system IP immediately before BBOT executes the HTTP request. Lastly, because the validator checks domains but does not restrict port numbers, an attacker can specify alternate ports (such as registry.domain:22 or registry.domain:8080) to conduct internal port scanning.

Detection & Remediation Guidance

To fully address this vulnerability, administrators and security engineers must upgrade BBOT to version 2.8.5 or higher. In environments where patching cannot be immediately completed, administrators should enforce network isolation for active scanner nodes.

Scanner instances must be deployed in an isolated Virtual Private Cloud (VPC) with firewall egress rules that strictly block traffic to RFC 1918 networks, the loopback interface, and link-local addresses (such as 169.254.169.254). For cloud instances running on AWS, enforce IMDSv2 and configure the hop limit to 1 to block unauthorized containerized requests to metadata endpoints.

Security teams can monitor SIEM or proxy logs for outbound connections from BBOT instances that target local endpoints immediately following HTTP 401 authentication exchanges. Network detection tools should flag any connections to non-standard ports (such as 22, 3306, or 8080) originating from the Docker pull automation module.

Official Patches

Black Lantern SecurityFix commit implementing validation checks for auth realm domains

Fix Analysis (1)

Technical Appendix

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

Affected Systems

Black Lantern Security BBOT (docker_pull module)

Affected Versions Detail

Product
Affected Versions
Fixed Version
BBOT
Black Lantern Security
>= 2.0.0, <= 2.8.42.8.5
AttributeDetail
CWE IDCWE-918
Attack VectorNetwork
CVSS v3.1 Score3.1 (Low)
EPSS Score0.00167
ImpactLow-severity information disclosure and Server-Side Request Forgery
Exploit Statusnone
KEV StatusNot Listed

MITRE ATT&CK Mapping

T1190Exploit Public-Facing Application
Initial Access
T1005Data from Local System
Collection
CWE-918
Server-Side Request Forgery (SSRF)

The web server receives a URL or similar request from an upstream server or client and retrieves the contents of this URL without sufficiently validating that the target is safe or intended.

Vulnerability Timeline

Official security patch developed and committed to the BBOT repository by liquidsec.
2026-06-15
Vulnerability officially assigned and published as CVE-2026-12566.
2026-06-17
National Vulnerability Database (NVD) publishes baseline CVSS vectors and assessment.
2026-06-18

References & Sources

  • [1]BBOT Git Commit Patch
  • [2]CVE-2026-12566 Record on CVE.org
  • [3]NVD Vulnerability Detail Database Entry
  • [4]CWE-918: Server-Side Request Forgery

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

•11 minutes ago•CVE-2026-63128
7.5

CVE-2026-63128: Uncontrolled Resource Consumption in Model Context Protocol Rust SDK (rmcp)

CVE-2026-63128 is a high-severity uncontrolled resource consumption vulnerability in the Model Context Protocol (MCP) official Rust SDK (the rmcp crate) prior to version 2.0.0. An unauthenticated attacker can exploit this vulnerability by sending malformed or mismatching handshake requests to the stateful Streamable HTTP server, causing persistent memory allocation without cleanup. This results in an unbounded memory leak and lock contention that ultimately leads to complete denial of service.

Amit Schendel
Amit Schendel
1 views•6 min read
•about 1 hour ago•CVE-2026-63671
8.1

CVE-2026-63671: Cross-Site Scripting (XSS) Sanitizer Bypass in @nuxtjs/mdc

A cross-site scripting (XSS) vulnerability was identified in @nuxtjs/mdc prior to version 0.22.1. Gaps in the HTML/SVG attribute verification and URL protocol parsing allow unauthenticated remote attackers to bypass the application's sanitization routines. By embedding malicious SVG links or data-encoded iframe elements within Markdown, attackers can execute arbitrary JavaScript in the victim's browser context.

Amit Schendel
Amit Schendel
3 views•6 min read
•about 2 hours ago•CVE-2026-58657
6.5

CVE-2026-58657: Stored CSS Injection in Grav CMS Media Resize Parser

CVE-2026-58657 is a critical stored CSS injection vulnerability in Grav CMS's media processing pipeline. By exploiting improper sanitization of image dimensions in the resize helper, low-privileged users with page editing permissions can inject arbitrary CSS styles. This can lead to visual defacement, UI redressing, and indirect data exfiltration.

Alon Barad
Alon Barad
2 views•4 min read
•about 3 hours ago•CVE-2026-61709
5.3

CVE-2026-61709: Improper Policy Enforcement and Exclusion Bypass in OpenFGA ListUsers API

An authorization-decision over-inclusion vulnerability exists in the OpenFGA authorization engine. The flaw manifests within the `ListUsers` API evaluation path when evaluating complex relationship intersections containing exclusions. Under certain configurations involving wildcards, the exclusion is bypassed, leading to incorrect permission lists.

Alon Barad
Alon Barad
8 views•7 min read
•about 4 hours ago•CVE-2026-61594
9.1

CVE-2026-61594: Authorization Bypass on WebSocket and SSE Mount Paths in djust

An authorization bypass vulnerability exists in the djust framework (djust-org/djust) prior to version 1.0.7. The framework fails to enforce standard Django view-level authorization mechanisms, such as AccessMixins or dispatch decorators, when mounting reactive views over stateful transport layers (WebSockets and Server-Sent Events). Unauthenticated or low-privileged attackers can establish persistent connections to mount arbitrary protected views and execute state-changing event handlers.

Amit Schendel
Amit Schendel
8 views•7 min read
•about 5 hours ago•CVE-2026-61560
9.8

CVE-2026-61560: Unauthenticated Remote Path Traversal and Access Token Exfiltration in @zereight/mcp-gitlab

CVE-2026-61560 is a critical security vulnerability in the @zereight/mcp-gitlab Server-Sent Events (SSE) server. By utilizing default, unauthenticated route setups and exposing vulnerable administrative tools, remote attackers can execute path traversal attacks to read internal process variables and hijack GitLab operations.

Amit Schendel
Amit Schendel
4 views•8 min read