CVE-2026-46637: Twig HTML-output Filters Vulnerability
LOWCVE-2026-46637 is a LOW html-output filters vulnerability (CWE-116: Improper Encoding or Escaping of Output) affecting Twig libraries in the Packagist ecosystem. The issue involves html-output filters in twig/* extras incorrectly declared `is_safe => ['all']`. Remediation is available by upgrading affected packages to version 3.26.0.
CVE-2026-46637 at a Glance
How to Fix CVE-2026-46637
To remediate this vulnerability, upgrade all affected Twig dependencies to a patched release. Both direct and transitive dependencies should be checked, as frameworks or security libraries may pull in vulnerable versions transitively.
Upgrade twig/markdown-extra to 3.26.0
Upgrade twig/cssinliner-extra to 3.26.0
Run the following command in your project directory to verify that all resolved dependencies use the patched release:
inspect dependencies for twig/markdown-extra
How to Check if You Are Affected
To determine whether your application is affected by CVE-2026-46637, inspect your project dependencies for Twig:
inspect dependencies for twig/markdown-extra
Analyze the terminal output to locate any version of Twig in your dependency tree. If any resolved version matches the vulnerable ranges listed in the table below (for example, versions earlier than 3.26.0), your application is affected.
Note: Verify declared build manifests and deployed runtime container environments.
Technical Details
Vulnerability Mechanism & Technical Analysis
This vulnerability is classified under CWE-116: Improper Encoding or Escaping of Output, where the product prepares a structured message for communication with another component, but encoding or escaping of the data is either missing or done incorrectly. as a result, the intended structure of the message is not preserved. In Twig, software state validation or input boundaries are circumvented during processing. Review the official source advisory statement below for specific affected components, classes, and reproduction details.
Source Advisory Statement
CVE-2026-46637 Affected Twig Versions
2 component(s)| Product / Package | Ecosystem | Affected Versions | Fixed Version |
|---|---|---|---|
|
twig/markdown-extra
|
Packagist |
< 3.26.0
|
3.26.0
|
|
twig/cssinliner-extra
|
Packagist |
< 3.26.0
|
3.26.0
|
References
Frequently Asked Questions
What is CVE-2026-46637?
Which Twig versions are affected?
What version fixes CVE-2026-46637?
Is twig/markdown-extra affected?
Is twig/cssinliner-extra affected?
What CWE is associated with CVE-2026-46637?
How can I check Packagist dependencies for CVE-2026-46637?
Machine-readable OSV JSON
OSV v1.5 Schema
{
"schema_version" : "1.4.0",
"id" : "GHSA-jv8m-2544-3pg3",
"modified" : "2026-05-21T21:27:20Z",
"published" : "2026-05-21T21:27:20Z",
"aliases" : [ "CVE-2026-46637" ],
"summary" : "Twig: HTML-output filters in twig/* extras incorrectly declared `is_safe => ['all']`",
"details" : "### Description\n\nSeveral filters in the `twig/*` extras packages are registered with `is_safe => ['all']`, which tells Twig's autoescaper to treat their output as safe in every context (`html`, `js`, `css`, `url`, ...). The output of these filters is plain text or HTML markup, neither of which is safe in every escaping context.\n\nAffected filters:\n\n- `html_to_markdown` (`twig/markdown-extra`) emits plain Markdown text. `league/html-to-markdown` decodes HTML entities when producing code spans and fenced blocks, so an attacker-controlled `<code><img src=x onerror=alert(1)></code>` becomes `` `<img src=x onerror=alert(1)>` ``, which renders live when interpolated into an HTML page.\n- `markdown_to_html` (`twig/markdown-extra`) emits HTML. Safe in an HTML context but not in JS, CSS or URL contexts (e.g. when interpolated into an inline `<script>` block).\n- `inline_css` (`twig/cssinliner-extra`) emits HTML with inlined styles. Same constraint as `markdown_to_html`.\n\nIn all three cases, `is_safe => ['all']` causes the autoescaper to emit the output verbatim in any context, even when the developer never wrote `|raw`. In a context such as a JS string or a URL parameter, this produces unescaped HTML and is exploitable as XSS.\n\n### Resolution\n\n- `html_to_markdown` no longer claims to be safe in any escaping context; its plain-text output is now autoescaped for the surrounding context.\n- `markdown_to_html` and `inline_css` are now declared `is_safe => ['html']`, asserting only what they actually guarantee.\n\n### Credits\n\nTwig would like to thank Claude Mythos Preview (via Project Glasswing) for reporting the issue and providing the fix for `html_to_markdown` and `markdown_to_html` in `twig/markdown-extra`, and Christophe Coevoet for extending the audit to `inline_css` in `twig/cssinliner-extra`.",
"severity" : [ {
"type" : "CVSS_V4",
"score" : "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N/E:U"
} ],
"affected" : [ {
"package" : {
"ecosystem" : "Packagist",
"name" : "twig/markdown-extra"
},
"ranges" : [ {
"type" : "ECOSYSTEM",
"events" : [ {
"introduced" : "0"
}, {
"fixed" : "3.26.0"
} ]
} ]
}, {
"package" : {
"ecosystem" : "Packagist",
"name" : "twig/cssinliner-extra"
},
"ranges" : [ {
"type" : "ECOSYSTEM",
"events" : [ {
"introduced" : "0"
}, {
"fixed" : "3.26.0"
} ]
} ]
} ],
"references" : [ {
"type" : "WEB",
"url" : "https://github.com/twigphp/Twig/security/advisories/GHSA-jv8m-2544-3pg3"
}, {
"type" : "WEB",
"url" : "https://github.com/FriendsOfPHP/security-advisories/blob/master/twig/cssinliner-extra/CVE-2026-46637.yaml"
}, {
"type" : "WEB",
"url" : "https://github.com/FriendsOfPHP/security-advisories/blob/master/twig/markdown-extra/CVE-2026-46637.yaml"
}, {
"type" : "PACKAGE",
"url" : "https://github.com/twigphp/Twig"
}, {
"type" : "WEB",
"url" : "https://symfony.com/cve-2026-46637"
} ],
"database_specific" : {
"cwe_ids" : [ "CWE-116" ],
"severity" : "LOW",
"github_reviewed" : true,
"github_reviewed_at" : "2026-05-21T21:27:20Z",
"nvd_published_at" : null
}
}