SSTI
Description
Server-Side Template Injection (SSTI) occurs when user input is embedded directly into a server-side template, allowing attackers to inject and execute arbitrary code on the server.
Example with Scenario
Scenario: A web application uses a template engine to render web pages, and it incorporates user input directly into the template without proper sanitization. An attacker can craft malicious input to manipulate the template engine and execute arbitrary code.
Payloads and Test Cases
Payloads
Jinja2 (Python):
Thymeleaf (Java):
Smarty (PHP):
Twig (PHP):
Test Cases
Jinja2 (Python):
Payload:
Test Case:
Thymeleaf (Java):
Payload:
Test Case:
Smarty (PHP):
Payload:
Test Case:
Twig (PHP):
Payload:
Test Case:
Mitigation
Input Sanitization:
Sanitize user input to ensure it does not contain malicious code.
Use escaping functions to properly escape user input before embedding it in templates.
Use Safe Template Engines:
Use template engines that do not allow arbitrary code execution or have strict separation between logic and presentation.
Configure template engines to disable or restrict dynamic code execution features.
Content Security Policy (CSP):
Implement a strict Content Security Policy to limit the sources from which content can be loaded.
Use CSP to prevent the execution of inline scripts and styles.
Whitelist Allowable Expressions:
Define and enforce a whitelist of allowable template expressions.
Restrict the use of dynamic expressions and variables within templates.
Security Testing:
Conduct regular security testing, including fuzzing and penetration testing, to identify and mitigate SSTI vulnerabilities.
Use automated security tools to detect and prevent SSTI vulnerabilities in your codebase.
Last updated