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(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"] ) )

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

Indicators

These rows show field, operator, and value matches.

Back to all Sublime MQL rules