
Local intentionally vulnerable lab with a guided workshop and CTF challenges for practicing Git push-option RCE, unsafe deserialization, duplicate-key parsing, and configuration overrides against a Dockerized Git server.
A local Learning Lab and Research Lab inspired by the publicly documented vulnerability concepts behind CVE-2026-3854. Both experiences use real authenticated Git pushes against ForgeDock, a fictional Git server; the Research Lab.

[!CAUTION] This project is intentionally vulnerable. Run it locally only. Do not expose its ports to a public or shared network. Never use it for production.
[!NOTE] This repository is published as a read-only educational reference. It is not accepting public issues, pull requests, feature requests, or support requests. Report unintended security boundary failures privately as described in SECURITY.md.
A guided workshop that teaches push options, unsafe serialization, duplicate-key parsing, configuration override, and the constrained execution chain. Lessons combine short explanations with safe experiments against the running lab.
A CTF-style experience with three sequential Challenge cards, optional hints, and backend-generated flags. The normal UI does not expose source, traces, serializer output, execution-gate output, or a guided walkthrough.
git clone https://github.com/royaleybovich/CVE-2026-3854-lab.git
cd CVE-2026-3854-lab
docker compose up -d --build
No flag or credential setup is required. A one-shot initializer creates independent random proof values and service credentials in a private Docker volume on first startup. make up is an equivalent convenience command. An optional .env is needed only to override defaults or keep explicit values outside Docker.
| Service | Local URL |
|---|---|
| Flagship | http://localhost:8080 |
| ForgeDock | http://localhost:3000 |
| Web Terminal | http://localhost:7681 |
The disposable lab account is:
Username: devuser
Password: devpass
These public credentials exist only inside the local, disposable lab. Do not reuse them elsewhere.
docker compose)The release-readiness pass is verified on Apple Silicon (arm64). Other operating systems and CPU architectures are not claimed as verified until their clean-clone checks are recorded.
make up # build and start; private lab state is generated automatically
make logs # follow service logs
make reset # delete lab repositories/progress and rebuild
make down # stop the lab without deleting Docker volumes
make test # run unit and live integration tests
make reset deletes Docker volumes, including lab repositories, runtime progress, proof values, and internal credentials. The next startup generates fresh private values automatically.
Published ports bind to 127.0.0.1. Redis, the hook executor, and internal processing services are not published. The executor has no Docker socket or host filesystem mount, drops Linux capabilities, uses a read-only filesystem, accepts no shell command or caller-controlled environment, and can invoke only exact lab-owned proof executables. These controls constrain the exercise; they do not make it safe to expose publicly.
Browser / Git client
↓
Flagship portal / ForgeDock
↓
Internal processing network
↓
Constrained executor
See the system overview, push-option processing, threat model, and local deployment guide.
ForgeDock is a deliberately simplified and safely constrained reconstruction of the publicly documented vulnerability concepts behind CVE-2026-3854. It does not reproduce GitHub’s proprietary implementation. Field names, service boundaries, and execution behavior differ from the actual GitHub and GitHub Enterprise Server implementations.
The intentionally vulnerable behavior was added downstream for this lab and is not an upstream Forgejo vulnerability. ForgeDock is not GitHub, and this project is not affiliated with or endorsed by GitHub, Forgejo, Wiz, or the cited researchers.
These credits describe sources and dependencies; they do not imply collaboration, approval, or endorsement.
Flagship-created software and curriculum are licensed under GPL-3.0-or-later, except where a file states another compatible license. See LICENSE, NOTICE.md, Forgejo provenance, and TRADEMARKS.md. Existing third-party licenses and notices remain in force.