Detection rules › Sigma

Cross Site Scripting Strings

Status
test
Severity
high
Log source
category webserver
Author
Saw Win Naung, Nasreddine Bencherchali
Source
github.com/SigmaHQ/sigma

Detects XSS attempts injected via GET requests in access logs

MITRE ATT&CK coverage

TacticTechniques
Initial AccessT1189 Drive-by Compromise

Rule body yaml

title: Cross Site Scripting Strings
id: 65354b83-a2ea-4ea6-8414-3ab38be0d409
status: test
description: Detects XSS attempts injected via GET requests in access logs
references:
    - https://github.com/payloadbox/xss-payload-list
    - https://portswigger.net/web-security/cross-site-scripting/contexts
author: Saw Win Naung, Nasreddine Bencherchali
date: 2021-08-15
modified: 2022-06-14
tags:
    - attack.initial-access
    - attack.t1189
logsource:
    category: webserver
detection:
    select_method:
        cs-method: 'GET'
    keywords:
        - '=<script>'
        - '=%3Cscript%3E'
        - '=%253Cscript%253E'
        - '<iframe '
        - '%3Ciframe '
        - '<svg '
        - '%3Csvg '
        - 'document.cookie'
        - 'document.domain'
        - ' onerror='
        - ' onresize='
        - ' onload="'
        - 'onmouseover='
        - '${alert'
        - 'javascript:alert'
        - 'javascript%3Aalert'
    filter:
        sc-status: 404
    condition: select_method and keywords and not filter
falsepositives:
    - JavaScripts,CSS Files and PNG files
    - 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:
    - '=<script>'
    - '=%3Cscript%3E'
    - '=%253Cscript%253E'
    - '<iframe '
    - '%3Ciframe '
    - '<svg '
    - '%3Csvg '
    - 'document.cookie'
    - 'document.domain'
    - ' onerror='
    - ' onresize='
    - ' onload="'
    - 'onmouseover='
    - '${alert'
    - 'javascript:alert'
    - 'javascript%3Aalert'

Stage 3: not filter

filter:
    sc-status: 404

Exclusions

Top-level NOT(...) conjuncts: predicates this rule actively suppresses.

FieldKindExcluded values
sc-statuseq404

Indicators

Each row is a field, operator, and value that the rule matches. The corpus column counts how many other rules in the catalog look for the same combination: high numbers point to widely-used, community-vetted indicators. Blank or 1 shows that the indicator is specific to this rule.

FieldKindValues
cs-methodeq
  • GET