Skip to content
Heist/ feed
Back to feed
High

Twig: Sandbox method allowlist bypass via `Markup` subclass

Type: advisorySources: OSV

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 source

Published 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"
}