bagisto has Server Side Template Injection (SSTI) in Product Description
The advisory, in context
Summary
Bagisto v2.3.7 is vulnerable to Server-Side Template Injection (SSTI) due to unsanitized user input being processed by the server-side templating engine when rendering product descriptions. This allows an attacker with product creation privileges to inject arbitrary template expressions that are evaluated by the backend — potentially leading to Remote Code Execution (RCE) on the server.
Details
In Bagisto, product descriptions are rendered through Laravel’s Blade templating engine in various front-end and admin views. The product description field is not sanitized or escaped before being passed to the view, which means user-supplied data can break out of the expected string context and execute arbitrary template code.
PoC
Create a product and enter the payload to the description. <img width="679" height="669" alt="image" src="https://github.com/user-attachments/assets/1e5dac3f-4043-4b31-98ed-f4346feb5477" /> Preview the page, observed that the template expressions were evaluated by the backend and displayed on the screen. <img width="1431" height="922" alt="image" src="https://github.com/user-attachments/assets/16f29c6e-05f4-40c4-9926-0c59e0a979c2" />
Impact
RCE potential: Attackers can execute arbitrary PHP code or system commands. Data breach: Read sensitive environment variables (.env), API keys, or database credentials. Defacement / persistence: Inject malicious scripts or backdoors in dynamic templates. Privilege escalation: If attackers have limited roles (e.g., product manager), they can compromise the entire application or host.
Affected packages
Start with the recorded fix for your release branch. Check your installed version and test compatibility before upgrading. Fixing this advisory does not rule out other vulnerabilities in the release.
Earlier releases before 2.3.8
Fixed in 2.3.8
64 explicitly affected versions
v0.1.0, v0.1.1, v0.1.2, v0.1.3, v0.1.4, v0.1.4-BETA1, v0.1.4-BETA2, v0.1.4-BETA3, v0.1.4-BETA4, v0.1.5, v0.1.6, v0.1.6-ALPHA1, v0.1.7, v0.1.7-BETA1, v0.1.7-BETA2, v0.1.8, v0.1.9, v0.1.9-BETA1, v0.2.0, v0.2.1, v0.2.2, v1.0.0, v1.0.0-BETA1, v1.1.0, v1.1.1, v1.1.2, v1.2.0, v1.2.0-BETA1, v1.3.0, v1.3.1, v1.3.2, v1.3.3, v1.4.0, v1.4.1, v1.4.2, v1.4.3, v1.4.4, v1.4.5, v1.5.0, v1.5.1, v2.0.0, v2.0.0-BETA-1, v2.1.0, v2.1.1, v2.1.2, v2.2.0, v2.2.1, v2.2.10, v2.2.2, v2.2.3, v2.2.4, v2.2.5, v2.2.6, v2.2.7, v2.2.8, v2.2.9, v2.3.0, v2.3.1, v2.3.2, v2.3.3, v2.3.4, v2.3.5, v2.3.6, v2.3.7
View affected-version evidence
{
"ranges": [
{
"events": [
{
"introduced": "0"
},
{
"fixed": "2.3.8"
}
],
"type": "ECOSYSTEM"
}
],
"versions": [
"v0.1.0",
"v0.1.1",
"v0.1.2",
"v0.1.3",
"v0.1.4",
"v0.1.4-BETA1",
"v0.1.4-BETA2",
"v0.1.4-BETA3",
"v0.1.4-BETA4",
"v0.1.5",
"v0.1.6",
"v0.1.6-ALPHA1",
"v0.1.7",
"v0.1.7-BETA1",
"v0.1.7-BETA2",
"v0.1.8",
"v0.1.9",
"v0.1.9-BETA1",
"v0.2.0",
"v0.2.1",
"v0.2.2",
"v1.0.0",
"v1.0.0-BETA1",
"v1.1.0",
"v1.1.1",
"v1.1.2",
"v1.2.0",
"v1.2.0-BETA1",
"v1.3.0",
"v1.3.1",
"v1.3.2",
"v1.3.3",
"v1.4.0",
"v1.4.1",
"v1.4.2",
"v1.4.3",
"v1.4.4",
"v1.4.5",
"v1.5.0",
"v1.5.1",
"v2.0.0",
"v2.0.0-BETA-1",
"v2.1.0",
"v2.1.1",
"v2.1.2",
"v2.2.0",
"v2.2.1",
"v2.2.10",
"v2.2.2",
"v2.2.3",
"v2.2.4",
"v2.2.5",
"v2.2.6",
"v2.2.7",
"v2.2.8",
"v2.2.9",
"v2.3.0",
"v2.3.1",
"v2.3.2",
"v2.3.3",
"v2.3.4",
"v2.3.5",
"v2.3.6",
"v2.3.7"
]
}