Detection rules › Sublime MQL

Sublime MQL rules: subject

Subject: Suspicious bracketed reference

#
Severity
high
Type
rule
Source
github.com/sublime-security/sublime-rules

Detects messages with subject lines containing bracketed patterns that follow a specific format with repeated characters, numeric sequences, and structured tracking identifiers commonly used in malicious automated messaging systems.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesCredential Phishing
Tactics and techniquesEvasion, Impersonation: Brand

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • subject
  • type

Rule body

type.inbound
and strings.contains(subject.base, '[')
and strings.ends_with(subject.base, ']')
and any(regex.extract(subject.base,
                      '\[(?P<first>.)(?P<second>.)\-(?P<second_part>[^\-]+)\-(?P<third_section>[^\]]+)\]$'
        ),
        .named_groups["first"] == .named_groups["second"]
        and regex.match(.named_groups["second_part"], '^\d+$')
        and regex.contains(.named_groups["third_section"], '\d+$')
        and strings.istarts_with(.named_groups["third_section"],
                                 .named_groups["first"]
        )
)

Detection logic

Scope: inbound message.

Detects messages with subject lines containing bracketed patterns that follow a specific format with repeated characters, numeric sequences, and structured tracking identifiers commonly used in malicious automated messaging systems.

  1. inbound message
  2. subject.base contains '['
  3. subject.base ends with ']'
  4. any of regex.extract(subject.base) where all hold:
    • .named_groups['first'] is .named_groups['second']
    • .named_groups['second_part'] matches '^\\d+$'
    • .named_groups['third_section'] matches '\\d+$'
    • strings.istarts_with(.named_groups['third_section'])

Inspects: subject.base, type.inbound. Sensors: regex.contains, regex.extract, regex.match, strings.contains, strings.ends_with, strings.istarts_with.

Indicators matched (5)

FieldMatchValue
strings.containssubstring[
strings.ends_withsuffix]
regex.extractregex\[(?P<first>.)(?P<second>.)\-(?P<second_part>[^\-]+)\-(?P<third_section>[^\]]+)\]$
regex.matchregex^\d+$
regex.containsregex\d+$

Stages and Predicates

Stage 1: mql_rule

and
  any(regex.extract(subject.base))
    and
      regex.extract(subject.base).named_groups['first'] cross_field_compare "regex.extract(subject.base).named_groups['second']"
      regex.extract(subject.base).named_groups['second_part'] regex_match "^\\d+$"
      regex.extract(subject.base).named_groups['third_section'] regex_match "\\d+$"
      strings.istarts_with func_call "strings.istarts_with(regex.extract(subject.base)[].named_groups['third_section'])"
  subject.base contains "["
  subject.base ends_with "]"
  type.inbound eq "true"

Indicators

These rows show field, operator, and value matches.