Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Submit
ToolsExploitsBlog
Submit

Hacking, PenTest, and Cybersecurity Tools for Your Security Arsenal!

Kitploit is a directory of hacking, cybersecurity, and pentesting tools. Discover the latest project updates to find vulnerabilities, analyze systems, automate testing, and strengthen your security.

FeedsContactPrivacy© 2026 Kitploit

Tool Directory

Categories

View all categories
Loading categories
CVE-2026-15911-Confluent_Kafka — Disabled TLS Certificate Verification for HashiCorp Vault KMS in confluent-kafka | Kitploit
Tools/GitHubGitHub/rahulreddykarne/cve-2026-15911-confluent_kafka
Defensive ToolsVulnerability AnalysisSecurity VirtualizationCryptographyCloud SecurityPapers & ResearchLearning & Education
GitHubrahulreddykarne/cve-2026-15911-confluent_kafka

Most Popular

View all →

Discover the most used tools by our community.

Explore all tools

Browse our collection of tools

View all tools →

CVE-2026-15911-Confluent_Kafka

Disabled TLS Certificate Verification for HashiCorp Vault KMS in confluent-kafka

View Repository
1 day agoNot yet reviewed
Share

CVE-2026-15911: Disabled TLS Certificate Verification for HashiCorp Vault KMS in confluent-kafka

Severity: High, CVSS 3.1 7.4

Vector (v3.1): CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N

Affected: confluent-kafka >= 2.8.0, <= 2.14.2

Fixed in: 2.15.0

CWE: CWE-295 (Improper Certificate Validation)

Component: confluent_kafka/schema_registry/rules/encryption/hcvault/hcvault_client.py

Reported by: Rahul Karne

CNA: VulnCheck


Summary

The HashiCorp Vault KMS client in confluent-kafka hardcodes verify=False when constructing its hvac.Client, disabling TLS certificate verification for Vault HTTPS connections made through the Schema Registry field-encryption rules.

The vulnerable code is located in:

confluent_kafka/schema_registry/rules/encryption/hcvault/hcvault_client.py

The affected client is initialized as follows:

self._client = hvac.Client(
    url=vault_url,
    token=token,
    namespace=ns,
    verify=False
)

Because verify=False is unconditional, the client accepts untrusted TLS certificates, including self-signed or attacker-controlled certificates.

A network-positioned attacker capable of intercepting or redirecting the application's Vault traffic can impersonate the Vault server, capture Vault authentication credentials, and return forged Vault/KMS responses.

The affected HCVault integration exposes configuration for Vault tokens, namespaces, and AppRole credentials, but affected versions provide no supported CA-bundle configuration or equivalent mechanism to restore certificate verification.


Impact

An attacker with a network man-in-the-middle position between the application and HashiCorp Vault can:

  1. Present an attacker-controlled or self-signed TLS certificate.
  2. Have that certificate accepted because verification is disabled.
  3. Capture Vault authentication material, including:
    • X-Vault-Token
    • AppRole role_id
    • AppRole secret_id
  4. Inject forged Vault responses.
  5. Interfere with KMS key-wrapping or key-unwrapping operations used by Schema Registry encryption rules.

This can compromise the confidentiality and integrity of data protected by the Vault-backed KMS workflow.


Reach

confluent-kafka is the official Confluent Python client for Apache Kafka.

The vulnerability specifically affects deployments using:

Schema Registry encryption rules
        ↓
HCVault KMS integration
        ↓
hcvault:// key URI

The affected population is therefore narrower than all confluent-kafka users.

However, the affected functionality is security-sensitive because these deployments rely on HashiCorp Vault for cryptographic key management and field-level encryption.


Technical Detail

HcVaultKmsClient.__init__() parses an hcvault:// key URI, determines the Vault base URL, and creates an hvac.Client.

In affected versions, including 2.14.2, the relevant code is:

self._client = hvac.Client(
    url=vault_url,
    token=token,
    namespace=ns,
    verify=False
)

if role_id and secret_id and self._client is not None:
    self._client.auth.approle.login(
        role_id=role_id,
        secret_id=secret_id
    )

The hvac library ultimately relies on the Python requests TLS stack.

Setting:

verify=False

instructs the client not to validate the remote server's TLS certificate.

As a result, certificates that would normally be rejected can be accepted, including certificates that are:

  • Self-signed
  • Expired
  • Issued for the wrong hostname
  • Signed by an untrusted authority
  • Generated by an attacker

This affects both supported authentication paths.

Token Authentication

When token authentication is used, the Vault token is sent through the:

X-Vault-Token

HTTP header.

If an attacker successfully impersonates the Vault endpoint, the attacker-controlled server can receive this token.

AppRole Authentication

When AppRole authentication is used, the client sends:

role_id
secret_id

to:

/v1/auth/approle/login

A successful MITM can therefore capture both AppRole credentials.


Missing TLS Configuration

The affected HCVault driver reads configuration including:

token.id
namespace
approle.role.id
approle.secret.id

as well as relevant VAULT_* environment variables.

However, affected versions do not expose configuration allowing operators to:

  • Provide a custom CA bundle.
  • Restore server-certificate verification.
  • Configure trusted private PKI roots.
  • Configure equivalent secure TLS verification behavior.

As a result, applications using the affected integration cannot restore TLS verification through the normal package configuration.


Root Cause

The package explicitly disables TLS server-certificate verification instead of relying on the secure default.

The vulnerable construction is effectively:

hvac.Client(..., verify=False)

rather than:

hvac.Client(..., verify=True)

or simply:

hvac.Client(...)

where verification is enabled by default.

Disabling certificate verification removes server authentication from the TLS connection.

Although the connection remains encrypted, the client has no reliable mechanism for determining whether it is communicating with the legitimate Vault server.

This creates the condition required for a network man-in-the-middle attack.


Exploitation Preconditions

Successful exploitation requires:

  1. The application uses an affected version of confluent-kafka:

    • 2.8.0 through 2.14.2.
  2. The application uses Schema Registry encryption rules with the HCVault KMS integration.

  3. The configured KMS key uses the:

hcvault://

scheme.

  1. The attacker obtains a network position capable of intercepting, redirecting, or impersonating traffic between the application and Vault.

Possible examples include:

  • DNS spoofing
  • ARP spoofing
  • Compromised network infrastructure
  • Rogue Wi-Fi or router infrastructure
  • Route/BGP manipulation
  • Malicious egress proxy
  • Compromised network segment

No application-level privileges or victim interaction are required once the necessary MITM position exists.


Proof of Concept

poc_confluent_kafka.py demonstrates the issue against a locally unpacked confluent-kafka 2.14.2 wheel.

The PoC uses:

  • A local self-signed HTTPS server simulating HashiCorp Vault.
  • Dummy Vault credentials.
  • The real vulnerable HcVaultKmsClient implementation.
  • No real Kafka infrastructure.
  • No real Vault infrastructure.
  • No production credentials.

The proof of concept contains five modes.

ModeDescription
certGenerates a self-signed certificate and key for the local mock Vault.
serverStarts the mock HTTPS Vault on https://localhost:8443 and displays received requests.
controlSecure control using verify=True; should reject the self-signed certificate with CERTIFICATE_VERIFY_FAILED.
tokenLoads the vulnerable HcVaultKmsClient and demonstrates that it accepts the untrusted certificate.
approleExercises the vulnerable AppRole authentication path and demonstrates exposure of role_id and secret_id.

Setup

Install the PoC dependencies:

pip install hvac cryptography

Place the unpacked vulnerable wheel next to the PoC:

confluent_kafka-2.14.2-cp310-cp310-win_amd64/
└── confluent_kafka/
    └── schema_registry/
        └── ...

The PoC imports HcVaultKmsClient directly from the unpacked 2.14.2 package.

It stubs unrelated dependencies such as tink, allowing the vulnerable Vault-client construction to be tested without requiring a complete Kafka or KMS environment.


Run

Use two terminals.

Terminal 1 — Start the Mock Vault

Download Tool