CVE-2026-39847·Python vulnerability
Emmett is a full-stack Python web framework designed with simplicity. From 2.5.0 to before 2.8.1, the RSGI static handler for Emmett's internal assets (/__emmett__ paths) is vulnerable to path traversal attacks. An attacker can use ../ sequences (eg /__emmett__/../rsgi/handlers.py) to read arbitrary files outside the assets directory. This vulnerability is fixed in 2.8.1.
- Severity
- critical
- Software
- Python
- Fixed in
- 2.8.1
- Published
- 2026-04-07
Affected versions
From: 2.5.0
Until: 2.8.1
Fixed in: 2.8.1
How to fix this CVE
Upgrade Python and the Emmett framework to version 2.8.1 or later to patch the path traversal vulnerability in the RSGI static handler. This vulnerability allows unauthenticated attackers to read sensitive files by exploiting improper path validation on /__emmett__ routes. Apply updates immediately to all systems running affected Emmett versions.
sudo dnf update python3 && pip3 install --upgrade emmett>=2.8.1Defensia detects this vulnerability
What an exploitation attempt looks like
Sample log line indicative of exploitation attempts:
GET|POST /__emmett__/\.\./ OR GET|POST /__emmett__/%2e%2e%2f OR GET|POST /__emmett__/.*\.\.\/(rsgi|handlers|config)WAF mitigation (if patching is not yet possible)
Add this rule to your WAF to block exploitation attempts while you schedule the patch.
Implement a Web Application Firewall rule to block requests to /__emmett__ paths containing path traversal sequences (../, %2e%2e%2f, ..\, or Unicode variants). Additionally, restrict access to /__emmett__ routes to internal networks only if the administrative interface is not needed externally.How to check if you are affected
- Step 1: Check installed Emmett version with: python3 -c "import emmett; print(emmett.__version__)"
- Step 2: Search your application code for Emmett RSGI static handler configuration or /__emmett__ route handlers
- Step 3: Check web server access logs for suspicious requests containing /__emmett__/../ or %2e%2e%2f patterns
- Step 4: Verify the upgrade succeeded by running: python3 -c "import emmett; print(emmett.__version__)" and confirming version is 2.8.1 or later
Indicators of compromise
- /__emmett__/../
- /__emmett__/%2e%2e%2f
- /__emmett__/rsgi/handlers.py
- requests with User-Agent patterns typically associated with automated vulnerability scanners targeting path traversal CVEs
FAQ
What is CVE-2026-39847?
CVE-2026-39847 is a critical path traversal vulnerability in Emmett's RSGI static handler that allows attackers to bypass directory restrictions and read arbitrary files on the server by manipulating URL paths with ../ sequences.
Is CVE-2026-39847 being actively exploited?
No, this vulnerability is not currently listed in the CISA Known Exploited Vulnerabilities (KEV) catalog and no public exploits are publicly available, but it should still be patched due to its critical severity rating.
What versions of Emmett are affected by CVE-2026-39847?
Emmett versions 2.5.0 through 2.8.0 are vulnerable. Version 2.8.1 and later contain the fix.
How do I check if my server is vulnerable to CVE-2026-39847?
Run `python3 -c "import emmett; print(emmett.__version__)"` and compare the version against 2.8.0. If your version is 2.8.0 or earlier, your system is vulnerable.
Does Defensia detect CVE-2026-39847?
Yes — Defensia's CVE advisory scanner compares installed package versions against the NVD database. If Emmett is installed on a monitored server, CVE-2026-39847 will appear in your dashboard with remediation steps.
Related Python CVEs
References
Track CVEs across your fleet automatically
Defensia scans your Linux servers and tells you exactly which ones are running vulnerable versions — including CVE-2026-39847. Free for 1 server.
Get started free