Summary
CVE-2026-102810 is a path traversal vulnerability (CWE-22) in Marmite, an open-source static site generator written in Rust, affecting its built-in development server (--serve option) in versions through 0.4.2. The flaw in the handle_request function of src/server.rs allows unauthenticated remote attackers to read arbitrary files accessible to the Marmite process by sending requests containing percent-encoded directory traversal (..) sequences. The issue carries a CVSS score of 8.7 (High) and is exploitable over the network with no authentication or user interaction.
Technical details
- Root cause:
handle_requestpercent-decodes the incoming request URL and derives a request path directly from it, then joins that path to the configured output folder (output_folder.join(&request_path)) without validating or stripping..segments before opening the file. - Trigger condition: The Marmite development server must be running (started via
marmite --serve, which historically bound by default to0.0.0.0:8000) and reachable over the network. - Attack vector: A remote, unauthenticated attacker sends an HTTP request to the dev server with a URL-encoded traversal sequence (e.g.,
%2e%2e/%2e%2e/) in the path; the server decodes it, fails to reject the..segments, and serves the resolved file back to the attacker. - Impact: Unauthorized disclosure of arbitrary files readable by the Marmite process (e.g., configuration files, credentials, source code, or other sensitive data on the host), with no impact on integrity or availability from this specific finding.
- Related but separately tracked issues in the same dev server (unauthenticated arbitrary file write via content-management/API endpoints) were reported alongside this vulnerability but are not covered by this CVE.
Affected software
- Marmite (Rust crate
marmite, published by rochacbruno) — all versions up to and including 0.4.2, when run with the--servedevelopment server option. - Statically generated/deployed Marmite output (i.e., sites built and hosted without the dev server) is not affected by this issue.
Severity
- CVSS v3.1: 7.5 (High) —
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N - CVSS v4.0: 8.7 (High) —
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N - Attack Vector: Network | Attack Complexity: Low | Privileges Required: None | User Interaction: None | Confidentiality Impact: High
Mitigation and recommended actions
- Immediate: Upgrade to Marmite 0.4.3 or later. This release changes the development server’s default bind address from
0.0.0.0:8000to loopback (127.0.0.1:8000), significantly reducing remote exposure of the dev server. Note that this change addresses the server’s default network exposure but does not itself add path/..sanitization tohandle_request— treat the dev server as inherently untrusted for exposure to hostile networks. - If the dev server must be network-reachable: Do not pass
--bind 0.0.0.0:8000(or any non-loopback interface) on networks that are not fully trusted; restrict access via firewall rules, VPN, or a reverse proxy that normalizes and rejects requests containing traversal sequences before they reach Marmite. - General guidance: Never run
marmite --serveas a long-lived or internet-facing service — it is intended strictly for local development/preview. Only serve pre-built static output (via a hardened production web server) to end users and untrusted networks. - Monitor for HTTP requests to Marmite dev server instances containing encoded
..sequences (e.g.,%2e%2e,..%2f, double-encoded variants) as an indicator of exploitation attempts.

