Detection rules › Sublime MQL

Link: Observed URL pattern with specific domain registrar

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

Detects messages using Element Email service infrastructure, identified by characteristic URL patterns with /f/ paths, unsubscribe links, single domain usage, and Cloudflare domain registration. This pattern indicates potential abuse of legitimate email marketing services.

Threat classification

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

CategoryValues
Attack typesSpam
Tactics and techniquesFree email provider

Event coverage

Rule body MQL

type.inbound
// Signs of Email Element use
// all links are the same domain
and length(distinct(body.current_thread.links, .href_url.domain.root_domain)) == 1
// all links contain the /f/
and all(body.current_thread.links,
        regex.icontains(.href_url.path, '^/(?:unsubscribe/)?f/')
)
// there is an unsub link
and length(filter(body.current_thread.links,
                  strings.icontains(.href_url.path, '/unsubscribe/f/')
           )
) == 1
// this actor uses CF for domain management
and network.whois(sender.email.domain).registrar_name == "Cloudflare, Inc."

Detection logic

Scope: inbound message.

Detects messages using Element Email service infrastructure, identified by characteristic URL patterns with /f/ paths, unsubscribe links, single domain usage, and Cloudflare domain registration. This pattern indicates potential abuse of legitimate email marketing services.

  1. inbound message
  2. length(distinct(body.current_thread.links, .href_url.domain.root_domain)) is 1
  3. all of body.current_thread.links where:
    • .href_url.path matches '^/(?:unsubscribe/)?f/'
  4. length(filter(body.current_thread.links, strings.icontains(.href_url.path, '/unsubscribe/f/'))) is 1
  5. network.whois(sender.email.domain).registrar_name is 'Cloudflare, Inc.'

Inspects: body.current_thread.links, body.current_thread.links[].href_url.domain.root_domain, body.current_thread.links[].href_url.path, sender.email.domain, type.inbound. Sensors: network.whois, regex.icontains, strings.icontains.

Indicators matched (2)

FieldMatchValue
regex.icontainsregex^/(?:unsubscribe/)?f/
strings.icontainssubstring/unsubscribe/f/