PoC files

14 files

File viewing is interactive and short-lived. Downloads are password-protected ZIP archives using password eip.

GitHub

Analysisdeepseek-v4-pro:cloud ·

Technical assessment

The artifact contains a full exploit orchestrator (poc/poc.py) and a Java exploit (poc/ExploitCVE202532897.java) that demonstrate insecure deserialization in Apache Seata by directly calling vulnerable methods to achieve arbitrary class loading and JNDI injection, which are exploitation behaviors.

Backdoor review

No backdoor observed in reviewed code

The PoC demonstrates CVE-2025-32897 deserialization vulnerabilities in Apache Seata. All code (Java exploit, Python orchestrators) targets the stated vulnerability vectors (CustomDeserializer, RaftSnapshotSerializer, RaftSyncMessageSerializer) and performs only expected exploit behavior: arbitrary class loading, JNDI injection attempts, and unrestricted deserialization. No concealed backdoor, credential theft, persistence, or unrelated payload delivery was observed.

ClassificationExploit
Model confidence98%
AuthenticationNot required
LanguagesPythonJava
Target softwareApache Seata
Attack typesInsecure DeserializationRemote Code ExecutionJNDI Injection
Evidence & reasoningClassification basis · observed behavior · safety review
Technical evidence

Classification basis and observed behavior

Classification basis

The primary artifact is classified as an exploit because it contains code that exercises the vulnerability to achieve a malicious effect (arbitrary class loading and JNDI injection) rather than merely detecting it. The Java class ExploitCVE202532897 directly calls vulnerable methods to load arbitrary classes and trigger JNDI lookups, and the Python orchestrator deploys and runs this exploit.

poc/ExploitCVE202532897.java:88-216poc/ExploitCVE202532897.java:238-357poc/poc.py:12-36poc/poc.py:165-203

Requirements

  • Requires a running Docker container with the vulnerable Apache Seata 2.2.0 instance.poc/poc.py:51poc/poc.py:220-228
  • Requires Docker CLI access to execute commands inside the container.poc/poc.py:35poc/poc.py:96-99

Observed behavior

  • Deploys a Java exploit into the vulnerable Docker container and compiles it.poc/poc.py:165-192
  • Starts a TCP callback listener to catch JNDI connection attempts from the exploit.poc/poc.py:106-158poc/poc.py:261-265
  • Executes the Java exploit inside the container, which directly calls vulnerable Seata methods (JacksonSerializer.deserialize, RaftSnapshotSerializer.decode) to trigger arbitrary class loading and JNDI injection.poc/ExploitCVE202532897.java:88-216poc/ExploitCVE202532897.java:238-357poc/poc.py:195-203poc/poc.py:272-276
  • Constructs a Java serialized HashMap payload entirely in Python and passes it to the vulnerable RaftSnapshotSerializer.decode() method inside the container.poc/poc_vector2.py:65-141poc/poc_vector2.py:178-219
Safety-review evidence

Behaviors behind the backdoor verdict

Observables

Exploit Behavior
Java exploit loads arbitrary classes via Class.forName() and attempts JNDI injectionMatches the described CVE-2025-32897 vulnerability vectors; no unrelated actionspoc/ExploitCVE202532897.java:88-216
Exploit Behavior
Python orchestrator deploys Java exploit into Docker container and runs itStandard PoC orchestration for containerized lab environment; no hidden commandspoc/poc.py:165-203
Exploit Behavior
Python-crafted Java serialized HashMap payload sent to RaftSnapshotSerializer.decode()Demonstrates unrestricted deserialization vector; payload is benign HashMappoc/poc_vector2.py:65-141
Exploit Behavior
Vector 3 PoC demonstrates whitelist bypass via body field in RaftSyncMessageSerializerShows architectural bypass of PERMITS whitelist; no malicious payload executionpoc/poc_vector3.py:58-157
Review boundaries

What the analysis did not establish

  • The evidence packet reports complete_artifact_coverage as false, indicating that not all files from the artifact were included in the analysis.
  • The exploit code is executed inside a Docker container via 'docker exec' and does not demonstrate a network-based attack against the SOFABolt protocol.
  • Binary files (1 non-text media file, 6 unclassified files) were not analyzed; their content is unknown.
  • The review is limited to the supplied text evidence and does not verify runtime behavior or network traffic.
Model interpretation

This review is limited to the supplied PoC code and context. It does not assert that the code works or is safe to execute.

Docker lab environments

1
GitHub

CVE-2025-32897/docker-compose.yml

Created
Vuln labCVE-2025-32897Compose · builds

1 Compose manifest · 1 Dockerfile · 1 service

Lab screenshot for CVE-2025-32897/docker-compose.yml
Analysisdeepseek-v4-pro:cloud ·

Environment assessment

A single-container Docker Compose lab for reproducing CVE-2025-32897, an insecure deserialization vulnerability in Apache Seata Server 2.2.0 Raft mode. The lab builds a vulnerable Seata server image, exposes its Raft port (9091) on host port 9191, and provides PoC scripts that demonstrate the vulnerability by executing Java code inside the container.

CVE-2025-32897/docker-compose.yml:1-35CVE-2025-32897/Dockerfile.vulnerable:1-15CVE-2025-32897/README.md:1-190

Lab assessment

Vulnerability lab

The environment is explicitly described as a lab for reproducing CVE-2025-32897. It includes a Docker Compose file that builds a vulnerable Seata server, a README with PoC usage instructions, and multiple PoC scripts that demonstrate the vulnerability by interacting with the container's internal Java classes.

CVE-2025-32897/docker-compose.yml:1-3CVE-2025-32897/README.md:1-3CVE-2025-32897/README.md:7-10
Lab shapeCompose · builds
Services1
Compose manifests1
Dockerfiles1
Evidence & reasoningComponents · CVE assessment · exercise context · review boundaries
Components

Services and files described by the evidence

vulnerable

vulnerable targetSeata server in Raft mode

A Docker service built from apache/seata-server:2.2.0 with a custom entrypoint that configures Raft mode. It exposes ports 7091 (HTTP console), 8091 (TC service), and 9091 (Raft) on host ports 7191, 8191, and 9191 respectively. The Raft port is the attack surface for the deserialization vulnerability.

CVE-2025-32897/docker-compose.yml:10-30CVE-2025-32897/Dockerfile.vulnerable:1-15CVE-2025-32897/entrypoint-raft.sh:1-67

entrypoint-raft.sh

configuration scriptRaft mode enabler

A shell script copied into the vulnerable image that detects the container IP, generates a Seata application.yml with Raft mode enabled, and then starts the original Seata entrypoint. It sets the Raft server address to the container's IP on port 9091.

CVE-2025-32897/entrypoint-raft.sh:1-67

poc.py

PoC orchestratorexploit deployment and execution

A Python script that deploys a Java exploit into the vulnerable container, starts a JNDI callback listener on the host, and runs the exploit to demonstrate arbitrary class loading and deserialization. It uses docker exec to interact with the container.

CVE-2025-32897/poc/poc.py:1-330

poc_vector2.py

PoC for RaftSnapshotSerializerPython-crafted payload

A Python script that constructs a Java serialized HashMap payload in Python, copies it into the container, and runs a Java test program that calls RaftSnapshotSerializer.decode() to demonstrate unrestricted deserialization.

CVE-2025-32897/poc/poc_vector2.py:1-264

poc_vector3.py

PoC for exception handling bypasswhitelist bypass demonstration

A Python script that deploys and runs a Java test program inside the container to demonstrate that the PERMITS whitelist in RaftSyncMessageSerializer can be bypassed via the body field processed by JacksonSerializer.

CVE-2025-32897/poc/poc_vector3.py:1-198

ExploitCVE202532897.java

Java exploitdirect method invocation

A Java class (not included in evidence text) that directly calls vulnerable Seata methods. It is compiled and executed inside the container by the PoC scripts.

CVE-2025-32897/README.md:100-103CVE-2025-32897/poc_verification_report.md:30-33
CVE assessment

How the supplied evidence relates each vulnerability

CVE-2025-32897

Supported by supplied evidence

The lab is explicitly built to demonstrate CVE-2025-32897. The README, PoC scripts, and verification report all describe insecure deserialization in Apache Seata Raft cluster components, matching the CVE description. The PoC scripts show successful arbitrary class loading and unrestricted deserialization inside the vulnerable container.

CVE-2025-32897/README.md:1-3CVE-2025-32897/README.md:7-10CVE-2025-32897/poc_verification_report.md:1-10CVE-2025-32897/poc_verification_report.md:15-20
Exercise context

Requirements and sequence described by the evidence

Prerequisites

  • Docker Engine with Docker Compose plugin must be installed on the host.CVE-2025-32897/README.md:55-56
  • The lab must be started with 'docker compose up -d' before running PoCs.CVE-2025-32897/README.md:60-62
  • Python 3 is required to run the PoC scripts.CVE-2025-32897/poc/poc.py:1
  • The Java exploit file (ExploitCVE202532897.java) must be present in the poc/ directory for poc.py to deploy it.CVE-2025-32897/poc/poc.py:150-155

Evidence-described exercise path

  1. Start the lab with 'docker compose up -d'.CVE-2025-32897/README.md:60-62
  2. Verify the lab is healthy by checking container status and Raft mode logs.CVE-2025-32897/README.md:70-80
  3. Run the primary PoC with 'python3 poc/poc.py' to deploy the Java exploit and execute all test vectors.CVE-2025-32897/README.md:105-107
  4. Optionally run individual vector PoCs: 'python3 poc/poc_vector2.py' for RaftSnapshotSerializer, 'python3 poc/poc_vector3.py' for exception handling bypass.CVE-2025-32897/README.md:130-140
  5. Optionally run the Java exploit manually inside the container using docker cp and docker exec.CVE-2025-32897/README.md:145-150
Safety-review evidence

Behaviors behind the stored safety assessment

No harmful behavior observed

All visible behavior is directed at the lab's own vulnerable container. The PoC scripts use docker exec to run Java code inside the container, which is expected for demonstrating the vulnerability. There is no evidence of host escape, external connections, persistence, credential theft, or destructive actions. The JNDI callback listener in poc.py binds to 0.0.0.0 on the host, but this is a necessary part of the PoC to catch JNDI connection attempts from the container, and it is explicitly documented.

CVE-2025-32897/poc/poc.py:100-130CVE-2025-32897/poc/poc.py:200-220CVE-2025-32897/poc/poc.py:250-270
Review boundaries

What the analysis did not establish

  • The Java exploit file ExploitCVE202532897.java is not included in the evidence text, so its exact behavior cannot be inspected.
  • The PoC scripts rely on docker exec and docker cp, which require Docker CLI access; the safety assessment assumes these are used as documented.
  • The lab uses host port mappings (7191, 8191, 9191) which expose the container's services to the host network, but this is a standard lab requirement.
Model interpretation

This 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.

Linked vulnerabilities

2