Twig: Sandbox method allowlist bypass via `Markup` subclass
Twig is a template language for PHP. From version 1.0.0 to before version 3.27.0, SecurityPolicy::checkMethodAllowed() unconditionally whitelists all method calls on instances of Twig\Markup. Twig\Markup is not final, so subclasses inherit the bypass. An application that passes an object of a Markup-derived class into a sandboxed template (typically to mark a chunk of HTML as safe) inadvertently exposes every public method of that subclass to template authors, regardless of the configured allowedMethods list. This issue has been patched in version 3.27.0.
- Products
- Not specified
- Affected versions
- Not specified
- Fixed versions
- Not specified
- CVEs
- CVE-2026-46636
- Confirmed fixed CVEs
- Not specified
- Updated in this feed
- 7 Nov 2026, 01:32 UTC · Revision 1
Source evidence
Twig: Sandbox method allowlist bypass via `Markup` subclass
core-osv · Original sourcePublished 4 Sept 2026, 22:07 UTC
Twig is a template language for PHP. From version 1.0.0 to before version 3.27.0, SecurityPolicy::checkMethodAllowed() unconditionally whitelists all method calls on instances of Twig\Markup. Twig\Markup is not final, so subclasses inherit the bypass. An application that passes an object of a Markup-derived class into a sandboxed template (typically to mark a chunk of HTML as safe) inadvertently exposes every public method of that subclass to template authors, regardless of the configured allowedMethods list. This issue has been patched in version 3.27.0.
osv:CVE-2026-46636
Complete source record
{
"id": "7e7930b9a6f8ec76014204d0454313b6c73f52ffce83c05232fbc193e75f3125",
"url": "https://osv.dev/vulnerability/CVE-2026-46636",
"method": "structured",
"payload": {
"kind": "advisory",
"title": "Twig: Sandbox method allowlist bypass via `Markup` subclass",
"summary": "Twig is a template language for PHP. From version 1.0.0 to before version 3.27.0, SecurityPolicy::checkMethodAllowed() unconditionally whitelists all method calls on instances of Twig\\Markup. Twig\\Markup is not final, so subclasses inherit the bypass. An application that passes an object of a Markup-derived class into a sandboxed template (typically to mark a chunk of HTML as safe) inadvertently exposes every public method of that subclass to template authors, regardless of the configured allowedMethods list. This issue has been patched in version 3.27.0.",
"evidence": "osv:CVE-2026-46636",
"products": [],
"severity": "high",
"structured": {
"id": "CVE-2026-46636",
"aliases": [
"CVE-2026-46636",
"GHSA-64jr-qjx4-w2fh"
],
"metrics": [
{
"type": "CVSS_V4",
"score": "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"
}
],
"affected": [
{
"ranges": [
{
"repo": "https://github.com/twigphp/twig",
"type": "GIT",
"events": [
{
"introduced": "2f106a80cc13b4260074e573fa017a770fe20350"
},
{
"fixed": "04ae1bfe9463c816cf72ca0abe7eae2c77a9a9ed"
}
],
"database_specific": {
"extracted_events": [
{
"range": [
{
"introduced": "1.0.0"
},
{
"fixed": "3.27.0"
}
],
"source": "AFFECTED_FIELD",
"strategy": "StringRangeExpression"
},
{
"range": [
{
"fixed": "04ae1bfe9463c816cf72ca0abe7eae2c77a9a9ed"
}
],
"source": "REFERENCES_TAG",
"original_tag": "v3.27.0"
},
{
"range": [
{
"introduced": "0"
},
{
"fixed": "3.27.0"
}
],
"source": "DESCRIPTION"
}
]
}
}
],
"versions": [
"v3.26.0",
"v3.25.0",
"v3.24.0",
"v3.23.0",
"v3.22.2",
"v3.22.1",
"v3.22.0",
"v3.21.1",
"v3.21.0",
"v3.20.0",
"v3.19.0",
"v3.18.0",
"v3.17.1",
"v3.17.0",
"v3.16.0",
"v3.15.0",
"v3.14.0",
"v3.11.0",
"v3.13.0",
"v3.12.0",
"v3.10.3",
"v3.10.2",
"v3.10.1",
"v3.10.0",
"v3.9.3",
"v3.9.2",
"v3.9.1",
"v3.9.0",
"v3.8.0",
"v3.7.1",
"v3.7.0",
"v3.6.1",
"v3.6.0",
"v3.5.1",
"v3.5.0",
"v3.4.3",
"v3.4.2",
"v3.4.1",
"v3.4.0",
"v3.3.10",
"v3.3.9",
"v3.3.8",
"v3.3.7",
"v3.3.6",
"v3.3.5",
"v3.3.4",
"v3.3.3",
"v3.3.2",
"v3.3.1",
"v3.3.0",
"v3.2.1",
"v3.1.1",
"v3.1.0",
"v3.0.5",
"v3.0.4",
"v3.0.3",
"v3.0.2",
"v3.0.1",
"v3.0.0",
"v3.0.0-BETA1",
"v2.8.1",
"v2.8.0",
"v2.7.4",
"v2.7.3",
"v2.7.2",
"v2.7.1",
"v2.7.0",
"v2.6.2",
"v2.6.1",
"v2.6.0",
"v2.5.0",
"v2.4.8",
"v2.4.7",
"v2.4.6",
"v2.4.5",
"v2.4.4",
"v2.4.3",
"v2.4.2",
"v2.4.1",
"v2.4.0",
"v2.3.2",
"v2.3.1",
"v2.3.0",
"v2.2.0",
"v2.1.0",
"v2.0.0",
"v1.18.0",
"v1.17.0",
"v1.16.3",
"v1.16.2",
"v1.16.1",
"v1.16.0",
"v1.15.1",
"v1.15.0",
"v1.14.2",
"v1.14.1",
"v1.14.0",
"v1.13.2",
"v1.13.1",
"v1.13.0",
"v1.12.3",
"v1.12.2",
"v1.12.1",
"v1.12.0",
"v1.12.0-RC1",
"v1.11.1",
"v1.11.0",
"v1.10.3",
"v1.10.2",
"v1.10.1",
"v1.10.0",
"v1.9.2",
"v1.9.1",
"v1.9.0",
"v1.8.3",
"v1.8.2",
"v1.8.1",
"v1.8.0",
"v1.7.0",
"v1.6.4",
"v1.6.3",
"v1.6.2",
"v1.6.1",
"v1.5.1",
"v1.6.0",
"v1.5.0",
"v1.5.0-RC2",
"v1.5.0-RC1",
"v1.4.0",
"v1.4.0-RC2",
"v1.4.0-RC1",
"v1.3.0",
"v1.3.0-RC1",
"v1.2.0",
"v1.2.0-RC1",
"v1.1.2",
"v1.1.1",
"v1.1.0",
"v1.1.0-RC3",
"v1.1.0-RC2",
"v1.1.0-RC1",
"v1.0.0"
],
"database_specific": {
"source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-46636.json"
}
}
],
"modified": "2026-10-28T02:30:48.968086200Z",
"provider": "osv",
"references": [
"https://security-tracker.debian.org/tracker/CVE-2026-46636",
"https://security-tracker.debian.org/tracker/DSA-6311-1",
"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/46xxx/CVE-2026-46636.json",
"https://github.com/twigphp/Twig/security/advisories/GHSA-64jr-qjx4-w2fh",
"https://nvd.nist.gov/vuln/detail/CVE-2026-46636",
"https://symfony.com/blog/cve-2026-46636-sandbox-filter-tag-and-function-allow-list-bypass-when-sandbox-state-changes-between-renders"
],
"provider_metadata": {
"cwe_ids": [
"CWE-1336"
],
"cna_assigner": "GitHub_M",
"osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/46xxx/CVE-2026-46636.json"
}
},
"related_cves": [
{
"value": "CVE-2026-46636",
"evidence": "/id"
}
],
"security_relevant": true,
"severity_evidence": "/severity/0/score"
},
"source_id": "core-osv",
"document_id": 517009,
"published_at": "2026-09-04T22:07:35.122+00:00"
}