broker
A Kafka 3.9.0 broker running in KRaft mode, providing the messaging backbone for the lab. It formats storage and starts the broker using entrypoint-broker.sh.
CVE-2025-27818/docker-compose.yml:8-24CVE-2025-27818/entrypoint-broker.sh:1-14File viewing is interactive and short-lived. Downloads are password-protected ZIP archives using password eip.
The artifact contains Python scripts that test for CVE-2025-27818 by sending connector configurations to the Kafka Connect REST API and observing whether the LdapLoginModule is accepted or blocked. The primary script (poc.py) performs a differential test, creating connectors with JndiLoginModule and LdapLoginModule to check the denylist status. The scripts do not deliver a payload or achieve code execution; they only detect and report the vulnerability's presence.
No backdoor observed in reviewed code
The PoC demonstrates a legitimate CVE-2025-27818 vulnerability exploit against Apache Kafka Connect. All scripts and modules perform only the documented attack chain: creating connectors with specific JAAS configurations to test denylist bypass and trigger outbound LDAP connections. No concealed backdoor, credential theft, persistence, or unrelated payload delivery was observed in the reviewed text evidence.
The primary artifact (poc.py) creates connectors to test whether LdapLoginModule is blocked by the JAAS denylist. It does not deliver a malicious LDAP response, execute a deserialization gadget chain, or achieve code execution. Its stated purpose is a 'Differential Test' to confirm the denylist bypass, which is detection/validation behavior consistent with a scanner.
poc/poc.py:19-28poc/poc.py:283-295README.md:23-24README.md:14poc/poc.py:102-122poc/poc.py:135-163poc/poc.py:296-316poc/poc.py:55poc/poc_vector2.py:65poc/OutboundLdapModule.java:30-70CVE-LAB.md:23-24This review is limited to the supplied PoC code and context. It does not assert that the code works or is safe to execute.
A Docker Compose lab for CVE-2025-27818, an Apache Kafka Connect LdapLoginModule denylist bypass vulnerability. It defines two services (broker and vulnerable) built from a single Dockerfile that installs Kafka 3.9.0, and includes PoC scripts to demonstrate the bypass.
CVE-2025-27818/docker-compose.yml:1-56CVE-2025-27818/Dockerfile.vulnerable:1-48CVE-2025-27818/README.md:1-215The README explicitly describes the environment as a 'CVE-2025-27818 Lab' for demonstrating a denylist bypass in Apache Kafka Connect. The Docker Compose file and Dockerfile build a vulnerable Kafka 3.9.0 instance, and multiple PoC scripts are provided to exercise the vulnerability.
CVE-2025-27818/README.md:1-3CVE-2025-27818/docker-compose.yml:1-3CVE-2025-27818/Dockerfile.vulnerable:1-3A Kafka 3.9.0 broker running in KRaft mode, providing the messaging backbone for the lab. It formats storage and starts the broker using entrypoint-broker.sh.
CVE-2025-27818/docker-compose.yml:8-24CVE-2025-27818/entrypoint-broker.sh:1-14A Kafka Connect 3.9.0 distributed worker exposing the REST API on port 8083. It is configured with connector.client.config.override.policy=All, allowing SASL JAAS config overrides that are exploited by the PoC.
CVE-2025-27818/docker-compose.yml:26-50CVE-2025-27818/connect-distributed.properties:31-33A Python script that creates two connectors via the REST API—one with JndiLoginModule (expected blocked) and one with LdapLoginModule (expected accepted)—to demonstrate the incomplete denylist.
CVE-2025-27818/poc/poc.py:1-329A Python script that starts an LDAP listener and creates a connector using a custom OutboundLdapModule to trigger an outbound LDAP connection from the Connect worker, demonstrating the SSRF-to-deserialization path.
CVE-2025-27818/poc/poc_vector2.py:1-287A Python script that tests all three SASL JAAS override prefixes (producer.override, consumer.override, admin.override) to confirm each accepts LdapLoginModule.
CVE-2025-27818/poc/poc_vector3.py:1-270A pre-compiled JAR copied into the Docker image at /opt/kafka/libs/outbound-ldap-module.jar. Used by poc_vector2.py to make outbound LDAP connections. BINARY—behavior not inspected.
CVE-2025-27818/Dockerfile.vulnerable:33A pre-compiled JAR copied into the Docker image at /opt/kafka/libs/shared-state-module.jar. Described as a helper module not used in the final PoC. BINARY—behavior not inspected.
CVE-2025-27818/Dockerfile.vulnerable:34Supported by supplied evidence
The entire lab is built around CVE-2025-27818. The README, PoC scripts, and verification report all describe the LdapLoginModule denylist bypass in Kafka Connect 3.9.0, and the Docker Compose file deploys the vulnerable version.
CVE-2025-27818/README.md:1-3CVE-2025-27818/poc/poc.py:1-5CVE-2025-27818/poc_verification_report.md:1-3CVE-2025-27818/README.md:88-90CVE-2025-27818/README.md:107CVE-2025-27818/README.md:88-95CVE-2025-27818/README.md:88-90CVE-2025-27818/README.md:92-93CVE-2025-27818/README.md:95CVE-2025-27818/README.md:113-123CVE-2025-27818/README.md:97All visible behavior is directed at the lab's own target (the Kafka Connect worker). The PoC scripts interact only with the lab's REST API on localhost:8083 and start a local LDAP listener. The Docker Compose file uses a standard bridge network, no privileged mode, no host filesystem mounts, and no credential theft or persistence mechanisms. The outbound LDAP connection in Vector 2 is an expected demonstration of the vulnerability and targets a listener started by the PoC itself.
CVE-2025-27818/docker-compose.yml:1-56CVE-2025-27818/poc/poc_vector2.py:1-287This review is limited to the supplied lab evidence packet. It does not assert that the environment runs, reproduces a vulnerability, or is safe to execute. Contract: eip-docker-lab-analysis-v1.
Packet coverage: 2 binary files not inspected
A Docker Compose environment for testing CVE-2025-27818, a denylist bypass in Apache Kafka Connect. It deploys a patched Kafka 3.9.1 broker and a patched Kafka Connect worker, intended to verify that the LdapLoginModule fix is effective or to test bypass techniques against the patched version.
CVE-2025-27818/docker-compose.patched.yml:1-4CVE-2025-27818/Dockerfile.patched:1-5The environment is explicitly labeled as a lab for CVE-2025-27818, includes a patched Kafka version, and provides PoC scripts to test the vulnerability. The README and verification report describe the vulnerability, attack chain, and lab usage.
CVE-2025-27818/README.md:1-3CVE-2025-27818/docker-compose.patched.yml:1-4A single-node Kafka broker and controller running Kafka 3.9.1 in KRaft mode. It formats storage and starts the broker, providing the messaging backbone for the Connect worker.
CVE-2025-27818/docker-compose.patched.yml:10-28CVE-2025-27818/entrypoint-broker-patched.sh:1-14A distributed Kafka Connect worker running Kafka 3.9.1. It exposes the REST API on port 8083, waits for the broker to be healthy, and starts with a configuration that allows all connector config overrides (the attack vector).
CVE-2025-27818/docker-compose.patched.yml:30-55CVE-2025-27818/entrypoint-connect-patched.sh:1-15CVE-2025-27818/connect-distributed-patched.properties:33-34Three Python scripts (poc.py, poc_vector2.py, poc_vector3.py) that test the denylist bypass by creating connectors with LdapLoginModule via the Connect REST API. They are standalone and use only the Python standard library.
CVE-2025-27818/README.md:120-145CVE-2025-27818/poc/poc.py:1-30Supported by supplied evidence
The entire lab is built around CVE-2025-27818. The README, verification report, and PoC scripts explicitly describe the vulnerability, the incomplete denylist, and the attack chain. The patched Dockerfile and Compose file are designed to test the fix.
CVE-2025-27818/README.md:1-3CVE-2025-27818/poc_verification_report.md:1-10CVE-2025-27818/README.md:107-110CVE-2025-27818/README.md:120-122CVE-2025-27818/docker-compose.patched.yml:38-39CVE-2025-27818/docker-compose.patched.yml:5-6CVE-2025-27818/docker-compose.patched.yml:7CVE-2025-27818/docker-compose.patched.yml:8CVE-2025-27818/README.md:120-122CVE-2025-27818/README.md:130-145CVE-2025-27818/docker-compose.patched.yml:9All visible behavior is directed at the contained lab target. The PoC scripts interact only with the Connect REST API inside the Docker network. The Compose file maps port 8083 to the host, which is a standard lab requirement for accessing the API. No host escape, persistence, credential theft, or external connections beyond the documented lab are observed.
CVE-2025-27818/docker-compose.patched.yml:38-39CVE-2025-27818/poc/poc.py:1-30This review is limited to the supplied lab evidence packet. It does not assert that the environment runs, reproduces a vulnerability, or is safe to execute. Contract: eip-docker-lab-analysis-v1.