A Docker Compose environment for a CTF challenge exploiting CVE-2025-0184, a DOCX SSRF vulnerability. It includes a main web server, internal services (admin, database, cache, metrics), Redis, and an optional Portainer container.
docker-compose.yml:1-126
Lab assessment
Vulnerability lab
The environment is explicitly described as a CTF challenge for CVE-2025-0184. The README states it is a 'CVE-2025-0184 DOCX SSRF CTF Challenge' and provides an exploit generator. The main application (src/app.py) contains intentional SSRF vulnerabilities and a flag to capture.
Main Flask web application on port 8080 (mapped to host 13687). Accepts DOCX file uploads, extracts external relationships, and makes SSRF requests to the extracted URLs. Requires a hardcoded hash key for authentication. Contains a flag in environment variable FLAG.
docker-compose.yml:5-24src/app.py:1-328
internal-admin
target internal serviceflag holder
Internal Flask admin service on port 3003. Returns a flag when accessed with the correct admin token. Not exposed externally; reachable only from within the Docker network.
docker-compose.yml:26-38src/admin_service.py:1-96
internal-db
decoy internal service
Internal service on port 3001, built from Dockerfile.internal. Provides generic service info endpoints. No flag or sensitive data visible.
Redis 7 Alpine container, exposed on port 6379 within the network. Described as optional for session management.
docker-compose.yml:80-89
portainer
development monitoring tool
Portainer CE container, only started with the 'dev' profile. Mounts the Docker socket, providing host Docker management. Not part of the core challenge.
docker-compose.yml:92-103
CVE assessment
How the supplied evidence relates each vulnerability
The environment is explicitly built around CVE-2025-0184. The main application (src/app.py) implements a DOCX SSRF vulnerability, extracting URLs from DOCX relationships and making requests to them, which matches the described CVE. The README and exploit generator confirm the association.
Requirements and sequence described by the evidence
Prerequisites
Docker and Docker Compose must be installed to build and run the environment.README.md:5-10
The attacker must know the hardcoded hash key (60e27a00dc01ca8e39c21cc3989dd525e24371b0bd238fe506e789e8572a69ae) to authenticate to the upload endpoint.src/app.py:44templates/index.html:300
The attacker must craft a malicious DOCX file containing an external relationship pointing to the internal admin service (http://internal-admin:3003/admin?token=...) to trigger the SSRF.exploits/exploit_generator.py:1-93
Evidence-described exercise path
Build and start the Docker Compose environment using 'make setup', 'make build', 'make up'.README.md:5-10
Access the web interface at http://localhost:13687 and authenticate using the hardcoded hash key.templates/index.html:300
Generate a malicious DOCX payload using the provided exploit generator (exploits/exploit_generator.py) or manually craft a DOCX with an external relationship to http://internal-admin:3003/admin?token=...exploits/exploit_generator.py:1-93
Upload the malicious DOCX file via the web interface. The server will extract the URL and make an SSRF request to the internal admin service.src/app.py:200-250
The response from the internal admin service, containing the flag, is returned in the upload results.src/app.py:150-170
Safety-review evidence
Behaviors behind the stored safety assessment
No harmful behavior observed
All visible behavior is directed at the intended lab target (internal services). The SSRF requests are made to internal Docker network addresses. The Portainer container with Docker socket access is optional and only active in the 'dev' profile, which is a legitimate development tool. No evidence of host escape, external connections, persistence, credential theft, or destructive behavior beyond the lab scope.
docker-compose.yml:1-126src/app.py:1-328
Review boundaries
What the analysis did not establish
The Portainer service mounts the Docker socket (/var/run/docker.sock) and is only active in the 'dev' profile, which could allow host container management if enabled, but it is not part of the default challenge profile.
The exploit generator script (exploits/exploit_generator.py) is a Python script that generates DOCX files; its behavior is fully visible and expected for 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.