PoC files

24 files

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

GitHub

Analysisdeepseek-v4-pro:cloud ·

Technical assessment

Python 3 exploit for CVE-2025-60355, a FreeMarker SSTI vulnerability in OneBlog. The script authenticates to the admin interface, injects a malicious template, and triggers unauthenticated RCE via a public endpoint.

Backdoor review

No backdoor observed in reviewed code

The PoC for CVE-2025-60355 is a straightforward Python script that automates a documented SSTI-to-RCE exploit chain against OneBlog. It uses only the Python standard library to authenticate, inject a FreeMarker payload, trigger execution via an unauthenticated endpoint, and restore the original template. All network connections are directed to operator-supplied targets, and no hidden data exfiltration, unrelated payloads, or deceptive behavior is present.

ClassificationExploit
Model confidence100%
AuthenticationRequired
LanguagesPython
Target softwareOneBlog
Attack typesServer-Side Template Injection (SSTI)Remote Code Execution (RCE)
Evidence & reasoningClassification basis · observed behavior · safety review
Technical evidence

Classification basis and observed behavior

Classification basis

The primary artifact is poc/poc.py, a Python script that automates the full exploit chain: authentication, SSTI payload injection, and unauthenticated RCE trigger. The README and report describe it as a 'proof-of-concept' that 'demonstrates' and 'confirms' RCE. The code is intended to exercise the vulnerability, not merely detect it.

poc/poc.py:1-3poc/poc.py:269-277README.md:1-3poc_verification_report.md:1-3

Requirements

  • Valid credentials for the OneBlog admin interface with template:edit permission.poc/poc.py:60-61
  • Network access to the blog-admin service for template injection.poc/poc.py:330-331
  • Network access to the blog-web service to trigger the injected template.poc/poc.py:332-333

Observed behavior

  • Authenticates to the blog-admin service using hardcoded credentials.poc/poc.py:88-142
  • Injects a FreeMarker SSTI payload into the TM_ROBOTS template via an HTTP POST request.poc/poc.py:145-195
  • Triggers the injected template by making an unauthenticated GET request to /robots.txt, causing the server to execute the injected OS command.poc/poc.py:198-232
  • Restores the original template content after exploitation.poc/poc.py:235-266
Safety-review evidence

Behaviors behind the backdoor verdict

Observables

Network Connection
http.client.HTTPConnection(admin_host, admin_port)The PoC connects to operator-supplied admin_host and admin_port for authentication and template injection.poc/poc.py:98
Network Connection
http.client.HTTPConnection(web_host, web_port)The PoC connects to operator-supplied web_host and web_port to trigger the RCE.poc/poc.py:212
Payload
<#assign ex="freemarker.template.utility.Execute"?new()>${ex("{cmd}")}The SSTI payload is a standard FreeMarker RCE vector that executes the operator-supplied command on the target server.poc/poc.py:67
Review boundaries

What the analysis did not establish

  • Evidence does not include the bypass_poc.py script mentioned in the documentation.
  • Evidence does not include the Dockerfiles or docker-compose files for the lab environment.
  • The analysis is based solely on the provided text files; no code was executed.
  • One non-text media file (27624 bytes) and 19 unclassified files (149952 bytes) were not analyzed; their content is unknown.
  • The bypass_poc.py script mentioned in documentation was not included in the supplied text evidence.
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

3
GitHub

CVE-2025-60355

Created
Vuln labCVE-2025-60355Standalone Multiple Dockerfiles

4 Dockerfiles

Lab screenshot for CVE-2025-60355
Analysisdeepseek-v4-pro:cloud ·

Environment assessment

A Docker-based lab for CVE-2025-60355, a FreeMarker SSTI vulnerability in OneBlog. It provides Dockerfiles to build vulnerable (v2.3.8) and claimed-patched (v2.3.9) versions of the blog-admin and blog-web services, along with a PoC script and documentation.

CVE-2025-60355/README.md:1-283CVE-2025-60355/Dockerfile.admin-patched:1-15CVE-2025-60355/Dockerfile.builder:1-9CVE-2025-60355/Dockerfile.builder-patched:1-9CVE-2025-60355/Dockerfile.web-patched:1-15

Lab assessment

Vulnerability lab

The packet contains Dockerfiles, a PoC script, and documentation specifically designed to reproduce and demonstrate CVE-2025-60355, a FreeMarker SSTI vulnerability in OneBlog. The README explicitly describes it as a lab setup for this CVE.

CVE-2025-60355/README.md:1-3CVE-2025-60355/README.md:55-60
Lab shapeStandalone Multiple Dockerfiles
ServicesUnknown
Compose manifests0
Dockerfiles4
Evidence & reasoningComponents · CVE assessment · exercise context · review boundaries
Components

Services and files described by the evidence

Dockerfile.admin-patched

builds the patched blog-admin service image

A multi-stage Dockerfile that clones OneBlog v2.3.9 source, builds the blog-admin JAR with Maven, and packages it into a slim JRE 8 image exposing port 8085.

CVE-2025-60355/Dockerfile.admin-patched:1-15

Dockerfile.builder

builds the vulnerable OneBlog v2.3.8 JARs

A Dockerfile that clones OneBlog v2.3.8 source and builds the blog-admin and blog-web JARs using Maven. It is used as a builder stage to extract the JARs.

CVE-2025-60355/Dockerfile.builder:1-9

Dockerfile.builder-patched

builds the claimed-patched OneBlog v2.3.9 JARs

A Dockerfile that clones OneBlog v2.3.9 source and builds the blog-admin and blog-web JARs using Maven. It is used for comparison with the vulnerable version.

CVE-2025-60355/Dockerfile.builder-patched:1-9

Dockerfile.web-patched

builds the patched blog-web service image

A multi-stage Dockerfile that clones OneBlog v2.3.9 source, builds the blog-web JAR with Maven, and packages it into a slim JRE 8 image exposing port 8443.

CVE-2025-60355/Dockerfile.web-patched:1-15

poc.py

automates the CVE-2025-60355 exploit chain

A Python 3 script that authenticates to blog-admin, injects a FreeMarker SSTI payload into the TM_ROBOTS template, triggers RCE via the public /robots.txt endpoint on blog-web, and restores the original template.

CVE-2025-60355/poc/poc.py:1-341

build.sh

orchestrates the lab build process

A shell script that builds the OneBlog v2.3.8 JARs using Dockerfile.builder, extracts them, and then builds the Docker Compose stack.

CVE-2025-60355/build.sh:1-45

init_data.sql

initializes the MySQL database with seed data

An SQL script that populates the dblog database with default articles, tags, system configurations, templates (including TM_ROBOTS), users, and permissions for the OneBlog application.

CVE-2025-60355/init_data.sql:1-312

poc_verification_report.md

documents the PoC verification results

A report detailing the PoC script, test results confirming RCE on the vulnerable version, and notes on the vulnerability.

CVE-2025-60355/poc_verification_report.md:1-193
CVE assessment

How the supplied evidence relates each vulnerability

CVE-2025-60355

Supported by supplied evidence

The provided evidence describes a FreeMarker SSTI vulnerability in OneBlog leading to RCE, matching the CVE description. The PoC script and documentation detail the attack chain, and the Dockerfiles build the vulnerable application.

CVE-2025-60355/README.md:1-3CVE-2025-60355/README.md:17-25CVE-2025-60355/poc/poc.py:1-341
Exercise context

Requirements and sequence described by the evidence

Prerequisites

  • Docker Engine with Compose pluginCVE-2025-60355/README.md:55-56
  • Ports 8085 and 8443 available on the hostCVE-2025-60355/README.md:57
  • Python 3 for running the PoC scriptCVE-2025-60355/README.md:99

Evidence-described exercise path

  1. Build the lab images using 'docker compose build' or the provided build.sh script.CVE-2025-60355/README.md:60-62CVE-2025-60355/build.sh:1-45
  2. Start the lab with 'docker compose up -d' and wait for services to initialize.CVE-2025-60355/README.md:62-65
  3. Retrieve the container IPs for the admin and web services.CVE-2025-60355/README.md:103-106
  4. Run the PoC script (poc.py) with the admin and web IPs and ports to execute the exploit.CVE-2025-60355/README.md:108-117
Safety-review evidence

Behaviors behind the stored safety assessment

No harmful behavior observed

The packet describes a self-contained vulnerability lab. The PoC script targets only the lab's own blog-admin and blog-web containers, using documented default credentials and endpoints. It includes a cleanup step to restore the original template. There is no evidence of host compromise, external communication, credential theft, data destruction, or any behavior outside the intended lab exercise.

CVE-2025-60355/poc/poc.py:1-341CVE-2025-60355/README.md:1-283
Review boundaries

What the analysis did not establish

  • The docker-compose.yml file is not included in the evidence, so the full service orchestration (e.g., MySQL, Redis) cannot be confirmed from the provided files alone.
  • The packet does not include the actual JAR files or the complete source code of OneBlog, so the vulnerability cannot be independently verified from the supplied evidence.
  • The CVE-2025-60355 identifier does not appear in the NVD or other public databases as of the analysis date, which is a limitation of the CVE association itself, not the packet.
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.

GitHub

CVE-2025-60355/docker-compose.yml

Created
Vuln labCVE-2025-60355Compose · mixed

1 Compose manifest · 3 Dockerfiles · 4 services

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

Environment assessment

A Docker Compose lab for CVE-2025-60355, a FreeMarker SSTI vulnerability in OneBlog 2.3.8. It consists of four services: a Redis instance for session management, a MariaDB database with pre-seeded schema and data, a vulnerable blog-admin backend (port 8085) for template injection, and a blog-web frontend (port 8443) that triggers the RCE via public endpoints.

CVE-2025-60355/docker-compose.yml:1-82CVE-2025-60355/README.md:1-283

Lab assessment

Vulnerability lab

The packet explicitly describes a vulnerability lab for CVE-2025-60355, including a vulnerable target (OneBlog 2.3.8), a proof-of-concept exploit script, and a Docker Compose environment to reproduce the SSTI-to-RCE chain.

CVE-2025-60355/README.md:1-3CVE-2025-60355/docker-compose.yml:1-2
Lab shapeCompose · mixed
Services4
Compose manifests1
Dockerfiles3
Evidence & reasoningComponents · CVE assessment · exercise context · review boundaries
Components

Services and files described by the evidence

cve-60355-redis

session storecache

Redis 7 Alpine instance used by OneBlog for Shiro session management and caching. Configured with password 'oneblog123456' and append-only persistence.

CVE-2025-60355/docker-compose.yml:6-16

cve-60355-mysql

database

MariaDB 10.11 database initialized with the OneBlog schema (dblog.sql) and seed data (init_data.sql), including default users, roles, permissions, and templates. Root password is 'root'.

CVE-2025-60355/docker-compose.yml:19-35CVE-2025-60355/Dockerfile.mysql:1-7

vulnerable (blog-admin)

admin backendinjection point

OneBlog admin backend built from source at commit 8669276 (v2.3.8). Exposes port 8085. Provides the authenticated POST /template/edit endpoint used to inject the SSTI payload into the TM_ROBOTS template.

CVE-2025-60355/docker-compose.yml:38-54CVE-2025-60355/Dockerfile.admin:1-15

cve-60355-web

public frontendtrigger point

OneBlog public frontend built from the same vulnerable source. Exposes port 8443. Serves unauthenticated endpoints like /robots.txt that render stored templates via the unsandboxed FreeMarkerUtil, triggering the injected RCE payload.

CVE-2025-60355/docker-compose.yml:57-73CVE-2025-60355/Dockerfile.web:1-15
CVE assessment

How the supplied evidence relates each vulnerability

CVE-2025-60355

Supported by supplied evidence

The lab environment is explicitly built to demonstrate CVE-2025-60355. The README, PoC script, and verification report all describe the vulnerability as a FreeMarker SSTI in OneBlog leading to RCE, and the Docker Compose file sets up the exact vulnerable version (2.3.8) with the described attack surface.

CVE-2025-60355/README.md:1-3CVE-2025-60355/poc/poc.py:1-5CVE-2025-60355/poc_verification_report.md:1-8
Exercise context

Requirements and sequence described by the evidence

Prerequisites

  • Docker Engine with Compose pluginCVE-2025-60355/README.md:63-64
  • Ports 8085 and 8443 available on the hostCVE-2025-60355/README.md:65
  • Python 3 (stdlib only) to run the PoC scriptCVE-2025-60355/README.md:107

Evidence-described exercise path

  1. Build and start the lab: docker compose build && docker compose up -dCVE-2025-60355/README.md:69-72
  2. Wait ~30 seconds for Java applications to initializeCVE-2025-60355/README.md:74
  3. Retrieve container IPs: ADMIN_IP=$(docker inspect cve-60355-admin ...) and WEB_IP=$(docker inspect cve-60355-web ...)CVE-2025-60355/README.md:113-115
  4. Run the PoC: python3 poc/poc.py "$ADMIN_IP" 8085 "$WEB_IP" 8443 [command]CVE-2025-60355/README.md:120-128
  5. Observe RCE output in the HTTP response from /robots.txtCVE-2025-60355/README.md:130
Safety-review evidence

Behaviors behind the stored safety assessment

No harmful behavior observed

All visible behavior is directed at the lab's own target containers. The PoC script authenticates to the lab's admin service, injects a template, and triggers RCE on the lab's web service. It includes a cleanup step to restore the original template. There is no evidence of host compromise, external communication, credential theft, data destruction, or any action outside the documented exercise.

CVE-2025-60355/poc/poc.py:1-341CVE-2025-60355/README.md:1-283
Review boundaries

What the analysis did not establish

  • The packet does not include the actual JAR files (blog-admin.jar, blog-web.jar); they must be built from source using the provided Dockerfiles or build.sh script.
  • The PoC script uses hardcoded default container IPs (172.20.0.4, 172.20.0.5) which may not match the actual lab network; the README instructs the operator to retrieve the correct IPs.
  • The lab uses default credentials (root/123456) and disables kaptcha, which is a realistic but insecure default for a vulnerability lab.
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.

GitHub

CVE-2025-60355/docker-compose.patched.yml

Created
Vuln labCVE-2025-60355Compose · images

1 Compose manifest · 4 services

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

Environment assessment

A Docker Compose environment for a patched OneBlog 2.3.9 instance, consisting of MariaDB, Redis, blog-admin, and blog-web services, intended for CVE-2025-60355 vulnerability research.

CVE-2025-60355/docker-compose.patched.yml:1-97CVE-2025-60355/README.md:1-283

Lab assessment

Vulnerability lab

The README explicitly describes this as a lab for CVE-2025-60355, a FreeMarker SSTI vulnerability in OneBlog. The Compose file defines a 'patched' stack for comparison, and the PoC script targets the lab's own services.

CVE-2025-60355/README.md:1-3CVE-2025-60355/docker-compose.patched.yml:1-3
Lab shapeCompose · images
Services4
Compose manifests1
Dockerfiles0
Evidence & reasoningComponents · CVE assessment · exercise context · review boundaries
Components

Services and files described by the evidence

cve-60355-patched-redis

session managementcaching

Redis 7 Alpine instance used for Shiro session management and caching, secured with a password.

CVE-2025-60355/docker-compose.patched.yml:7-17CVE-2025-60355/README.md:72

cve-60355-patched-mysql

database

MariaDB 10.11 container initialized with schema and seed data for the OneBlog application.

CVE-2025-60355/docker-compose.patched.yml:20-33CVE-2025-60355/README.md:73

cve-60355-patched-admin

admin backendinjection point

OneBlog admin backend (port 8085) where authenticated users can inject SSTI payloads via the template editor.

CVE-2025-60355/docker-compose.patched.yml:36-60CVE-2025-60355/README.md:74

cve-60355-patched-web

public frontendtrigger point

OneBlog public frontend (port 8443) that renders templates without sandboxing, allowing unauthenticated RCE trigger.

CVE-2025-60355/docker-compose.patched.yml:63-87CVE-2025-60355/README.md:75
CVE assessment

How the supplied evidence relates each vulnerability

CVE-2025-60355

Supported by supplied evidence

The README, PoC script, and verification report all describe and demonstrate a FreeMarker SSTI vulnerability in OneBlog leading to RCE, consistent with CVE-2025-60355. The lab is explicitly built for this CVE.

CVE-2025-60355/README.md:1-3CVE-2025-60355/poc/poc.py:1-4CVE-2025-60355/poc_verification_report.md:1-8
Exercise context

Requirements and sequence described by the evidence

Prerequisites

  • Docker Engine with Compose pluginCVE-2025-60355/README.md:56-57
  • Ports 9085 and 9443 available on the hostCVE-2025-60355/docker-compose.patched.yml:52CVE-2025-60355/docker-compose.patched.yml:79
  • Python 3 for running the PoC scriptCVE-2025-60355/README.md:97

Evidence-described exercise path

  1. Build and start the lab using 'docker compose build' and 'docker compose up -d'.CVE-2025-60355/README.md:60-63
  2. Obtain container IPs for admin and web services using 'docker inspect'.CVE-2025-60355/README.md:103-106
  3. Run the PoC script 'poc/poc.py' with the admin and web IPs and ports to authenticate, inject SSTI payload, trigger RCE, and restore the template.CVE-2025-60355/README.md:108-117CVE-2025-60355/poc/poc.py:1-341
Safety-review evidence

Behaviors behind the stored safety assessment

No harmful behavior observed

All visible behavior targets the lab's own services (admin and web containers) for the documented CVE-2025-60355 exercise. The PoC script authenticates, injects a payload, triggers RCE on the lab target, and cleans up. There is no evidence of host compromise, external communication, persistence, or any action outside the intended lab scope.

CVE-2025-60355/poc/poc.py:1-341CVE-2025-60355/README.md:1-283
Review boundaries

What the analysis did not establish

  • The packet includes only the 'patched' Compose file; the vulnerable Compose file and Dockerfiles are referenced but not included in the evidence.
  • The actual behavior of the 'patched' images (cve-2025-60355-admin-patched:local, cve-2025-60355-web-patched:local) cannot be verified from the supplied text alone.
  • The PoC script's default target IPs (172.20.0.4, 172.20.0.5) are lab-internal addresses, but the script accepts arbitrary targets, which could be misused outside the lab.
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

1