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

CVE-2026-11745: Host Key Verification Bypass in Central Dogma Git Mirror SSH Client

Amit Schendel
Amit Schendel
Senior Security Researcher

Sep 11, 2026·7 min read·22 visits

Executive Summary (TL;DR)

Central Dogma versions prior to 0.84.0 fail to verify SSH host keys during Git mirror processes. This vulnerability enables adjacent or on-path attackers to perform Man-in-the-Middle attacks, allowing them to exfiltrate configurations or introduce malicious commits.

An issue was identified in Central Dogma prior to version 0.84.0. The Git mirror SSH client does not verify remote host keys for git+ssh:// connections, which allows an on-path attacker to execute man-in-the-middle attacks and compromise mirrored repositories.

Vulnerability Overview

Central Dogma is an open-source, highly-available configuration repository based on Git, ZooKeeper, and HTTP/2. It serves as a centralized config management platform, pulling external application definitions via Git mirroring and distributing them to downstream microservices. Organizations rely on Central Dogma to securely store and dynamically sync sensitive parameters including access tokens, private database connection URIs, and API credentials.

The vulnerability is located within the centraldogma-server-mirror-git library, which handles synchronization with remote Git repositories over Git-over-SSH (git+ssh://). In affected versions, the custom Apache MINA SSHD SSH client implementation bypasses host key checks entirely. This exposes the outbound communication channel to intercept threats whenever Central Dogma triggers synchronization events.

The underlying security defect belongs to the Key Exchange without Entity Authentication class (CWE-322). Because Central Dogma trusts any server key presented during the SSH handshake, an on-path network attacker can successfully impersonate the target Git host. This architectural vulnerability compromises the transport layer security guarantee provided by SSH.

Root Cause Analysis

The root cause of this vulnerability lies in how the Git mirror SSH client initializes its session validation rules. During the cryptographic negotiation phase of the SSH connection, the remote server presents its public key. In standard SSH clients, this key is matched against a local registry of known and verified public keys, typically stored in the ~/.ssh/known_hosts file.

In Central Dogma versions prior to 0.84.0, the SshGitMirror client, defined inside the file server-mirror-git/src/main/java/com/linecorp/centraldogma/server/internal/mirror/SshGitMirror.java, overrides this default protection model. The client initialization code configures the Apache MINA SSHD builder to bypass filesystem-based host config files. It explicitly disables the parsing of local config files and restricts access to the standard host registry files.

Crucially, the implementation registers a custom ServerKeyVerifier lambda that unconditionally returns a boolean value of true. By doing so, the state engine of the SSH connection is directed to accept any host key presented during the key exchange. Because no secondary verification mechanism, such as a localized fingerprint lookup, was built into the client, the host identity verification flow is fully disabled.

Code-Level Analysis and Patch Walkthrough

To understand the implementation flaw, look at the vulnerable initialization method createSshClient() in SshGitMirror.java before version 0.84.0:

private SshClient createSshClient() {
    final ClientBuilder builder = ClientBuilder.builder();
    // Do not use local file system.
    builder.hostConfigEntryResolver(HostConfigEntryResolver.EMPTY);   // Line 146
    builder.fileSystemFactory(NoneFileSystemFactory.INSTANCE);        // Line 147
    // Do not verify the server key.
    builder.serverKeyVerifier((clientSession, remoteAddress, serverKey) -> true);  // Line 149
    ...
}

In this vulnerable architecture, lines 146 and 147 eliminate local operating system configuration fallbacks. Line 149 registers the blind verification callback, which returns true for all sessions, regardless of the values of remoteAddress or serverKey.

The fix, introduced in commit c5371ab2c6535eb118f62a5251f23423d4edc528, replaces the blind trust lambda with an iterative verification sequence that validates against a pre-configured list of approved fingerprints:

// Retrieve acceptable fingerprints from the plugin configurations
final List<String> acceptedHostKeys = getAcceptedHostKeys();
builder.serverKeyVerifier((clientSession, remoteAddress, serverKey) -> {
    // Extract the SHA-256 fingerprint of the presented key
    final String fingerprint = KeyUtils.getFingerPrint(BuiltinDigests.sha256, serverKey);
    for (String accepted : acceptedHostKeys) {
        if (fingerprint.equals(accepted)) {
            return true;
        }
    }
    if (!acceptedHostKeys.isEmpty() && warnedAddresses.add(remoteAddress)) {
        logger.warn("Host key verification failed for {} (fingerprint: {}).",
                    remoteAddress, fingerprint);
    }
    // If acceptedHostKeys is empty, fall back to true (Fail-Open Warning)
    return acceptedHostKeys.isEmpty();
});

While the patch implements a lookup validation loop, a residual vulnerability condition exists. If the administrator does not define a list of accepted host keys inside the mirroring service configuration, the code returns acceptedHostKeys.isEmpty(), which evaluates to true. This results in a fail-open execution model where unconfigured servers remain exposed to MITM exploits, accompanied only by a warning in the application logs.

Vulnerability Flow Visualization

The flow charts below compare the insecure default verification logic in affected versions against the cryptographic verification logic introduced in the patched versions.

Insecure Outbound Connection Flow (Pre-0.84.0)

Patched Fingerprint Check Flow (0.84.0+)

Exploitation Methodology

Exploitation of CVE-2026-11745 requires the adversary to occupy an on-path network position. This position is typically achieved via local network vector manipulation, such as DNS spoofing, ARP cache poisoning, BGP path manipulation, or container network interface (CNI) compromise within a Kubernetes cluster.

Once adjacent positioning is established, the attacker configures an automated listening script to intercept outbound TCP port 22 connections from the Central Dogma server. A sample exploit handler using Python's paramiko library can be constructed as follows:

import socket
import paramiko
 
# Generate a random local SSH host key to present to Central Dogma
HOST_KEY = paramiko.RSAKey.generate(2048)
 
class MitmSSHHandler(paramiko.ServerInterface):
    def check_auth_publickey(self, username, key):
        print(f"[+] Credential Captured - Username: {username}")
        print(f"[+] Key Material: {key.get_base64()}")
        return paramiko.AUTH_SUCCESSFUL
 
    def check_channel_request(self, kind, chanid):
        return paramiko.OPEN_SUCCEEDED if kind == 'session' else paramiko.OPEN_FAILED_ADMINISTRATIVELY_PROHIBITED
 
transport = paramiko.Transport(socket.socket())
transport.add_server_key(HOST_KEY)
transport.start_server(server=MitmSSHHandler())

When Central Dogma initiates its scheduled Git mirroring routine, the client attempts to establish a connection with the target domain. The connection is redirected to the attacker's listener due to the poisoned routing table. Because the validation layer returns true for any key, Central Dogma continues with the SSH negotiation and submits authentication credentials to the rogue listener. The adversary successfully extracts the authentication data or injects modified commits during the subsequent repository pull phase.

Impact Assessment

The operational impact of this vulnerability is critical. Central Dogma's role as a trusted distribution point for application secrets and parameters means that any compromise of its upstream Git mirrors propagates throughout the environment. An attacker who successfully establishes a Man-in-the-Middle position can gain unauthorized control over core operational metadata.

First, attackers can read the contents of the mirrored repositories, exposing highly sensitive deployment keys, proprietary algorithms, database configurations, and infrastructure blueprints. This constitutes a severe loss of system confidentiality (VC:H, SC:H).

Second, attackers can inject modified configurations directly into the Central Dogma service pipeline. Because downstream microservices dynamically monitor Central Dogma via watch APIs, these malicious updates are automatically consumed at runtime. An attacker can use this supply chain manipulation vector to reconfigure active applications, disable safety mechanisms, or redirect backend database connections to external rogue services, causing severe systemic compromise (VI:H, SI:H).

Remediation and Detection

To fully remediate CVE-2026-11745, system administrators must complete two distinct operations. Simply upgrading the binary package without configuring active fingerprints leaves the application in an insecure, fail-open state.

First, update the server dependencies to version 0.84.0 or higher within your dependency management configuration. This integrates the fingerprint comparison validation code:

// Gradle build definition
implementation("com.linecorp.centraldogma:centraldogma-server:0.84.0")

Second, explicitly populate the trustedHostKeys parameters in the server configuration file (dogma.json). This step disables the fail-open fallback behavior. Obtain the target fingerprint by querying your source repository host directly:

ssh-keyscan github.com 2>/dev/null | ssh-keygen -lf - -E sha256

Define the resulting fingerprints in the MirroringServicePluginConfig block:

{
  "pluginConfigs": [
    {
      "type": "com.linecorp.centraldogma.server.mirror.MirroringServicePluginConfig",
      "enabled": true,
      "trustedHostKeys": {
        "github.com": [
          "SHA256:+DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvHdkr4UvCOqU",
          "SHA256:uNiVztksCsDhcc0u9e8BujQXVUpKZIDTMczCvj3tD2s"
        ]
      }
    }
  ]
}

Additionally, configure log monitoring pipelines to detect potential unconfigured instances. Set up alerts for the following log signature, which indicates that host verification is disabled:

No 'trustedHostKeys' configured in the mirroring service plugin config. SSH mirror connections will accept any host key without verification.

Fix Analysis (3)

Technical Appendix

CVSS Score
8.8/ 10
CVSS:4.0/AV:A/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:N/SC:H/SI:H/SA:L
EPSS Probability
0.22%
Top 88% most exploited

Affected Systems

Central Dogma Servercentraldogma-server-mirror-git

Affected Versions Detail

Product
Affected Versions
Fixed Version
centraldogma-server-mirror-git
LY Corporation
< 0.84.00.84.0
AttributeDetail
CWE IDCWE-322
Attack VectorAdjacent Network
CVSS v4.0 Score8.8
EPSS Score0.00219
EPSS Percentile12.34%
Exploit Statuspoc
CISA KEV StatusNot Listed

MITRE ATT&CK Mapping

T1557Adversary-in-the-Middle
Credential Access
T1557.006Adversary-in-the-Middle: DHCP Spoofing / DNS Poisoning
Credential Access
T1195.002Supply Chain Compromise: Software Distribution
Initial Access
CWE-322
Key Exchange without Entity Authentication

The software performs a key exchange or cryptographic negotiation without verifying the identity of the other party, allowing an attacker to impersonate a legitimate entity.

Vulnerability Timeline

Vulnerability identified during codebase security review
2026-05-15
Proof-of-Concept verification completed successfully
2026-05-21
Official remediation patch merged and Central Dogma 0.84.0 released
2026-06-19
CVE-2026-11745 published on CVE.org and NVD
2026-06-22

References & Sources

  • [1]GitHub Security Advisory GHSA-vjfw-cpmh-xwv3
  • [2]NVD - CVE-2026-11745
  • [3]Central Dogma Setup & Mirroring Documentation

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

•16 minutes ago•CVE-2026-105749
6.5

CVE-2026-105749: Unbounded Table Attributes in Docling Backends Leads to Resource Exhaustion

An uncontrolled resource consumption vulnerability exists in the Docling document conversion library. Maliciously structured HTML, JATS, ODS, or BoxNote inputs containing table cells with excessively large 'rowspan' or 'colspan' attribute values trigger algorithmic complexity conditions. This allows unauthenticated remote attackers to initiate resource exhaustion states, crashing or hanging the target document processing pipeline while bypassing configured timeouts.

Amit Schendel
Amit Schendel
0 views•6 min read
•about 1 hour ago•CVE-2026-105748
4.3

CVE-2026-105748: Local File Inclusion and Arbitrary File Disclosure in Docling Document Parser

A Local File Inclusion (LFI) and Arbitrary File Disclosure vulnerability exists in Docling and Docling Slim versions >= 2.16.0 up to 2.131.0. When parsing serialized DoclingDocument structures using the JSON input format, the backend fails to restrict image URI schemes, allowing remote attackers to retrieve local files and verify path existence on the host system during embedded document export.

Amit Schendel
Amit Schendel
3 views•5 min read
•about 2 hours ago•CVE-2026-105744
7.5

CVE-2026-105744: Arbitrary File Read and Remote Code Execution in Docling Tectonic Engine

Docling, a tool for parsing and processing diverse document formats, is vulnerable to arbitrary file read, arbitrary file write, and potential remote code execution (RCE) in versions 2.94.0 through 2.131.0. The vulnerability occurs when applications configure Docling to use the Tectonic engine for rendering TikZ diagrams into images. Because the compilation did not restrict hazardous TeX primitives or sandbox the environment, an attacker can supply crafted documents containing malicious TikZ definitions to access or modify local files and execute arbitrary commands under the privileges of the processing application.

Amit Schendel
Amit Schendel
4 views•7 min read
•about 3 hours ago•CVE-2026-105743
4.0

CVE-2026-105743: Server-Side Request Forgery Guard Bypass in Docling Document Conversion Engine

An SSRF guard bypass vulnerability in the Docling document conversion engine allows unauthenticated attackers to bypass internal IP access controls. The vulnerability exists due to a DNS rebinding Time-of-Check Time-of-Use (TOCTOU) condition, URL authority parsing inconsistencies, and unvalidated network requests triggered during headless browser page rendering.

Amit Schendel
Amit Schendel
4 views•6 min read
•about 4 hours ago•CVE-2026-105742
3.7

CVE-2026-105742: Sensitive Custom Header Leakage in Docling Image Resource Loader

A technical analysis of CVE-2026-105742 (GHSA-p3fw-7699-7926), a sensitive information disclosure vulnerability in the Docling document processing library. Vulnerable versions of Docling indiscriminately forward custom HTTP headers, such as authentication tokens, to arbitrary third-party origins and during cross-origin redirects while fetching remote image assets from untrusted HTML and EPUB documents.

Alon Barad
Alon Barad
5 views•6 min read
•about 5 hours ago•CVE-2026-106121
4.9

CVE-2026-106121: Denial of Service via Infinite Loop in RabbitMQ Java Client JSON Parser

CVE-2026-106121 is a Denial of Service (DoS) vulnerability in the RabbitMQ Java Client library (amqp-client) affecting versions prior to 5.37.0. The vulnerability resides in the legacy, custom JSON-RPC parsing class com.rabbitmq.tools.json.JSONReader. When parsing malformed or truncated payloads ending within a quoted string or single-line comment, the parser's scanner enters an infinite loop. This occurs because the loop lacks an exit condition for the end-of-input sentinel character returned by the iterator, leading to either CPU exhaustion or a JVM crash from an OutOfMemoryError.

Amit Schendel
Amit Schendel
7 views•6 min read