Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessSubmit MJML template to compiler
-
ExploitInsert mj-include with traversal path
-
ExecutionRead or probe local file
-
ImpactDisclose file contents or existence
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V5 - File Handling Absolute path validation
|
| Exploitation Conditions | Requires a deployment where the MJML compiler (library or CLI, versions through 4.18.0) processes MJML markup that an attacker can influence, and that markup must contain an mj-include directive pointing to a traversal path; the type="css" mode is the condition that enables actual file-content disclosure, whereas other include types only allow probing whether a target file exists. Exploitation is strongly limited by the local attack vector (AV:L) and high complexity (AC:H) inherited from the incomplete CVE-2020-12827 fix, and it is not exploitable where MJML only compiles trusted, developer-authored templates - the practical risk exists only for services that accept untrusted MJML input. |
| Impact | This is a genuinely low-priority issue despite being a path traversal flaw. The provided CVSS 3.1 vector (AV:L/AC:H/PR:N/UI:N/S:C/C:L/I:N/A:L) scores 4.5 (Medium), and the signals are internally consistent with a low real-world threat: the attack is local-vector (AV:L), requires high complexity (AC:H), and yields only limited confidentiality impact (C:L) - namely file-existence probing and, in the type="css" case, reading of file contents. No EPSS score, no CISA KEV listing, and no public exploit code are present in the input, so exploitation status is 'no public exploit identified at time of analysis.' There is no SSVC decision data provided. A key caveat: although PR:N nominally means unauthenticated, the AV:L vector means exploitation is only possible where an application or pipeline compiles attacker-influenced MJML markup - the true privilege/exposure depends entirely on whether untrusted templates reach the compiler, which the raw vector does not capture. Also note this CVE exists because of an incomplete fix for CVE-2020-12827, indicating the original patch did not fully close the traversal, which is the most noteworthy risk signal here. Net: a real but low-severity, conditionally-exploitable information-disclosure bug, not an urgent priority. |
| Exploit ScenarioDerived | An application that renders user-supplied MJML templates (for example an email-builder SaaS or a template-processing pipeline) passes attacker-controlled markup to MJML <= 4.18.0. The attacker inserts an mj-include tag with a traversal path (e.g. type="css" src="../../../../etc/passwd") to confirm file existence and read the contents of local files outside the intended template directory. No public proof-of-concept is identified at time of analysis; the attack requires that untrusted MJML input actually reaches the compiler. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 14, 2026
MJML through 4.18.0 contains a path traversal in the mj-include directive that allows an attacker to probe for file existence and, when type="css" is used, read local files. The flaw is an incomplete fix for CVE-2020-12827 and carries a low severity (CVSS 4.5) with a local attack vector (AV:L), high complexity (AC:H), and low confidentiality impact as assessed (CVSS:3.1/AV:L/AC:H/PR:N/UI:N/S:C/C:L/I:N/A:N). No public exploit code is known at time of analysis, and exploitation requires a deployment where the MJML compiler processes attacker-influenced markup, meaning the practical risk is limited to services that accept untrusted MJML input.
RemediationAI
No vendor-released patch is identified at time of analysis. To mitigate, avoid processing untrusted MJML input; if that is not possible, disable the mj-include directive entirely or restrict its use to trusted, developer-authored templates. For services that must accept untrusted MJML, run the compiler in a sandboxed environment with limited file system access-for example, a container with read-only mounts and only the necessary directories exposed-to contain any file disclosure. Additionally, validate and sanitize any user-supplied MJML, specifically rejecting include paths that contain '../' or absolute paths. Monitor the GitHub issue for patch updates: https://github.com/mjmlio/mjml/issues/3018. These workarounds may break legitimate include functionality and require careful configuration.
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in npm
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
MJML is a markup language and compiler for responsive email templates. The mj-include directive allows embedding external files such as CSS or HTML into the generated email. The vulnerability (CWE-36: Absolute Path Traversal) arises because the directive fails to properly sanitize file paths, enabling directory traversal via sequences like '../'. An attacker who can control MJML markup can determine file existence and, when type="css" is specified, read arbitrary files accessible to the compiler process. This is a recurrence of CVE-2020-12827, indicating that the previous fix was incomplete. The attack requires the ability to influence MJML input processed by the compiler, and per the assessed CVSS vector (AV:L/AC:H/PR:N/UI:N/S:C/C:L/I:N/A:N), it demands local access and high complexity, with only low confidentiality impact; no integrity or availability impact is assessed. Affected versions are through 4.18.0.
Know when the next one hits your stack
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:L/AC:H/PR:N/UI:N/S:C/C:L/I:N/A:L
Attacker must supply template input to a local compiler (AV:L), incomplete fix makes reliable traversal non-trivial (AC:H), reads escape the template sandbox (S:C, C:L); no integrity/availability impact so I:N/A:N.
Primary rating from Vendor (mitre).
CVSS VectorVendor: mitre
DescriptionCVE.org
MJML through 4.18.0 allows mj-include directory traversal to test file existence and (in the type="css" case) read files. NOTE: this issue exists because of an incomplete fix for CVE-2020-12827.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Path traversal exploits occur when applications use user-controlled input to construct file system paths without proper validation.
NVD
CVE.org
EPSS
GitHub
Exploit-DB