Detection rules › Sigma

Server Side Template Injection Strings

Status
test
Severity
high
Log source
category webserver
Author
Nasreddine Bencherchali (Nextron Systems)
Source
github.com/SigmaHQ/sigma

Detects SSTI attempts sent via GET requests in access logs

Known false positives

  • User searches in search boxes of the respective website
  • Internal vulnerability scanners can cause some serious FPs when used, if you experience a lot of FPs due to this think of adding more filters such as "User Agent" strings and more response codes

MITRE ATT&CK coverage

TacticTechniques
Stealth

Rule body

title: Server Side Template Injection Strings
id: ada3bc4f-f0fd-42b9-ba91-e105e8af7342
status: test
description: Detects SSTI attempts sent via GET requests in access logs
references:
    - https://book.hacktricks.xyz/pentesting-web/ssti-server-side-template-injection
    - https://github.com/payloadbox/ssti-payloads
author: Nasreddine Bencherchali (Nextron Systems)
date: 2022-06-14
tags:
    - attack.stealth
    - attack.t1221
logsource:
    category: webserver
detection:
    select_method:
        cs-method: 'GET'
    keywords:
        - '={{'
        - '=%7B%7B'
        - '=${'
        - '=$%7B'
        - '=<%='
        - '=%3C%25='
        - '=@('
        - 'freemarker.template.utility.Execute'
        - .getClass().forName('javax.script.ScriptEngineManager')
        - 'T(org.apache.commons.io.IOUtils)'
    filter:
        sc-status: 404
    condition: select_method and keywords and not filter
falsepositives:
    - User searches in search boxes of the respective website
    - Internal vulnerability scanners can cause some serious FPs when used, if you experience a lot of FPs due to this think of adding more filters such as "User Agent" strings and more response codes
level: high

Stages and Predicates

Stage 0: condition

select_method and keywords and not filter

Stage 1: select_method

select_method:
    cs-method: 'GET'

Stage 2: keywords

keywords:
    - '={{'
    - '=%7B%7B'
    - '=${'
    - '=$%7B'
    - '=<%='
    - '=%3C%25='
    - '=@('
    - 'freemarker.template.utility.Execute'
    - .getClass().forName('javax.script.ScriptEngineManager')
    - 'T(org.apache.commons.io.IOUtils)'

Stage 3: not filter

filter:
    sc-status: 404

Exclusions

The rule actively suppresses these predicates.

FieldKindExcluded valuesSearch
sc-statuseq404excludes:sc-status field:"sc-status" value:"404"

Indicators

These rows show field, operator, and value matches.