Detection rules › Sublime MQL

Sublime MQL rules: service

RuleSeverity
Callback phishing via Apple ID display name abusehigh
Link: Breely link masquerading as PDFhigh
Service abuse: Adobe Creative Cloud share from an unsolicited sender addresslow
Service abuse: Adobe legitimate domain with document approval languagemedium
Service abuse: Adobe message from newly registered domainmedium
Service abuse: Adobe share containing newly observed email address domainhigh
Service abuse: Apple TestFlight with suspicious developer referencehigh
Service abuse: AWS SNS callback scam impersonationmedium
Service abuse: Calendly callback scam detectionmedium
Service abuse: Cisco secure email service with financial requesthigh
Service abuse: Citrix ShareFile impersonation via Outlook pluginmedium
Service abuse: Cognito Forms with short body from unknown sendermedium
Service abuse: Coursera callback scamhigh
Service abuse: Elastic alerts extortionmedium
Service abuse: Facebook business with action required subjectmedium
Service abuse: Facebook mail notification callback scammedium
Service abuse: Fake loan/funding verification lure via Mailgunmedium
Service abuse: FileMail callback scammedium
Service abuse: Free provider with SendGrid routingmedium
Service abuse: GetAccept callback scam contentmedium
Service abuse: GitHub notification with excessive mentions and suspicious linkshigh
Service Abuse: GoDaddy infrastructuremedium
Service abuse: Google application integration redirecting to suspicious hostsmedium
Service abuse: Google Calendar notification with callback scam languagemedium
Service abuse: Google Groups callback scammedium
Service abuse: Google OAuth with suspicious redirect destinationmedium
Service abuse: IBM IAM account notification with callback scam indicatorsmedium
Service abuse: Linode Objects HTML file hostingmedium
Service abuse: Microsoft Forms Pro with suspicious links or QR codesmedium
Service abuse: Microsoft Power Apps callback scammedium
Service abuse: Microsoft Power Automate callback scam impersonationmedium
Service abuse: Microsoft Power BI callback scammedium
Service abuse: Mimecast URL with excessive path lengthhigh
Service abuse: Monday.com callback scammedium
Service abuse: MongoDB Atlas callback scammedium
Service abuse: Notion free-tier account impersonating VIPmedium
Service abuse: Nylas tracking subdomain with suspicious contentmedium
Service abuse: Oracle Cloud Workflow callback scammedium
Service abuse: Outlook Groups with Google Sites link and evasion tagmedium
Service abuse: PayPal manager account creation with callback scam indicatorsmedium
Service abuse: Postman reply-to mismatch with credential theft intentmedium
Service abuse: Recruiting with suspicious language patterns from legitimate platformsmedium
Service abuse: Roomsy with unrelated body contentmedium
Service abuse: Sendgrid credential theft with personalized request targeting single recipientmedium
Service abuse: SendGrid impersonation via Sendgrid from new senderhigh
Service abuse: SendGrid-formatted link with actor-controlled fragmenthigh
Service abuse: SendThisFile with credential theft and financial languagemedium
Service abuse: Settime.io sender with callback scam intentmedium
Service abuse: Soundestlink redirect with suspicious indicatorsmedium
Service abuse: Soundestlink.com Microsoft impersonationmedium
Service abuse: Square marketing with suspicious QR codehigh
Service abuse: SurveyMonkey with suspicious outbound linksmedium
Service abuse: Suspicious Datadog alerthigh
Service abuse: Trello board invitation with VIP impersonationmedium
Service abuse: WeTransfer callback scammedium
Service abuse: Wufoo credential theftmedium
Service abuse: Zohodesk reply-to mismatch with job scam indicatorsmedium
Service abuse: Zoom Clips with unregistered reply-to domainlow
Service abuse: Zoom with newly registered reply-to domainmedium

Callback phishing via Apple ID display name abuse

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

Detects callback phishing that abuses legitimate Apple ID notification emails as a delivery mechanism. The threat actor sets their Apple ID display name to a callback scam lure (e.g., a fake charge with a phone number), which Apple then embeds in the "Dear [name]" greeting of a routine account change notification. This legitimate email is forwarded to multiple targets via a distribution list, bypassing sender reputation checks since it originates from Apple's real infrastructure. The rule extracts the name field from the greeting and applies NLU classification to detect callback scam language within it.

Threat classification

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

CategoryValues
Attack typesCallback Phishing
Tactics and techniquesImpersonation: Brand, Out of band pivot, Social engineering

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • recipients
  • recipients.to[0]
  • sender.email
  • type

Rule body

type.inbound
and sender.email.email == "appleid@id.apple.com"
and (
  // the actor controls the name portion of the apple account, so extract that
  // english starts with Dear, but other language might start with Hello,
  // the email template and html div class names are the same between languages
  any(html.xpath(body.html, '//div[@class="email-body"]').nodes,
      any(regex.iextract(.display_text, '^(?P<first_line>[^\n]+)\n'),
          // NLU catches the actor controlled values as callback
          any(ml.nlu_classifier(beta.ml_translate(.named_groups["first_line"]).text
              ).intents,
              .name == "callback_scam"
          )
          // we have to account for NLU not catching it as callback_scam
          // this catches more than one digit followed by all capital letters
          // 599 USD, we use the unicode category Lu for capital letters from a bunch of languges
          or (
            any(regex.extract(beta.ml_translate(.named_groups["first_line"]).text,
                              '(\d{2,} \p{Lu}{2,5} )'
                ),
                not regex.icontains(.full_match, '[AP]M\s+$')
            )
          )
          // commonly observed phrase "if not you call"
          or strings.icontains(.named_groups["first_line"], "If not you call")
          // first line ends in a phone number
          or regex.contains(.named_groups["first_line"], '\d+,$')
      )
  )
  // the email address of the apple account appears in the body of the message
  or (
    any(body.current_thread.links,
        .parser == "plain"
        and .href_url.scheme == "mailto"
        // actor observed using `appleservice207@icloud.com`
        and (
          (
            strings.istarts_with(strings.parse_email(.href_url.url).local_part,
                                 'apple'
            )
            and strings.parse_email(.href_url.url).domain.domain not in $org_domains
          )
          // newly registered domains like peekaboo.baby
          or network.whois(.href_url.domain).days_old < 30
        )
    )
  )
)
and not recipients.to[0].email.domain.domain in $org_domains

Detection logic

Scope: inbound message.

Detects callback phishing that abuses legitimate Apple ID notification emails as a delivery mechanism. The threat actor sets their Apple ID display name to a callback scam lure (e.g., a fake charge with a phone number), which Apple then embeds in the "Dear [name]" greeting of a routine account change notification. This legitimate email is forwarded to multiple targets via a distribution list, bypassing sender reputation checks since it originates from Apple's real infrastructure. The rule extracts the name field from the greeting and applies NLU classification to detect callback scam language within it.

  1. inbound message
  2. sender.email.email is 'appleid@id.apple.com'
  3. any of:
    • any of html.xpath(body.html, '//div[@class="email-body"]').nodes where:
      • any of regex.iextract(.display_text) where any holds:
        • any of ml.nlu_classifier(beta.ml_translate(.named_groups['first_line']).text).intents where:
          • .name is 'callback_scam'
        • any of regex.extract(...) where:
          • not:
            • .full_match matches '[AP]M\\s+$'
        • .named_groups['first_line'] contains 'If not you call'
        • .named_groups['first_line'] matches '\\d+,$'
    • any of body.current_thread.links where all hold:
      • .parser is 'plain'
      • .href_url.scheme is 'mailto'
      • any of:
        • all of:
          • strings.parse_email(.href_url.url).local_part starts with 'apple'
          • strings.parse_email(.href_url.url).domain.domain not in $org_domains
        • network.whois(.href_url.domain).days_old < 30
  4. not:
    • recipients.to[0].email.domain.domain in $org_domains

Inspects: body.current_thread.links, body.current_thread.links[].href_url.domain, body.current_thread.links[].href_url.scheme, body.current_thread.links[].href_url.url, body.current_thread.links[].parser, body.html, recipients.to[0].email.domain.domain, sender.email.email, type.inbound. Sensors: beta.ml_translate, html.xpath, ml.nlu_classifier, network.whois, regex.contains, regex.extract, regex.icontains, regex.iextract, strings.icontains, strings.istarts_with, strings.parse_email. Reference lists: $org_domains.

Indicators matched (9)

FieldMatchValue
sender.email.emailequalsappleid@id.apple.com
regex.iextractregex^(?P<first_line>[^\n]+)\n
ml.nlu_classifier(beta.ml_translate(regex.iextract(html.xpath(body.html, '//div[@class="email-body"]').nodes[].display_text)[].named_groups['first_line']).text).intents[].nameequalscallback_scam
regex.extractregex(\d{2,} \p{Lu}{2,5} )
strings.icontainssubstringIf not you call
regex.containsregex\d+,$
body.current_thread.links[].parserequalsplain
body.current_thread.links[].href_url.schemeequalsmailto
strings.istarts_withprefixapple

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(html.xpath(body.html, '//div[@class="email-body"]').nodes)
      any(regex.iextract(html.xpath(body.html, '//div[@class="email-body"]').nodes.display_text))
        or
          any(regex.extract(...))
            not
              regex.extract(...).full_match regex_match "[AP]M\\s+$"
          any(ml.nlu_classifier(beta.ml_translate(regex.iextract(html.xpath(body.html, '//div[@class="email-body"]').nodes.display_text).named_groups['first_line']).text).intents)
            ml.nlu_classifier(beta.ml_translate(regex.iextract(html.xpath(body.html, '//div[@class="email-body"]').nodes.display_text).named_groups['first_line']).text).intents.name eq "callback_scam"
          regex.iextract(html.xpath(body.html, '//div[@class="email-body"]').nodes[].display_text)[].named_groups['first_line'] contains "If not you call"
          regex.iextract(html.xpath(body.html, '//div[@class="email-body"]').nodes[].display_text)[].named_groups['first_line'] regex_match "\\d+,$"
    any(body.current_thread.links)
      and
        or
          and
            strings.parse_email func_call "strings.parse_email(body.current_thread.links[].href_url.url).domain.domain not in org_domains"
            strings.parse_email(body.current_thread.links[].href_url.url).local_part starts_with "apple"
          network.whois func_call "network.whois(body.current_thread.links[].href_url.domain).days_old < 30"
        body.current_thread.links.href_url.scheme eq "mailto"
        body.current_thread.links.parser eq "plain"
  not
     macro "recipients.to[0].email.domain.domain in org_domains"
  sender.email.email eq "appleid@id.apple.com"
  type.inbound eq "true"

Indicators

These rows show field, operator, and value matches.

Link: Breely link masquerading as PDF

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

Detects messages containing a single Breely link that displays as a PDF file. Typically, redirects to a different destination for malicious purposes.

Threat classification

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

CategoryValues
Attack typesBEC/Fraud, Credential Phishing
Tactics and techniquesFree subdomain host, Social engineering

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.links
  • type

Rule body

type.inbound
and length(filter(body.links, .href_url.domain.root_domain == "breely.com")) == 1
and any(body.links,
        .href_url.domain.root_domain == "breely.com"
        and strings.icontains(.display_text, ".pdf")
)

Detection logic

Scope: inbound message.

Detects messages containing a single Breely link that displays as a PDF file. Typically, redirects to a different destination for malicious purposes.

  1. inbound message
  2. length(filter(body.links, .href_url.domain.root_domain == 'breely.com')) is 1
  3. any of body.links where all hold:
    • .href_url.domain.root_domain is 'breely.com'
    • .display_text contains '.pdf'

Inspects: body.links, body.links[].display_text, body.links[].href_url.domain.root_domain, type.inbound. Sensors: strings.icontains.

Indicators matched (2)

FieldMatchValue
body.links[].href_url.domain.root_domainequalsbreely.com
strings.icontainssubstring.pdf

Stages and Predicates

Stage 1: mql_rule

and
  any(body.links)
    and
      body.links.display_text contains ".pdf"
      body.links.href_url.domain.root_domain eq "breely.com"
  filter(body.links, .href_url.domain.root_domain == 'breely.com') length_compare "1"
  type.inbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.inboundeq
  • true transforms: boolean
field:"type.inbound" kind:eq value:"true"

Service abuse: Adobe Creative Cloud share from an unsolicited sender address

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

Detects messages from Adobe Creative Cloud in which the document originates from a newly observed email address. The email address is extracted from the HTML body.

Threat classification

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

CategoryValues
Attack typesCredential Phishing
Tactics and techniquesSocial engineering, Free file host, Evasion

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • headers
  • headers.auth_summary
  • sender.email
  • type

Rule body

type.inbound
and sender.email.email == "message@adobe.com"
and headers.auth_summary.spf.pass
and headers.auth_summary.dmarc.pass
and any(html.xpath(body.html,
                   "//td[@style[contains(., 'adobe-clean-display')]]/strong/a/text()"
        ).nodes,
        strings.parse_email(.raw).domain.root_domain not in $org_domains
        and strings.parse_email(.raw).email not in $recipient_emails
        and strings.parse_email(.raw).email not in $sender_emails
        and not (
          strings.parse_email(.raw).domain.domain not in $free_email_providers
          and strings.parse_email(.raw).domain.domain in $recipient_domains
          and strings.parse_email(.raw).domain.domain in $sender_domains
        )
)

Detection logic

Scope: inbound message.

Detects messages from Adobe Creative Cloud in which the document originates from a newly observed email address. The email address is extracted from the HTML body.

  1. inbound message
  2. sender.email.email is 'message@adobe.com'
  3. headers.auth_summary.spf.pass
  4. headers.auth_summary.dmarc.pass
  5. any of html.xpath(body.html, "//td[@style[contains(., 'adobe-clean-display')]]/strong/a/text()").nodes where all hold:
    • strings.parse_email(.raw).domain.root_domain not in $org_domains
    • strings.parse_email(.raw).email not in $recipient_emails
    • strings.parse_email(.raw).email not in $sender_emails
    • not:
      • all of:
        • strings.parse_email(.raw).domain.domain not in $free_email_providers
        • strings.parse_email(.raw).domain.domain in $recipient_domains
        • strings.parse_email(.raw).domain.domain in $sender_domains

Inspects: body.html, headers.auth_summary.dmarc.pass, headers.auth_summary.spf.pass, sender.email.email, type.inbound. Sensors: html.xpath, strings.parse_email. Reference lists: $free_email_providers, $org_domains, $recipient_domains, $recipient_emails, $sender_domains, $sender_emails.

Indicators matched (1)

FieldMatchValue
sender.email.emailequalsmessage@adobe.com

Stages and Predicates

Stage 1: mql_rule

and
  any(html.xpath(body.html, "//td[@style[contains(., 'adobe-clean-display')]]/strong/a/text()").nodes)
    and
      not
        and
          strings.parse_email func_call "strings.parse_email(html.xpath(body.html, \"//td[@style[contains(., 'adobe-clean-display')]]/strong/a/text()\").nodes[].raw).domain.domain in recipient_domains"
          strings.parse_email func_call "strings.parse_email(html.xpath(body.html, \"//td[@style[contains(., 'adobe-clean-display')]]/strong/a/text()\").nodes[].raw).domain.domain in sender_domains"
          strings.parse_email func_call "strings.parse_email(html.xpath(body.html, \"//td[@style[contains(., 'adobe-clean-display')]]/strong/a/text()\").nodes[].raw).domain.domain not in free_email_providers"
      strings.parse_email func_call "strings.parse_email(html.xpath(body.html, \"//td[@style[contains(., 'adobe-clean-display')]]/strong/a/text()\").nodes[].raw).domain.root_domain not in org_domains"
      strings.parse_email func_call "strings.parse_email(html.xpath(body.html, \"//td[@style[contains(., 'adobe-clean-display')]]/strong/a/text()\").nodes[].raw).email not in recipient_emails"
      strings.parse_email func_call "strings.parse_email(html.xpath(body.html, \"//td[@style[contains(., 'adobe-clean-display')]]/strong/a/text()\").nodes[].raw).email not in sender_emails"
  headers.auth_summary.dmarc.pass eq "true"
  headers.auth_summary.spf.pass eq "true"
  sender.email.email eq "message@adobe.com"
  type.inbound eq "true"

Indicators

These rows show field, operator, and value matches.

Service abuse: Adobe legitimate domain with document approval language

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

Detects messages from Adobe's legitimate email domain containing suspicious language about document or payment approval that may indicate service abuse.

Threat classification

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

CategoryValues
Attack typesBEC/Fraud, Credential Phishing
Tactics and techniquesSocial engineering

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • recipients
  • recipients.to[0]
  • type

Rule body

type.inbound
and recipients.to[0].email.domain.domain == "email.adobe.com"
and regex.icontains(body.current_thread.text,
                    "(?:approved?|view) (?:document|payment)"
)

Detection logic

Scope: inbound message.

Detects messages from Adobe's legitimate email domain containing suspicious language about document or payment approval that may indicate service abuse.

  1. inbound message
  2. recipients.to[0].email.domain.domain is 'email.adobe.com'
  3. body.current_thread.text matches '(?:approved?|view) (?:document|payment)'

Inspects: body.current_thread.text, recipients.to[0].email.domain.domain, type.inbound. Sensors: regex.icontains.

Indicators matched (2)

FieldMatchValue
recipients.to[0].email.domain.domainequalsemail.adobe.com
regex.icontainsregex(?:approved?|view) (?:document|payment)

Stages and Predicates

Stage 1: mql_rule

and
  body.current_thread.text regex_match "(?:approved?|view) (?:document|payment)"
  recipients.to[0].email.domain.domain eq "email.adobe.com"
  type.inbound eq "true"

Indicators

These rows show field, operator, and value matches.

Service abuse: Adobe message from newly registered domain

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

Detects messages legitimately sent through Adobe's messaging infrastructure that contain mailto links pointing to domains registered within the last 365 days.

Threat classification

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

CategoryValues
Attack typesCredential Phishing
Tactics and techniquesEvasion, Social engineering, Lookalike domain

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.links
  • sender.email
  • type

Rule body

type.inbound
// from Adobe
and sender.email.email == 'message@adobe.com'
// sender has a recently created email domain
and any(filter(body.links, .href_url.scheme == 'mailto'),
        network.whois(.href_url.domain).days_old < 365
)

Detection logic

Scope: inbound message.

Detects messages legitimately sent through Adobe's messaging infrastructure that contain mailto links pointing to domains registered within the last 365 days.

  1. inbound message
  2. sender.email.email is 'message@adobe.com'
  3. any of filter(body.links) where:
    • network.whois(.href_url.domain).days_old < 365

Inspects: body.links, body.links[].href_url.scheme, sender.email.email, type.inbound. Sensors: network.whois.

Indicators matched (2)

FieldMatchValue
sender.email.emailequalsmessage@adobe.com
body.links[].href_url.schemeequalsmailto

Stages and Predicates

Stage 1: mql_rule

and
  any(filter(body.links))
    network.whois func_call "network.whois(filter(body.links)[].href_url.domain).days_old < 365"
  sender.email.email eq "message@adobe.com"
  type.inbound eq "true"

Indicators

These rows show field, operator, and value matches.

Service abuse: Adobe share containing newly observed email address domain

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

Detects legitimate Adobe notification emails that contain a genuine Adobe-hosted document link alongside a mailto link with an external email address that is not the recipient, not part of the organization's domains, not associated with Adobe, and has never been observed in prior inbound or outbound mail. This pattern indicates abuse of Adobe's trusted email infrastructure to redirect victims into contacting an attacker-controlled address outside the normal mail flow.

Threat classification

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

CategoryValues
Attack typesCredential Phishing, BEC/Fraud
Tactics and techniquesOut of band pivot, Social engineering

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.links
  • recipients
  • recipients.to[0]
  • sender.email
  • type

Rule body

type.inbound
// from Adobe
and sender.email.email == 'message@adobe.com'
// the email address in the body
and any(filter(body.links,
               .href_url.scheme == 'mailto'
               // is not the recipient
               and .href_url.url !~ recipients.to[0].email.email
               // not in org domains
               and .href_url.domain.domain not in $org_domains
               // and not adobe
               and .href_url.domain.root_domain != "adobe.com"
        ),
        // and has not been observed inbound/outbound in the environment
        .href_url.domain.domain not in $sender_domains
        and .href_url.domain.domain not in $recipient_domains
)
// there is a single link to an adobe hosted content
and length(distinct(filter(body.links,
                           .href_url.domain.root_domain == "adobe.com"
                           and strings.istarts_with(.href_url.path, '/id/urn:')
                    ),
                    .href_url.url
           )
) == 1

Detection logic

Scope: inbound message.

Detects legitimate Adobe notification emails that contain a genuine Adobe-hosted document link alongside a mailto link with an external email address that is not the recipient, not part of the organization's domains, not associated with Adobe, and has never been observed in prior inbound or outbound mail. This pattern indicates abuse of Adobe's trusted email infrastructure to redirect victims into contacting an attacker-controlled address outside the normal mail flow.

  1. inbound message
  2. sender.email.email is 'message@adobe.com'
  3. any of filter(body.links) where all hold:
    • .href_url.domain.domain not in $sender_domains
    • .href_url.domain.domain not in $recipient_domains
  4. length(distinct(filter(body.links, .href_url.domain.root_domain == 'adobe.com' and strings.istarts_with(.href_url.path, '/id/urn:')), .href_url.url)) is 1

Inspects: body.links, body.links[].href_url.domain.domain, body.links[].href_url.domain.root_domain, body.links[].href_url.path, body.links[].href_url.scheme, body.links[].href_url.url, recipients.to[0].email.email, sender.email.email, type.inbound. Sensors: strings.istarts_with. Reference lists: $org_domains, $recipient_domains, $sender_domains.

Indicators matched (4)

FieldMatchValue
sender.email.emailequalsmessage@adobe.com
body.links[].href_url.schemeequalsmailto
body.links[].href_url.domain.root_domainequalsadobe.com
strings.istarts_withprefix/id/urn:

Stages and Predicates

Stage 1: mql_rule

and
  any(filter(body.links))
    and
       macro "filter(body.links)[].href_url.domain.domain not in recipient_domains"
       macro "filter(body.links)[].href_url.domain.domain not in sender_domains"
  distinct(filter(body.links, .href_url.domain.root_domain == 'adobe.com' and strings.istarts_with(.href_url.path, '/id/urn:')), .href_url.url) length_compare "1"
  sender.email.email eq "message@adobe.com"
  type.inbound eq "true"

Indicators

These rows show field, operator, and value matches.

Service abuse: Apple TestFlight with suspicious developer reference

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

Detects legitimate Apple TestFlight emails that reference potentially suspicious developers or apps, including variations of OpenAI, ChatGPT, or Meta in the app description or developer name fields.

Threat classification

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

CategoryValues
Attack typesSpam
Tactics and techniquesSocial engineering

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • sender.email
  • type

Rule body

type.inbound
// appears to be from apple (don't care it being legit from apple, appearing is fine)
and sender.email.domain.domain == "email.apple.com"
// has a link
and any(body.current_thread.links,
        .href_url.domain.domain in ('testflight.apple.com')
)
and (
  // get the app description
  any(html.xpath(body.html,
                 '//h2[contains(text(), "App Description")]/ancestor::tr/following-sibling::tr//pre'
      ).nodes,
      any(ml.nlu_classifier(.display_text).entities,
          .name == "org"
          and any(["openai", "openal", "open ai", "open al", "chatgpt", "meta"],
                  strings.icontains(..text, .)
          )
      )
  )

  // parse out the template to get the app and org name
  or any(html.xpath(body.html, '//h2[@aria-label]').nodes,
         any(regex.iextract(.display_text,
                            '(?P<app_name>[^\r\n]+)[\r\n]+By (?P<dev_name>.*) for IOS.$'
             ),
             any(["openai", "openal", "open ai", "open al", "chatgpt", "meta"],
                 strings.icontains(..named_groups["dev_name"], .)
                 or strings.icontains(..named_groups["app_name"], .)
             )
         )
  )
)

Detection logic

Scope: inbound message.

Detects legitimate Apple TestFlight emails that reference potentially suspicious developers or apps, including variations of OpenAI, ChatGPT, or Meta in the app description or developer name fields.

  1. inbound message
  2. sender.email.domain.domain is 'email.apple.com'
  3. any of body.current_thread.links where:
    • .href_url.domain.domain in ('testflight.apple.com')
  4. any of:
    • any of html.xpath(body.html, '//h2[contains(text(), "App Description")]/ancestor::tr/following-sibling::tr//pre').nodes where:
      • any of ml.nlu_classifier(.display_text).entities where all hold:
        • .name is 'org'
        • any of ['openai', 'openal', 'open ai', 'open al', 'chatgpt', 'meta'] where:
          • strings.icontains(.text)
    • any of html.xpath(body.html, '//h2[@aria-label]').nodes where:
      • any of regex.iextract(.display_text) where:
        • any of ['openai', 'openal', 'open ai', 'open al', 'chatgpt', 'meta'] where any holds:
          • strings.icontains(.named_groups['dev_name'])
          • strings.icontains(.named_groups['app_name'])

Inspects: body.current_thread.links, body.current_thread.links[].href_url.domain.domain, body.html, sender.email.domain.domain, type.inbound. Sensors: html.xpath, ml.nlu_classifier, regex.iextract, strings.icontains.

Indicators matched (4)

FieldMatchValue
sender.email.domain.domainequalsemail.apple.com
body.current_thread.links[].href_url.domain.domainmembertestflight.apple.com
ml.nlu_classifier(html.xpath(body.html, '//h2[contains(text(), "App Description")]/ancestor::tr/following-sibling::tr//pre').nodes[].display_text).entities[].nameequalsorg
regex.iextractregex(?P<app_name>[^\r\n]+)[\r\n]+By (?P<dev_name>.*) for IOS.$

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(html.xpath(body.html, '//h2[contains(text(), "App Description")]/ancestor::tr/following-sibling::tr//pre').nodes)
      any(ml.nlu_classifier(html.xpath(body.html, '//h2[contains(text(), "App Description")]/ancestor::tr/following-sibling::tr//pre').nodes.display_text).entities)
        and
          any(['openai', 'openal', 'open ai', 'open al', 'chatgpt', 'meta'])
            strings.icontains func_call "strings.icontains(ml.nlu_classifier(html.xpath(body.html, '//h2[contains(text(), \"App Description\")]/ancestor::tr/following-sibling::tr//pre').nodes[].display_text).entities[].text)"
          ml.nlu_classifier(html.xpath(body.html, '//h2[contains(text(), "App Description")]/ancestor::tr/following-sibling::tr//pre').nodes[].display_text).entities[].name eq "org"
    any(html.xpath(body.html, '//h2[@aria-label]').nodes)
      any(regex.iextract(html.xpath(body.html, '//h2[@aria-label]').nodes.display_text))
        any(['openai', 'openal', 'open ai', 'open al', 'chatgpt', 'meta'])
          or
            strings.icontains func_call "strings.icontains(regex.iextract(html.xpath(body.html, '//h2[@aria-label]').nodes[].display_text)[].named_groups['app_name'])"
            strings.icontains func_call "strings.icontains(regex.iextract(html.xpath(body.html, '//h2[@aria-label]').nodes[].display_text)[].named_groups['dev_name'])"
  any(body.current_thread.links)
    body.current_thread.links.href_url.domain.domain eq "testflight.apple.com"
  sender.email.domain.domain eq "email.apple.com"
  type.inbound eq "true"

Indicators

These rows show field, operator, and value matches.

Service abuse: AWS SNS callback scam impersonation

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

Detects callback scam messages sent through Amazon Web Services Simple Notification Service (SNS) that impersonate well-known brands like McAfee, Norton, PayPal, and others. The rule identifies fraudulent purchase receipts or service notifications containing phone numbers to solicit victim callbacks, potentially leading to financial theft or malware installation.

Threat classification

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

CategoryValues
Attack typesCallback Phishing
Tactics and techniquesImpersonation: Brand, Out of band pivot, Social engineering

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • headers
  • headers.return_path
  • sender.email
  • subject
  • type

Rule body

type.inbound
and sender.email.email == "no-reply@sns.amazonaws.com"
and not coalesce(strings.icontains(headers.return_path.local_part,
                                   'aws-ses-bounces'
                 ),
                 false
)
and (
  any(ml.nlu_classifier(body.current_thread.text).intents,
      .name == "callback_scam" and .confidence != "low"
  )
  or (
    regex.icontains(body.current_thread.text,
                    (
                      "mcafee|n[o0]rt[o0]n|geek.{0,5}squad|paypal|ebay|symantec|best buy|lifel[o0]ck"
                    )
    )
    and (
      3 of (
        strings.ilike(body.current_thread.text, '*purchase*'),
        strings.ilike(body.current_thread.text, '*payment*'),
        strings.ilike(body.current_thread.text, '*transaction*'),
        strings.ilike(body.current_thread.text, '*subscription*'),
        strings.ilike(body.current_thread.text, '*antivirus*'),
        strings.ilike(body.current_thread.text, '*order*'),
        strings.ilike(body.current_thread.text, '*support*'),
        strings.ilike(body.current_thread.text, '*receipt*'),
        strings.ilike(body.current_thread.text, '*invoice*'),
        strings.ilike(body.current_thread.text, '*call*'),
        strings.ilike(body.current_thread.text, '*cancel*'),
        strings.ilike(body.current_thread.text, '*renew*'),
        strings.ilike(body.current_thread.text, '*refund*'),
        strings.ilike(body.current_thread.text, '*host key*')
      )
    )
    // phone number regex
    and any([body.current_thread.text, subject.subject],
            regex.icontains(.,
                            '\+?([ilo0-9]{1}.)?\(?[ilo0-9]{3}?\)?.[ilo0-9]{3}.?[ilo0-9]{4}',
                            '\+?([ilo0-9]{1,2})?\s?\(?\d{3}\)?[\s\.\-⋅]{0,5}[ilo0-9]{3}[\s\.\-⋅]{0,5}[ilo0-9]{4}'
            )
    )
  )
)

Detection logic

Scope: inbound message.

Detects callback scam messages sent through Amazon Web Services Simple Notification Service (SNS) that impersonate well-known brands like McAfee, Norton, PayPal, and others. The rule identifies fraudulent purchase receipts or service notifications containing phone numbers to solicit victim callbacks, potentially leading to financial theft or malware installation.

  1. inbound message
  2. sender.email.email is 'no-reply@sns.amazonaws.com'
  3. not:
    • coalesce(strings.icontains(headers.return_path.local_part, 'aws-ses-bounces'))
  4. any of:
    • any of ml.nlu_classifier(body.current_thread.text).intents where all hold:
      • .name is 'callback_scam'
      • .confidence is not 'low'
    • all of:
      • body.current_thread.text matches 'mcafee|n[o0]rt[o0]n|geek.{0,5}squad|paypal|ebay|symantec|best buy|lifel[o0]ck'
      • at least 3 of 14: body.current_thread.text matches any of 14 patterns
        • *purchase*
        • *payment*
        • *transaction*
        • *subscription*
        • *antivirus*
        • *order*
        • *support*
        • *receipt*
        • *invoice*
        • *call*
        • *cancel*
        • *renew*
        • *refund*
        • *host key*
      • any of [body.current_thread.text, subject.subject] where:
        • . matches any of 2 patterns
          • \+?([ilo0-9]{1}.)?\(?[ilo0-9]{3}?\)?.[ilo0-9]{3}.?[ilo0-9]{4}
          • \+?([ilo0-9]{1,2})?\s?\(?\d{3}\)?[\s\.\-⋅]{0,5}[ilo0-9]{3}[\s\.\-⋅]{0,5}[ilo0-9]{4}

Inspects: body.current_thread.text, headers.return_path.local_part, sender.email.email, subject.subject, type.inbound. Sensors: ml.nlu_classifier, regex.icontains, strings.icontains, strings.ilike.

Indicators matched (19)

FieldMatchValue
sender.email.emailequalsno-reply@sns.amazonaws.com
ml.nlu_classifier(body.current_thread.text).intents[].nameequalscallback_scam
regex.icontainsregexmcafee|n[o0]rt[o0]n|geek.{0,5}squad|paypal|ebay|symantec|best buy|lifel[o0]ck
strings.ilikesubstring*purchase*
strings.ilikesubstring*payment*
strings.ilikesubstring*transaction*
strings.ilikesubstring*subscription*
strings.ilikesubstring*antivirus*
strings.ilikesubstring*order*
strings.ilikesubstring*support*
strings.ilikesubstring*receipt*
strings.ilikesubstring*invoice*
7 more
strings.ilikesubstring*call*
strings.ilikesubstring*cancel*
strings.ilikesubstring*renew*
strings.ilikesubstring*refund*
strings.ilikesubstring*host key*
regex.icontainsregex\+?([ilo0-9]{1}.)?\(?[ilo0-9]{3}?\)?.[ilo0-9]{3}.?[ilo0-9]{4}
regex.icontainsregex\+?([ilo0-9]{1,2})?\s?\(?\d{3}\)?[\s\.\-⋅]{0,5}[ilo0-9]{3}[\s\.\-⋅]{0,5}[ilo0-9]{4}

Stages and Predicates

Stage 1: mql_rule

and
  or
    and
      any([body.current_thread.text, subject.subject])
        or
          [body.current_thread.text, subject.subject] regex_match "\\+?([ilo0-9]{1,2})?\\s?\\(?\\d{3}\\)?[\\s\\.\\-⋅]{0,5}[ilo0-9]{3}[\\s\\.\\-⋅]{0,5}[ilo0-9]{4}"
          [body.current_thread.text, subject.subject] regex_match "\\+?([ilo0-9]{1}.)?\\(?[ilo0-9]{3}?\\)?.[ilo0-9]{3}.?[ilo0-9]{4}"
      or
        body.current_thread.text match "antivirus"
        body.current_thread.text match "call"
        body.current_thread.text match "cancel"
        body.current_thread.text match "host key"
        body.current_thread.text match "invoice"
        body.current_thread.text match "order"
        body.current_thread.text match "payment"
        body.current_thread.text match "purchase"
        body.current_thread.text match "receipt"
        body.current_thread.text match "refund"
        body.current_thread.text match "renew"
        body.current_thread.text match "subscription"
        body.current_thread.text match "support"
        body.current_thread.text match "transaction"
      body.current_thread.text regex_match "mcafee|n[o0]rt[o0]n|geek.{0,5}squad|paypal|ebay|symantec|best buy|lifel[o0]ck"
    any(ml.nlu_classifier(body.current_thread.text).intents)
      and
        ml.nlu_classifier(body.current_thread.text).intents.confidence ne "low"
        ml.nlu_classifier(body.current_thread.text).intents.name eq "callback_scam"
  not
    coalesce func_call "coalesce(strings.icontains(headers.return_path.local_part, 'aws-ses-bounces'))"
  sender.email.email eq "no-reply@sns.amazonaws.com"
  type.inbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
body.current_thread.textregex_match
    • mcafee
    • n[o0]rt[o0]n
    • geek.{0,5}squad
    • paypal
    • ebay
    • symantec
    • best buy
    • lifel[o0]ck
field:"body.current_thread.text" kind:regex_match
body.current_thread.textwildcard
  • *antivirus*
  • *call*
  • *cancel*
  • *host key*
  • *invoice*
  • *order*
  • *payment*
  • *purchase*
  • *receipt*
  • *refund*
  • *renew*
  • *subscription*
  • *support*
  • *transaction*
field:"body.current_thread.text" kind:wildcard
sender.email.emaileq
  • no-reply@sns.amazonaws.com
field:"sender.email.email" kind:eq value:"no-reply@sns.amazonaws.com"
type.inboundeq
  • true transforms: boolean
field:"type.inbound" kind:eq value:"true"

Service abuse: Calendly callback scam detection

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

Detects inbound messages from Calendly's notification system that contain callback scam content, as identified through natural language processing with medium or high confidence levels.

Threat classification

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

CategoryValues
Attack typesCallback Phishing
Tactics and techniquesSocial engineering, Impersonation: Brand

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • sender.email
  • type

Rule body

type.inbound
and sender.email.email in (
  "no-reply@calendly.com",
  "notifications@calendly.com"
)
and any(ml.nlu_classifier(body.current_thread.text).intents,
        .name == "callback_scam" and .confidence != "low"
)

Detection logic

Scope: inbound message.

Detects inbound messages from Calendly's notification system that contain callback scam content, as identified through natural language processing with medium or high confidence levels.

  1. inbound message
  2. sender.email.email in ('no-reply@calendly.com', 'notifications@calendly.com')
  3. any of ml.nlu_classifier(body.current_thread.text).intents where all hold:
    • .name is 'callback_scam'
    • .confidence is not 'low'

Inspects: body.current_thread.text, sender.email.email, type.inbound. Sensors: ml.nlu_classifier.

Indicators matched (3)

FieldMatchValue
sender.email.emailmemberno-reply@calendly.com
sender.email.emailmembernotifications@calendly.com
ml.nlu_classifier(body.current_thread.text).intents[].nameequalscallback_scam

Stages and Predicates

Stage 1: mql_rule

and
  any(ml.nlu_classifier(body.current_thread.text).intents)
    and
      ml.nlu_classifier(body.current_thread.text).intents.confidence ne "low"
      ml.nlu_classifier(body.current_thread.text).intents.name eq "callback_scam"
  sender.email.email in ["no-reply@calendly.com", "notifications@calendly.com"]
  type.inbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
sender.email.emailin
  • no-reply@calendly.com
  • notifications@calendly.com
field:"sender.email.email" kind:in
type.inboundeq
  • true transforms: boolean
field:"type.inbound" kind:eq value:"true"

Service abuse: Cisco secure email service with financial request

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

Detects messages abusing Cisco's secure email service (res.cisco.com) that contain financial topics or invoice requests, with mismatched reply-to domains and undisclosed recipients.

Threat classification

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

CategoryValues
Attack typesBEC/Fraud
Tactics and techniquesImpersonation: Brand, Social engineering, Evasion

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • headers
  • headers.reply_to
  • recipients
  • recipients.to
  • sender.email
  • subject
  • type

Rule body

type.inbound
and sender.email.domain.domain == 'res.cisco.com'
and any(headers.reply_to, .email.domain.domain != 'res.cisco.com')
and (
  length(recipients.to) == 0
  or all(recipients.to, .display_name == "Undisclosed recipients")
)
and (
  any(ml.nlu_classifier(body.current_thread.text).topics,
      .name in ("Financial Communications", "Request to View Invoice")
  )
  or any(ml.nlu_classifier(subject.base).entities, .name == "financial")
)

Detection logic

Scope: inbound message.

Detects messages abusing Cisco's secure email service (res.cisco.com) that contain financial topics or invoice requests, with mismatched reply-to domains and undisclosed recipients.

  1. inbound message
  2. sender.email.domain.domain is 'res.cisco.com'
  3. any of headers.reply_to where:
    • .email.domain.domain is not 'res.cisco.com'
  4. any of:
    • length(recipients.to) is 0
    • all of recipients.to where:
      • .display_name is 'Undisclosed recipients'
  5. any of:
    • any of ml.nlu_classifier(body.current_thread.text).topics where:
      • .name in ('Financial Communications', 'Request to View Invoice')
    • any of ml.nlu_classifier(subject.base).entities where:
      • .name is 'financial'

Inspects: body.current_thread.text, headers.reply_to, headers.reply_to[].email.domain.domain, recipients.to, recipients.to[].display_name, sender.email.domain.domain, subject.base, type.inbound. Sensors: ml.nlu_classifier.

Indicators matched (5)

FieldMatchValue
sender.email.domain.domainequalsres.cisco.com
recipients.to[].display_nameequalsUndisclosed recipients
ml.nlu_classifier(body.current_thread.text).topics[].namememberFinancial Communications
ml.nlu_classifier(body.current_thread.text).topics[].namememberRequest to View Invoice
ml.nlu_classifier(subject.base).entities[].nameequalsfinancial

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(ml.nlu_classifier(body.current_thread.text).topics)
      ml.nlu_classifier(body.current_thread.text).topics.name in ["Financial Communications", "Request to View Invoice"]
    any(ml.nlu_classifier(subject.base).entities)
      ml.nlu_classifier(subject.base).entities.name eq "financial"
  any(headers.reply_to)
    headers.reply_to.email.domain.domain ne "res.cisco.com"
  or
    recipients.to length_compare "0"
     macro "all(recipients.to)"
  sender.email.domain.domain eq "res.cisco.com"
  type.inbound eq "true"

Indicators

These rows show field, operator, and value matches.

Service abuse: Citrix ShareFile impersonation via Outlook plugin

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

Detects inbound messages with Word document attachments containing references to sharefile.com and Outlook plugin system indicators, suggesting abuse of legitimate file sharing services to deliver malicious content.

Threat classification

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

CategoryValues
Attack typesBEC/Fraud, Credential Phishing
Tactics and techniquesFree file host, Social engineering

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • attachments
  • type

Rule body

type.inbound
and any(attachments,
        .file_type in ("doc", "docx")
        and any(file.explode(.),
                strings.icontains(.scan.strings.raw, "sharefile.com")
                and strings.icontains(.scan.strings.raw,
                                      "src=system-email-outlookplugin-new"
                )
        )
)  

Detection logic

Scope: inbound message.

Detects inbound messages with Word document attachments containing references to sharefile.com and Outlook plugin system indicators, suggesting abuse of legitimate file sharing services to deliver malicious content.

  1. inbound message
  2. any of attachments where all hold:
    • .file_type in ('doc', 'docx')
    • any of file.explode(.) where all hold:
      • .scan.strings.raw contains 'sharefile.com'
      • .scan.strings.raw contains 'src=system-email-outlookplugin-new'

Inspects: attachments[].file_type, type.inbound. Sensors: file.explode, strings.icontains.

Indicators matched (4)

FieldMatchValue
attachments[].file_typememberdoc
attachments[].file_typememberdocx
strings.icontainssubstringsharefile.com
strings.icontainssubstringsrc=system-email-outlookplugin-new

Stages and Predicates

Stage 1: mql_rule

and
  any(attachments)
    and
      any(file.explode(attachments))
        and
          file.explode(attachments[])[].scan.strings.raw contains "sharefile.com"
          file.explode(attachments[])[].scan.strings.raw contains "src=system-email-outlookplugin-new"
      attachments.file_type in ["doc", "docx"]
  type.inbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.inboundeq
  • true transforms: boolean
field:"type.inbound" kind:eq value:"true"

Service abuse: Cognito Forms with short body from unknown sender

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

Detects messages with a very short body (under 200 characters) that contain a link to Cognito Forms, where the sender is not Cognito Forms itself.

Threat classification

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

CategoryValues
Attack typesCredential Phishing
Tactics and techniquesSocial engineering

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • body.html
  • sender.email
  • type

Rule body

type.inbound
and regex.count(body.html.raw,
                '(?:<(?:p|div)[^>]*>\s*<br>\s*</(?:p|div)>\s*){6,}'
) >= 1
and sender.email.domain.root_domain != "cognitoforms.com"
and any(body.current_thread.links,
        .href_url.domain.root_domain == "cognitoforms.com"
        and length(.display_text) > 8
        // negating benign hits
        and not .display_text =~ "opt-out"
        and not strings.icontains(.display_text, "cognitoforms.com")
)
// negating messages which use cognito and other mailing platforms
and not any(body.current_thread.links, .display_text =~ "unsubscribe")

Detection logic

Scope: inbound message.

Detects messages with a very short body (under 200 characters) that contain a link to Cognito Forms, where the sender is not Cognito Forms itself.

  1. inbound message
  2. regex.count(body.html.raw, '(?:<(?:p|div)[^>]*>\\s*<br>\\s*</(?:p|div)>\\s*){6,}') ≥ 1
  3. sender.email.domain.root_domain is not 'cognitoforms.com'
  4. any of body.current_thread.links where all hold:
    • .href_url.domain.root_domain is 'cognitoforms.com'
    • length(.display_text) > 8
    • not:
      • .display_text is 'opt-out'
    • not:
      • .display_text contains 'cognitoforms.com'
  5. not:
    • any of body.current_thread.links where:
      • .display_text is 'unsubscribe'

Inspects: body.current_thread.links, body.current_thread.links[].display_text, body.current_thread.links[].href_url.domain.root_domain, body.html.raw, sender.email.domain.root_domain, type.inbound. Sensors: regex.count, strings.icontains.

Indicators matched (2)

FieldMatchValue
regex.countregex(?:<(?:p|div)[^>]*>\s*<br>\s*</(?:p|div)>\s*){6,}
body.current_thread.links[].href_url.domain.root_domainequalscognitoforms.com

Stages and Predicates

Stage 1: mql_rule

and
  any(body.current_thread.links)
    and
      not
        body.current_thread.links.display_text contains "cognitoforms.com"
      not
        body.current_thread.links.display_text eq "opt-out"
      body.current_thread.links.display_text length_compare "8"
      body.current_thread.links.href_url.domain.root_domain eq "cognitoforms.com"
  not
    any(body.current_thread.links)
      body.current_thread.links.display_text eq "unsubscribe"
  regex.count func_call "regex.count(body.html.raw, \"(?:<(?:p|div)[^>]*>\\s*<br>\\s*</(?:p|div)>\\s*){6,}\") >= 1"
  sender.email.domain.root_domain ne "cognitoforms.com"
  type.inbound eq "true"

Exclusions

The rule actively suppresses these predicates.

FieldKindExcluded valuesSearch
body.current_thread.linksarray_any(no value, null check)excludes:body.current_thread.links

Indicators

These rows show field, operator, and value matches.

Service abuse: Coursera callback scam

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

Detects inbound messages spoofing Coursera transactional notifications - such as email confirmation requests or account change alerts - sent from Coursera's legitimate sending infrastructure, but targeting recipients on newly registered domains or containing mailto links pointing to newly registered non-Coursera domains. The combination of authentic-looking Coursera branding with anomalous recipient or embedded contact domains suggests account takeover or credential harvesting activity targeting Coursera users.

Threat classification

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

CategoryValues
Attack typesCallback Phishing
Tactics and techniquesImpersonation: Brand, Lookalike domain, Social engineering

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • body.links
  • recipients
  • recipients.to
  • recipients.to[0]
  • sender.email
  • type

Rule body

type.inbound
// message is sent from coursera (auth doesn't really matter here)
and sender.email.domain.root_domain == "coursera.org"
and (
  // the email being changed appears in the body as a link
  any(body.links,
      .href_url.scheme == "mailto"
      and .href_url.domain.root_domain != "coursera.org"
      // the domain is newly registered
      and network.whois(.href_url.domain).days_old < 365
  )
  // in other cases the email address isn't in the email body and it's only as a rcpt
  or network.whois(recipients.to[0].email.domain).days_old < 365
  // extract the first line and do NLU on it
  or any(ml.nlu_classifier(regex.extract(body.current_thread.text,
                                         '^(?P<first_line>[^\n]+)\n'
                           )[0].named_groups["first_line"]
         ).intents,
         .name == "callback_scam" and .confidence == "high"
  )
)
// not in org_domains
and all(recipients.to, .email.domain.domain not in $org_domains)

Detection logic

Scope: inbound message.

Detects inbound messages spoofing Coursera transactional notifications - such as email confirmation requests or account change alerts - sent from Coursera's legitimate sending infrastructure, but targeting recipients on newly registered domains or containing mailto links pointing to newly registered non-Coursera domains. The combination of authentic-looking Coursera branding with anomalous recipient or embedded contact domains suggests account takeover or credential harvesting activity targeting Coursera users.

  1. inbound message
  2. sender.email.domain.root_domain is 'coursera.org'
  3. any of:
    • any of body.links where all hold:
      • .href_url.scheme is 'mailto'
      • .href_url.domain.root_domain is not 'coursera.org'
      • network.whois(.href_url.domain).days_old < 365
    • network.whois(recipients.to[0].email.domain).days_old < 365
    • any of ml.nlu_classifier(regex.extract(body.current_thread.text, '^(?P<first_line>[^\\n]+)\\n')[0].named_groups['first_line']).intents where all hold:
      • .name is 'callback_scam'
      • .confidence is 'high'
  4. all of recipients.to where:
    • .email.domain.domain not in $org_domains

Inspects: body.current_thread.text, body.links, body.links[].href_url.domain, body.links[].href_url.domain.root_domain, body.links[].href_url.scheme, recipients.to, recipients.to[0].email.domain, recipients.to[].email.domain.domain, sender.email.domain.root_domain, type.inbound. Sensors: ml.nlu_classifier, network.whois, regex.extract. Reference lists: $org_domains.

Indicators matched (5)

FieldMatchValue
sender.email.domain.root_domainequalscoursera.org
body.links[].href_url.schemeequalsmailto
regex.extractregex^(?P<first_line>[^\n]+)\n
ml.nlu_classifier(regex.extract(body.current_thread.text, '^(?P<first_line>[^\\n]+)\\n')[0].named_groups['first_line']).intents[].nameequalscallback_scam
ml.nlu_classifier(regex.extract(body.current_thread.text, '^(?P<first_line>[^\\n]+)\\n')[0].named_groups['first_line']).intents[].confidenceequalshigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(body.links)
      and
        body.links.href_url.domain.root_domain ne "coursera.org"
        body.links.href_url.scheme eq "mailto"
        network.whois func_call "network.whois(body.links[].href_url.domain).days_old < 365"
    any(ml.nlu_classifier(regex.extract(body.current_thread.text, '^(?P<first_line>[^\\n]+)\\n')[0].named_groups['first_line']).intents)
      and
        ml.nlu_classifier(regex.extract(body.current_thread.text, '^(?P<first_line>[^\\n]+)\\n')[0].named_groups['first_line']).intents.confidence eq "high"
        ml.nlu_classifier(regex.extract(body.current_thread.text, '^(?P<first_line>[^\\n]+)\\n')[0].named_groups['first_line']).intents.name eq "callback_scam"
    network.whois func_call "network.whois(recipients.to[0].email.domain).days_old < 365"
  sender.email.domain.root_domain eq "coursera.org"
  type.inbound eq "true"
   macro "all(recipients.to)"

Indicators

These rows show field, operator, and value matches.

Service abuse: Elastic alerts extortion

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

Detects inbound messages impersonating Elastic alerts sender that contain extortion content identified through natural language processing with medium to high confidence.

Threat classification

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

CategoryValues
Attack typesExtortion
Tactics and techniquesImpersonation: Brand, Social engineering

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • sender.email
  • type

Rule body

type.inbound
and sender.email.email == "noreply@alerts.elastic.co"
and any(ml.nlu_classifier(body.current_thread.text).intents,
        .name == "extortion" and .confidence != "low"
)

Detection logic

Scope: inbound message.

Detects inbound messages impersonating Elastic alerts sender that contain extortion content identified through natural language processing with medium to high confidence.

  1. inbound message
  2. sender.email.email is 'noreply@alerts.elastic.co'
  3. any of ml.nlu_classifier(body.current_thread.text).intents where all hold:
    • .name is 'extortion'
    • .confidence is not 'low'

Inspects: body.current_thread.text, sender.email.email, type.inbound. Sensors: ml.nlu_classifier.

Indicators matched (2)

FieldMatchValue
sender.email.emailequalsnoreply@alerts.elastic.co
ml.nlu_classifier(body.current_thread.text).intents[].nameequalsextortion

Stages and Predicates

Stage 1: mql_rule

and
  any(ml.nlu_classifier(body.current_thread.text).intents)
    and
      ml.nlu_classifier(body.current_thread.text).intents.confidence ne "low"
      ml.nlu_classifier(body.current_thread.text).intents.name eq "extortion"
  sender.email.email eq "noreply@alerts.elastic.co"
  type.inbound eq "true"

Indicators

These rows show field, operator, and value matches.

Service abuse: Facebook business with action required subject

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

Detects messages from the Facebook business domain containing 'action required' in the subject line, commonly used to create urgency in impersonation attacks.

Threat classification

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

CategoryValues
Attack typesCredential Phishing
Tactics and techniquesImpersonation: Brand, Social engineering

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • body.links
  • sender.email
  • subject
  • type

Rule body

type.inbound
and (
  sender.email.domain.root_domain == "facebook.com"
  or sender.email.domain.root_domain == "facebookmail.com"
)
and 3 of (
  strings.icontains(subject.subject, "Action required"),
  strings.icontains(subject.subject, "invited to join"),
  strings.icontains(subject.subject, "partner request"),
  strings.icontains(body.current_thread.text, "You've been invited"),
  strings.icontains(body.current_thread.text, "You're invited"),
  strings.icontains(body.current_thread.text,
                    "You've received a partner request"
  ),
  strings.icontains(body.current_thread.text,
                    "not part of or affiliated with Meta"
  ),
  strings.icontains(body.current_thread.text, "Agency Partner")
)
and (
  // and the link is recently registered
  any(body.links, network.whois(.href_url.domain).days_old <= 30)
  or any(body.links,
         // if the link is still active, check if it's cred theft
         any(ml.nlu_classifier(beta.ocr(ml.link_analysis(.).screenshot).text).intents,
             .name == "cred_theft" and .confidence != "low"
         )
  )
  // or look for the legit Meta footer address
  or strings.icontains(body.current_thread.text,
                       '1 Meta Way, Menlo Park, CA 94025'
  )
)

Detection logic

Scope: inbound message.

Detects messages from the Facebook business domain containing 'action required' in the subject line, commonly used to create urgency in impersonation attacks.

  1. inbound message
  2. any of:
    • sender.email.domain.root_domain is 'facebook.com'
    • sender.email.domain.root_domain is 'facebookmail.com'
  3. at least 3 of:
    • subject.subject contains 'Action required'
    • subject.subject contains 'invited to join'
    • subject.subject contains 'partner request'
    • body.current_thread.text contains "You've been invited"
    • body.current_thread.text contains "You're invited"
    • body.current_thread.text contains "You've received a partner request"
    • body.current_thread.text contains 'not part of or affiliated with Meta'
    • body.current_thread.text contains 'Agency Partner'
  4. any of:
    • any of body.links where:
      • network.whois(.href_url.domain).days_old ≤ 30
    • any of body.links where:
      • any of ml.nlu_classifier(beta.ocr(ml.link_analysis(.).screenshot).text).intents where all hold:
        • .name is 'cred_theft'
        • .confidence is not 'low'
    • body.current_thread.text contains '1 Meta Way, Menlo Park, CA 94025'

Inspects: body.current_thread.text, body.links, body.links[].href_url.domain, sender.email.domain.root_domain, subject.subject, type.inbound. Sensors: beta.ocr, ml.link_analysis, ml.nlu_classifier, network.whois, strings.icontains.

Indicators matched (12)

FieldMatchValue
sender.email.domain.root_domainequalsfacebook.com
sender.email.domain.root_domainequalsfacebookmail.com
strings.icontainssubstringAction required
strings.icontainssubstringinvited to join
strings.icontainssubstringpartner request
strings.icontainssubstringYou've been invited
strings.icontainssubstringYou're invited
strings.icontainssubstringYou've received a partner request
strings.icontainssubstringnot part of or affiliated with Meta
strings.icontainssubstringAgency Partner
ml.nlu_classifier(beta.ocr(ml.link_analysis(body.links[]).screenshot).text).intents[].nameequalscred_theft
strings.icontainssubstring1 Meta Way, Menlo Park, CA 94025

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(body.links)
      any(ml.nlu_classifier(beta.ocr(ml.link_analysis(body.links).screenshot).text).intents)
        and
          ml.nlu_classifier(beta.ocr(ml.link_analysis(body.links[]).screenshot).text).intents[].confidence ne "low"
          ml.nlu_classifier(beta.ocr(ml.link_analysis(body.links[]).screenshot).text).intents[].name eq "cred_theft"
    any(body.links)
      network.whois func_call "network.whois(body.links[].href_url.domain).days_old <= 30"
    body.current_thread.text contains "1 Meta Way, Menlo Park, CA 94025"
  or
    body.current_thread.text contains "Agency Partner"
    body.current_thread.text contains "You're invited"
    body.current_thread.text contains "You've been invited"
    body.current_thread.text contains "You've received a partner request"
    body.current_thread.text contains "not part of or affiliated with Meta"
    subject.subject contains "Action required"
    subject.subject contains "invited to join"
    subject.subject contains "partner request"
  or
    sender.email.domain.root_domain eq "facebook.com"
    sender.email.domain.root_domain eq "facebookmail.com"
  type.inbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
body.current_thread.textcontains
  • 1 Meta Way, Menlo Park, CA 94025
  • Agency Partner
  • You're invited
  • You've been invited
  • You've received a partner request
  • not part of or affiliated with Meta
field:"body.current_thread.text" kind:contains
sender.email.domain.root_domaineq
  • facebook.com
  • facebookmail.com
field:"sender.email.domain.root_domain" kind:eq
subject.subjectcontains
  • Action required
  • invited to join
  • partner request
field:"subject.subject" kind:contains
type.inboundeq
  • true transforms: boolean
field:"type.inbound" kind:eq value:"true"

Service abuse: Facebook mail notification callback scam

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

Detects inbound messages spoofing Facebook's official notification address that contain callback scam intent identified with medium or high confidence. Attackers leverage the trusted Facebook sender identity to deceive recipients into calling a fraudulent phone number.

Threat classification

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

CategoryValues
Attack typesCallback Phishing
Tactics and techniquesImpersonation: Brand, Social engineering, Spoofing

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • sender.email
  • subject
  • type

Rule body

type.inbound
and sender.email.email == "notification@facebookmail.com"
// legitimate messages from this address use Facebook as the display name
and sender.display_name != "Facebook"
and (
  any(ml.nlu_classifier(body.current_thread.text).intents,
      .name == "callback_scam" and .confidence != "low"
  )
  or (
    regex.icontains(body.current_thread.text,
                    (
                      "mcafee|n[o0]rt[o0]n|geek.{0,5}squad|paypal|ebay|symantec|best buy|lifel[o0]ck"
                    )
    )
    and (
      3 of (
        strings.ilike(body.current_thread.text, '*purchase*'),
        strings.ilike(body.current_thread.text, '*payment*'),
        strings.ilike(body.current_thread.text, '*transaction*'),
        strings.ilike(body.current_thread.text, '*subscription*'),
        strings.ilike(body.current_thread.text, '*antivirus*'),
        strings.ilike(body.current_thread.text, '*order*'),
        strings.ilike(body.current_thread.text, '*support*'),
        strings.ilike(body.current_thread.text, '*receipt*'),
        strings.ilike(body.current_thread.text, '*invoice*'),
        strings.ilike(body.current_thread.text, '*call*'),
        strings.ilike(body.current_thread.text, '*cancel*'),
        strings.ilike(body.current_thread.text, '*renew*'),
        strings.ilike(body.current_thread.text, '*refund*'),
        strings.ilike(body.current_thread.text, '*host key*')
      )
    )
    // phone number regex
    and any([body.current_thread.text, subject.subject],
            regex.icontains(strings.replace_confusables(.),
                            '\+?([ilo0-9]{1}.)?\(?[ilo0-9]{3}?\)?.[ilo0-9]{3}.?[ilo0-9]{4}',
                            '\+?([ilo0-9]{1,2})?\s?\(?\d{3}\)?[\s\.\-⋅]{0,5}[ilo0-9]{3}[\s\.\-⋅]{0,5}[ilo0-9]{4}',
                            '[\+\x{FF0B}]?(?:[0-9\x{FF10}-\x{FF19}][^0-9\x{FF10}-\x{FF19}]{0,3}){10,11}'
            )
    )
  )
)

Detection logic

Scope: inbound message.

Detects inbound messages spoofing Facebook's official notification address that contain callback scam intent identified with medium or high confidence. Attackers leverage the trusted Facebook sender identity to deceive recipients into calling a fraudulent phone number.

  1. inbound message
  2. sender.email.email is 'notification@facebookmail.com'
  3. sender.display_name is not 'Facebook'
  4. any of:
    • any of ml.nlu_classifier(body.current_thread.text).intents where all hold:
      • .name is 'callback_scam'
      • .confidence is not 'low'
    • all of:
      • body.current_thread.text matches 'mcafee|n[o0]rt[o0]n|geek.{0,5}squad|paypal|ebay|symantec|best buy|lifel[o0]ck'
      • at least 3 of 14: body.current_thread.text matches any of 14 patterns
        • *purchase*
        • *payment*
        • *transaction*
        • *subscription*
        • *antivirus*
        • *order*
        • *support*
        • *receipt*
        • *invoice*
        • *call*
        • *cancel*
        • *renew*
        • *refund*
        • *host key*
      • any of [body.current_thread.text, subject.subject] where:
        • strings.replace_confusables(.) matches any of 3 patterns
          • \+?([ilo0-9]{1}.)?\(?[ilo0-9]{3}?\)?.[ilo0-9]{3}.?[ilo0-9]{4}
          • \+?([ilo0-9]{1,2})?\s?\(?\d{3}\)?[\s\.\-⋅]{0,5}[ilo0-9]{3}[\s\.\-⋅]{0,5}[ilo0-9]{4}
          • [\+\x{FF0B}]?(?:[0-9\x{FF10}-\x{FF19}][^0-9\x{FF10}-\x{FF19}]{0,3}){10,11}

Inspects: body.current_thread.text, sender.display_name, sender.email.email, subject.subject, type.inbound. Sensors: ml.nlu_classifier, regex.icontains, strings.ilike, strings.replace_confusables.

Indicators matched (20)

FieldMatchValue
sender.email.emailequalsnotification@facebookmail.com
ml.nlu_classifier(body.current_thread.text).intents[].nameequalscallback_scam
regex.icontainsregexmcafee|n[o0]rt[o0]n|geek.{0,5}squad|paypal|ebay|symantec|best buy|lifel[o0]ck
strings.ilikesubstring*purchase*
strings.ilikesubstring*payment*
strings.ilikesubstring*transaction*
strings.ilikesubstring*subscription*
strings.ilikesubstring*antivirus*
strings.ilikesubstring*order*
strings.ilikesubstring*support*
strings.ilikesubstring*receipt*
strings.ilikesubstring*invoice*
8 more
strings.ilikesubstring*call*
strings.ilikesubstring*cancel*
strings.ilikesubstring*renew*
strings.ilikesubstring*refund*
strings.ilikesubstring*host key*
regex.icontainsregex\+?([ilo0-9]{1}.)?\(?[ilo0-9]{3}?\)?.[ilo0-9]{3}.?[ilo0-9]{4}
regex.icontainsregex\+?([ilo0-9]{1,2})?\s?\(?\d{3}\)?[\s\.\-⋅]{0,5}[ilo0-9]{3}[\s\.\-⋅]{0,5}[ilo0-9]{4}
regex.icontainsregex[\+\x{FF0B}]?(?:[0-9\x{FF10}-\x{FF19}][^0-9\x{FF10}-\x{FF19}]{0,3}){10,11}

Stages and Predicates

Stage 1: mql_rule

and
  or
    and
      any([body.current_thread.text, subject.subject])
        or
          strings.replace_confusables([body.current_thread.text, subject.subject][]) regex_match "[\\+\\x{FF0B}]?(?:[0-9\\x{FF10}-\\x{FF19}][^0-9\\x{FF10}-\\x{FF19}]{0,3}){10,11}"
          strings.replace_confusables([body.current_thread.text, subject.subject][]) regex_match "\\+?([ilo0-9]{1,2})?\\s?\\(?\\d{3}\\)?[\\s\\.\\-⋅]{0,5}[ilo0-9]{3}[\\s\\.\\-⋅]{0,5}[ilo0-9]{4}"
          strings.replace_confusables([body.current_thread.text, subject.subject][]) regex_match "\\+?([ilo0-9]{1}.)?\\(?[ilo0-9]{3}?\\)?.[ilo0-9]{3}.?[ilo0-9]{4}"
      or
        body.current_thread.text match "antivirus"
        body.current_thread.text match "call"
        body.current_thread.text match "cancel"
        body.current_thread.text match "host key"
        body.current_thread.text match "invoice"
        body.current_thread.text match "order"
        body.current_thread.text match "payment"
        body.current_thread.text match "purchase"
        body.current_thread.text match "receipt"
        body.current_thread.text match "refund"
        body.current_thread.text match "renew"
        body.current_thread.text match "subscription"
        body.current_thread.text match "support"
        body.current_thread.text match "transaction"
      body.current_thread.text regex_match "mcafee|n[o0]rt[o0]n|geek.{0,5}squad|paypal|ebay|symantec|best buy|lifel[o0]ck"
    any(ml.nlu_classifier(body.current_thread.text).intents)
      and
        ml.nlu_classifier(body.current_thread.text).intents.confidence ne "low"
        ml.nlu_classifier(body.current_thread.text).intents.name eq "callback_scam"
  sender.display_name ne "Facebook"
  sender.email.email eq "notification@facebookmail.com"
  type.inbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
body.current_thread.textregex_match
    • mcafee
    • n[o0]rt[o0]n
    • geek.{0,5}squad
    • paypal
    • ebay
    • symantec
    • best buy
    • lifel[o0]ck
field:"body.current_thread.text" kind:regex_match
body.current_thread.textwildcard
  • *antivirus*
  • *call*
  • *cancel*
  • *host key*
  • *invoice*
  • *order*
  • *payment*
  • *purchase*
  • *receipt*
  • *refund*
  • *renew*
  • *subscription*
  • *support*
  • *transaction*
field:"body.current_thread.text" kind:wildcard
sender.display_namene
  • Facebook
field:"sender.display_name" kind:ne value:"Facebook"
sender.email.emaileq
  • notification@facebookmail.com
field:"sender.email.email" kind:eq value:"notification@facebookmail.com"
type.inboundeq
  • true transforms: boolean
field:"type.inbound" kind:eq value:"true"

Service abuse: Fake loan/funding verification lure via Mailgun

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

Detects inbound messages sent via Mailgun's sending infrastructure (mg subdomain) from common bulk sender addresses, where the body contains unresolved template placeholders like '[SOURCEID]', known Mailgun-associated physical addresses, or links pointing to Mailgun's campaign/list management subdomain (napp) on the same root domain as the sender. These indicators suggest automated bulk distribution with incomplete template rendering or suspicious infrastructure usage.

Threat classification

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

CategoryValues
Attack typesCredential Phishing
Tactics and techniquesImpersonation: Brand, Evasion, Social engineering

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • body.links
  • sender.email
  • type

Rule body

type.inbound
and sender.email.local_part in~ ("info", "no-reply", "noreply")
and sender.email.domain.subdomain == "mg"
and (
  any(body.links,
      .href_url.domain.subdomain == "napp"
      and .href_url.domain.root_domain == sender.email.domain.root_domain
      and (
        strings.istarts_with(.href_url.path, "/campaigns/")
        or strings.istarts_with(.href_url.path, "/lists/")
      )
  )
  or strings.icontains(body.current_thread.text,
                       "12603 State Route 143 Suite G",
                       "4049 US Highway 231 #2002 Wetumpka, AL 36093"
  )
  or strings.icontains(body.current_thread.text, "[SOURCEID]")
) 

Detection logic

Scope: inbound message.

Detects inbound messages sent via Mailgun's sending infrastructure (mg subdomain) from common bulk sender addresses, where the body contains unresolved template placeholders like '[SOURCEID]', known Mailgun-associated physical addresses, or links pointing to Mailgun's campaign/list management subdomain (napp) on the same root domain as the sender. These indicators suggest automated bulk distribution with incomplete template rendering or suspicious infrastructure usage.

  1. inbound message
  2. sender.email.local_part in ('info', 'no-reply', 'noreply')
  3. sender.email.domain.subdomain is 'mg'
  4. any of:
    • any of body.links where all hold:
      • .href_url.domain.subdomain is 'napp'
      • .href_url.domain.root_domain is sender.email.domain.root_domain
      • any of:
        • .href_url.path starts with '/campaigns/'
        • .href_url.path starts with '/lists/'
    • body.current_thread.text contains any of 2 patterns
      • 12603 State Route 143 Suite G
      • 4049 US Highway 231 #2002 Wetumpka, AL 36093
    • body.current_thread.text contains '[SOURCEID]'

Inspects: body.current_thread.text, body.links, body.links[].href_url.domain.root_domain, body.links[].href_url.domain.subdomain, body.links[].href_url.path, sender.email.domain.root_domain, sender.email.domain.subdomain, sender.email.local_part, type.inbound. Sensors: strings.icontains, strings.istarts_with.

Indicators matched (10)

FieldMatchValue
sender.email.local_partmemberinfo
sender.email.local_partmemberno-reply
sender.email.local_partmembernoreply
sender.email.domain.subdomainequalsmg
body.links[].href_url.domain.subdomainequalsnapp
strings.istarts_withprefix/campaigns/
strings.istarts_withprefix/lists/
strings.icontainssubstring12603 State Route 143 Suite G
strings.icontainssubstring4049 US Highway 231 #2002 Wetumpka, AL 36093
strings.icontainssubstring[SOURCEID]

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(body.links)
      and
        or
          body.links.href_url.path starts_with "/campaigns/"
          body.links.href_url.path starts_with "/lists/"
        body.links.href_url.domain.root_domain cross_field_compare "sender.email.domain.root_domain"
        body.links.href_url.domain.subdomain eq "napp"
    body.current_thread.text contains "12603 State Route 143 Suite G"
    body.current_thread.text contains "4049 US Highway 231 #2002 Wetumpka, AL 36093"
    body.current_thread.text contains "[SOURCEID]"
  sender.email.domain.subdomain eq "mg"
  sender.email.local_part in ["info", "no-reply", "noreply"]
  type.inbound eq "true"

Indicators

These rows show field, operator, and value matches.

Service abuse: FileMail callback scam

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

Detects inbound messages from FileMail's no-reply address where the first line of the email body is classified with high confidence as a callback scam using natural language understanding. Attackers leverage legitimate file sharing services to deliver fraudulent messages that instruct recipients to call a phone number, often impersonating tech support or financial institutions.

Threat classification

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

CategoryValues
Attack typesCallback Phishing
Tactics and techniquesSocial engineering, Free file host, Out of band pivot

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • sender.email
  • type

Rule body

type.inbound
and sender.email.email == "no-reply@filemail.com"
and any(ml.nlu_classifier(regex.extract(body.current_thread.text,
                                        '^(?P<first_line>[^\n]+)\n'
                          )[0].named_groups["first_line"]
        ).intents,
        .name == "callback_scam" and .confidence == "high"
)

Detection logic

Scope: inbound message.

Detects inbound messages from FileMail's no-reply address where the first line of the email body is classified with high confidence as a callback scam using natural language understanding. Attackers leverage legitimate file sharing services to deliver fraudulent messages that instruct recipients to call a phone number, often impersonating tech support or financial institutions.

  1. inbound message
  2. sender.email.email is 'no-reply@filemail.com'
  3. any of ml.nlu_classifier(regex.extract(body.current_thread.text, '^(?P<first_line>[^\\n]+)\\n')[0].named_groups['first_line']).intents where all hold:
    • .name is 'callback_scam'
    • .confidence is 'high'

Inspects: body.current_thread.text, sender.email.email, type.inbound. Sensors: ml.nlu_classifier, regex.extract.

Indicators matched (4)

FieldMatchValue
sender.email.emailequalsno-reply@filemail.com
regex.extractregex^(?P<first_line>[^\n]+)\n
ml.nlu_classifier(regex.extract(body.current_thread.text, '^(?P<first_line>[^\\n]+)\\n')[0].named_groups['first_line']).intents[].nameequalscallback_scam
ml.nlu_classifier(regex.extract(body.current_thread.text, '^(?P<first_line>[^\\n]+)\\n')[0].named_groups['first_line']).intents[].confidenceequalshigh

Stages and Predicates

Stage 1: mql_rule

and
  any(ml.nlu_classifier(regex.extract(body.current_thread.text, '^(?P<first_line>[^\\n]+)\\n')[0].named_groups['first_line']).intents)
    and
      ml.nlu_classifier(regex.extract(body.current_thread.text, '^(?P<first_line>[^\\n]+)\\n')[0].named_groups['first_line']).intents.confidence eq "high"
      ml.nlu_classifier(regex.extract(body.current_thread.text, '^(?P<first_line>[^\\n]+)\\n')[0].named_groups['first_line']).intents.name eq "callback_scam"
  sender.email.email eq "no-reply@filemail.com"
  type.inbound eq "true"

Indicators

These rows show field, operator, and value matches.

Service abuse: Free provider with SendGrid routing

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

Message From header includes a free email provider domain but is routed through SendGrid infrastructure, indicating potential service abuse for delivery evasion.

Threat classification

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

CategoryValues
Attack typesCredential Phishing
Tactics and techniquesFree email provider, Evasion

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • headers
  • headers.domains
  • sender.email
  • type

Rule body

type.inbound
and sender.email.domain.domain in $free_email_providers
and any(headers.domains, .root_domain == "sendgrid.net")
and not any(ml.nlu_classifier(body.current_thread.text).intents,
            .name == "benign"
)
and not any(ml.nlu_classifier(body.current_thread.text).topics,
            .name == "Bounce Back and Delivery Failure Notifications"
)

Detection logic

Scope: inbound message.

Message From header includes a free email provider domain but is routed through SendGrid infrastructure, indicating potential service abuse for delivery evasion.

  1. inbound message
  2. sender.email.domain.domain in $free_email_providers
  3. any of headers.domains where:
    • .root_domain is 'sendgrid.net'
  4. not:
    • any of ml.nlu_classifier(body.current_thread.text).intents where:
      • .name is 'benign'
  5. not:
    • any of ml.nlu_classifier(body.current_thread.text).topics where:
      • .name is 'Bounce Back and Delivery Failure Notifications'

Inspects: body.current_thread.text, headers.domains, headers.domains[].root_domain, sender.email.domain.domain, type.inbound. Sensors: ml.nlu_classifier. Reference lists: $free_email_providers.

Indicators matched (1)

FieldMatchValue
headers.domains[].root_domainequalssendgrid.net

Stages and Predicates

Stage 1: mql_rule

and
  not
    any(ml.nlu_classifier(body.current_thread.text).intents)
      ml.nlu_classifier(body.current_thread.text).intents.name eq "benign"
  not
    any(ml.nlu_classifier(body.current_thread.text).topics)
      ml.nlu_classifier(body.current_thread.text).topics.name eq "Bounce Back and Delivery Failure Notifications"
  any(headers.domains)
    headers.domains.root_domain eq "sendgrid.net"
  type.inbound eq "true"
   macro "sender.email.domain.domain in free_email_providers"

Exclusions

The rule actively suppresses these predicates.

FieldKindExcluded valuesSearch
ml.nlu_classifier(body.current_thread.text).intentsarray_any(no value, null check)excludes:ml.nlu_classifier(body.current_thread.text).intents
ml.nlu_classifier(body.current_thread.text).topicsarray_any(no value, null check)excludes:ml.nlu_classifier(body.current_thread.text).topics

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.inboundeq
  • true transforms: boolean
field:"type.inbound" kind:eq value:"true"

Service abuse: GetAccept callback scam content

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

Detects callback scam language in messages sent through legitimate GetAccept infrastructure, indicating potential abuse of the service for fraudulent solicitation.

Threat classification

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

CategoryValues
Attack typesCallback Phishing
Tactics and techniquesOut of band pivot, Social engineering

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • sender.email
  • type

Rule body

type.inbound
// Legitimate GetAccept sending infrastructure
and sender.email.domain.root_domain == 'getaccept.com'
and any(ml.nlu_classifier(body.current_thread.text).intents,
        .name == "callback_scam"
)

Detection logic

Scope: inbound message.

Detects callback scam language in messages sent through legitimate GetAccept infrastructure, indicating potential abuse of the service for fraudulent solicitation.

  1. inbound message
  2. sender.email.domain.root_domain is 'getaccept.com'
  3. any of ml.nlu_classifier(body.current_thread.text).intents where:
    • .name is 'callback_scam'

Inspects: body.current_thread.text, sender.email.domain.root_domain, type.inbound. Sensors: ml.nlu_classifier.

Indicators matched (2)

FieldMatchValue
sender.email.domain.root_domainequalsgetaccept.com
ml.nlu_classifier(body.current_thread.text).intents[].nameequalscallback_scam

Stages and Predicates

Stage 1: mql_rule

and
  any(ml.nlu_classifier(body.current_thread.text).intents)
    ml.nlu_classifier(body.current_thread.text).intents.name eq "callback_scam"
  sender.email.domain.root_domain eq "getaccept.com"
  type.inbound eq "true"

Indicators

These rows show field, operator, and value matches.

Service abuse: GitHub notification with excessive mentions and suspicious links

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

Detects messages impersonating GitHub notifications that contain excessive @ mentions (over 20) and include a single suspicious external link. The suspicious link may be from free file hosts, free subdomain hosts, URL shorteners, or newly registered domains. The rule filters out legitimate GitHub domains and internal employee communications while identifying potential abuse of GitHub's notification system.

Threat classification

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

CategoryValues
Attack typesCredential Phishing, Malware/Ransomware
Tactics and techniquesFree file host, Free subdomain host, Social engineering

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • body.links
  • headers
  • headers.reply_to
  • headers.return_path
  • recipients
  • recipients.cc
  • sender.email
  • type

Rule body

type.inbound
// actual GitHub notifications
and sender.email.email == "notifications@github.com"
and all(headers.reply_to, .email.domain.domain == "reply.github.com")
and headers.return_path.email == "noreply@github.com"
// the Message-ID field will contain the unsubscribe link in the body
and strings.icontains(headers.message_id,
                      body.links[length(body.links) - 1].href_url.url
)

// negating out-of-scope notification emails from github
and not any(recipients.cc,
            .email.domain.root_domain == "github.com"
            and .email.local_part in (
              "assign",
              "comment",
              "review_requested",
              "author",
              "subscribed",
              "state_change",
              "team_mention"
            )
)

// do not match messages where the sender display name is in the org display names.
// This attempts to avoid catching internal employees commenting on org repos
and not any($org_display_names, . =~ sender.display_name)

// there is only a single external link
and length(distinct(filter(body.links,
                           // filter any links that go back to github
                           .href_url.domain.root_domain not in (
                             'github.com',
                             'githubusercontent.com',
                             'github.io',
                             'githubsupport.com',
                             'githubstatus.com'
                           )
                           // remove embedded images
                           and not (
                             strings.ends_with(.href_url.url, ".jpg")
                             or strings.ends_with(.href_url.url, "png")
                             or strings.ends_with(.href_url.url, ".svg")
                             or strings.ends_with(.href_url.url, ".gif")
                           )
                           // remove aws codesuite links
                           and not (
                             .href_url.domain.root_domain == "amazon.com"
                             and strings.istarts_with(.href_url.path,
                                                      '/codesuite/'
                             )
                           )
                    ),
                    .href_url.domain.domain
           )
) == 1

// that single link is suspicious
and any(
        // filter any links that go back to github
        filter(body.links,
               .href_url.domain.root_domain not in (
                 'github.com',
                 'githubusercontent.com',
                 'github.io',
                 'githubsupport.com',
                 'githubstatus.com'
               )
        ),
        // see if the remaining links are within several lists
        .href_url.domain.root_domain in $free_file_hosts
        or (
          .href_url.domain.root_domain in $free_subdomain_hosts
          and .href_url.domain.subdomain is not null
        )
        or .href_url.domain.root_domain in $url_shorteners
        // the domain is less than 20 days old
        or network.whois(.href_url.domain).days_old < 20
)

// The main abuse point is that they will @ multiple people in the github notification
and length(filter(body.current_thread.links,
                  strings.starts_with(.display_text, "@")
           )
) > 20

Detection logic

Scope: inbound message.

Detects messages impersonating GitHub notifications that contain excessive @ mentions (over 20) and include a single suspicious external link. The suspicious link may be from free file hosts, free subdomain hosts, URL shorteners, or newly registered domains. The rule filters out legitimate GitHub domains and internal employee communications while identifying potential abuse of GitHub's notification system.

  1. inbound message
  2. sender.email.email is 'notifications@github.com'
  3. all of headers.reply_to where:
    • .email.domain.domain is 'reply.github.com'
  4. headers.return_path.email is 'noreply@github.com'
  5. strings.icontains(headers.message_id)
  6. not:
    • any of recipients.cc where all hold:
      • .email.domain.root_domain is 'github.com'
      • .email.local_part in ('assign', 'comment', 'review_requested', 'author', 'subscribed', 'state_change', 'team_mention')
  7. not:
    • any of $org_display_names where:
      • . is sender.display_name
  8. length(distinct(filter(body.links, .href_url.domain.root_domain not in ('github.com', 'githubusercontent.com', 'github.io', 'githubsupport.com', 'githubstatus.com') and not strings.ends_with(.href_url.url, '.jpg') or strings.ends_with(.href_url.url, 'png') or strings.ends_with(.href_url.url, '.svg') or strings.ends_with(.href_url.url, '.gif') and not .href_url.domain.root_domain == 'amazon.com' and strings.istarts_with(.href_url.path, '/codesuite/')), .href_url.domain.domain)) is 1
  9. any of filter(body.links) where any holds:
    • .href_url.domain.root_domain in $free_file_hosts
    • all of:
      • .href_url.domain.root_domain in $free_subdomain_hosts
      • .href_url.domain.subdomain is set
    • .href_url.domain.root_domain in $url_shorteners
    • network.whois(.href_url.domain).days_old < 20
  10. length(filter(body.current_thread.links, strings.starts_with(.display_text, '@'))) > 20

Inspects: body.current_thread.links, body.current_thread.links[].display_text, body.links, body.links[].href_url.domain.root_domain, body.links[].href_url.path, body.links[].href_url.url, headers.message_id, headers.reply_to, headers.reply_to[].email.domain.domain, headers.return_path.email, recipients.cc, recipients.cc[].email.domain.root_domain, recipients.cc[].email.local_part, sender.display_name, sender.email.email, type.inbound. Sensors: network.whois, strings.ends_with, strings.icontains, strings.istarts_with, strings.starts_with. Reference lists: $free_file_hosts, $free_subdomain_hosts, $org_display_names, $url_shorteners.

Indicators matched (4)

FieldMatchValue
sender.email.emailequalsnotifications@github.com
headers.reply_to[].email.domain.domainequalsreply.github.com
headers.return_path.emailequalsnoreply@github.com
strings.starts_withprefix@

Stages and Predicates

Stage 1: mql_rule

and
  any(filter(body.links))
    or
      and
        filter(body.links).href_url.domain.subdomain is_not_null
         macro "filter(body.links)[].href_url.domain.root_domain in free_subdomain_hosts"
      network.whois func_call "network.whois(filter(body.links)[].href_url.domain).days_old < 20"
       macro "filter(body.links)[].href_url.domain.root_domain in free_file_hosts"
       macro "filter(body.links)[].href_url.domain.root_domain in url_shorteners"
  not
    any(recipients.cc)
      and
        recipients.cc.email.domain.root_domain eq "github.com"
        recipients.cc.email.local_part in ["assign", "author", "comment", "review_requested", "state_change", "subscribed", "team_mention"]
  not
    any($org_display_names)
      $org_display_names cross_field_compare "sender.display_name"
  distinct(filter(body.links, .href_url.domain.root_domain not in ('github.com', 'githubusercontent.com', 'github.io', 'githubsupport.com', 'githubstatus.com') and not strings.ends_with(.href_url.url, '.jpg') or strings.ends_with(.href_url.url, 'png') or strings.ends_with(.href_url.url, '.svg') or strings.ends_with(.href_url.url, '.gif') and not .href_url.domain.root_domain == 'amazon.com' and strings.istarts_with(.href_url.path, '/codesuite/')), .href_url.domain.domain) length_compare "1"
  filter(body.current_thread.links, strings.starts_with(.display_text, '@')) length_compare "20"
  headers.return_path.email eq "noreply@github.com"
  sender.email.email eq "notifications@github.com"
  strings.icontains func_call "strings.icontains(headers.message_id)"
  type.inbound eq "true"
   macro "all(headers.reply_to)"

Exclusions

The rule actively suppresses these predicates.

FieldKindExcluded valuesSearch
recipients.ccarray_any(no value, null check)excludes:recipients.cc
$org_display_namesarray_any(no value, null check)excludes:$org_display_names

Indicators

These rows show field, operator, and value matches.

Service Abuse: GoDaddy infrastructure

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

Detects messages from legitimate GoDaddy domains with suspicious indicators. Observed abused for call back phishing and extortion campaigns.

Threat classification

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

CategoryValues
Attack typesCallback Phishing, Extortion
Tactics and techniquesEvasion

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • body.links
  • headers
  • headers.auth_summary
  • sender.email
  • subject
  • type

Rule body

type.inbound
and length(attachments) == 0
// legitimate GoDaddy sending infrastructure
and (
  sender.email.domain.root_domain == "godaddy.com"
  and headers.auth_summary.dmarc.pass
)
and any(body.links, .display_text in~ ("Pay Now", "Accept Access"))
and (
  (
    any(ml.nlu_classifier(body.current_thread.text).intents,
        .name in~ ("callback_scam", "cred_theft", "extortion")
        and .confidence == "high"
    )
  )
  // manual extortion indicators
  or (
    regex.icontains(sender.display_name,
                    'big(\s|[[:punct:]])?brother|seeing(\s|[[:punct:]])?eye'
    )
    or regex.icontains(body.current_thread.text,
                       '((I|you).{0,25}(leak|compromise|hack|see|record|expose))|(dirty|little) secret'
    )
  )
  // manual callback phishing indicators
  or (
    // phone number in display name or subject
    any([sender.display_name, subject.base],
        regex.icontains(.,
                        '\b\+?([ilo0-9]{1}.)?\(?[ilo0-9]{3}?\)?.[ilo0-9]{3}.?[ilo0-9]{4}\b'
        )
    )
    // references commonly impersonated brands in body
    or strings.ilike(strings.replace_confusables(body.current_thread.text),
                     "*Pay?Pal*",
                     "*Best?Buy*",
                     "*Geek?Squad*",
    )
  )
  // emojis in link display text
  or any(body.links,
         regex.contains(.display_text,
                        '[\x{1F300}-\x{1F5FF}\x{1F600}-\x{1F64F}\x{1F680}-\x{1F6FF}\x{1F700}-\x{1F77F}\x{1F780}-\x{1F7FF}\x{1F900}-\x{1F9FF}\x{2600}-\x{26FF}\x{2700}-\x{27BF}\x{2300}-\x{23FF}]'
         )
  )
  // links leading to cloudflare R2 or edge services
  or any(body.links,
         .href_url.domain.root_domain in~ ("r2.dev", "pages.dev", "workers.dev")
  )
)

Detection logic

Scope: inbound message.

Detects messages from legitimate GoDaddy domains with suspicious indicators. Observed abused for call back phishing and extortion campaigns.

  1. inbound message
  2. length(attachments) is 0
  3. all of:
    • sender.email.domain.root_domain is 'godaddy.com'
    • headers.auth_summary.dmarc.pass
  4. any of body.links where:
    • .display_text in ('Pay Now', 'Accept Access')
  5. any of:
    • any of ml.nlu_classifier(body.current_thread.text).intents where all hold:
      • .name in ('callback_scam', 'cred_theft', 'extortion')
      • .confidence is 'high'
    • any of:
      • sender.display_name matches 'big(\\s|[[:punct:]])?brother|seeing(\\s|[[:punct:]])?eye'
      • body.current_thread.text matches '((I|you).{0,25}(leak|compromise|hack|see|record|expose))|(dirty|little) secret'
    • any of:
      • any of [sender.display_name, subject.base] where:
        • . matches '\\b\\+?([ilo0-9]{1}.)?\\(?[ilo0-9]{3}?\\)?.[ilo0-9]{3}.?[ilo0-9]{4}\\b'
      • strings.replace_confusables(body.current_thread.text) matches any of 3 patterns
        • *Pay?Pal*
        • *Best?Buy*
        • *Geek?Squad*
    • any of body.links where:
      • .display_text matches '[\\x{1F300}-\\x{1F5FF}\\x{1F600}-\\x{1F64F}\\x{1F680}-\\x{1F6FF}\\x{1F700}-\\x{1F77F}\\x{1F780}-\\x{1F7FF}\\x{1F900}-\\x{1F9FF}\\x{2600}-\\x{26FF}\\x{2700}-\\x{27BF}\\x{2300}-\\x{23FF}]'
    • any of body.links where:
      • .href_url.domain.root_domain in ('r2.dev', 'pages.dev', 'workers.dev')

Inspects: body.current_thread.text, body.links, body.links[].display_text, body.links[].href_url.domain.root_domain, headers.auth_summary.dmarc.pass, sender.display_name, sender.email.domain.root_domain, subject.base, type.inbound. Sensors: ml.nlu_classifier, regex.contains, regex.icontains, strings.ilike, strings.replace_confusables.

Indicators matched (17)

FieldMatchValue
sender.email.domain.root_domainequalsgodaddy.com
body.links[].display_textmemberPay Now
body.links[].display_textmemberAccept Access
ml.nlu_classifier(body.current_thread.text).intents[].namemembercallback_scam
ml.nlu_classifier(body.current_thread.text).intents[].namemembercred_theft
ml.nlu_classifier(body.current_thread.text).intents[].namememberextortion
ml.nlu_classifier(body.current_thread.text).intents[].confidenceequalshigh
regex.icontainsregexbig(\s|[[:punct:]])?brother|seeing(\s|[[:punct:]])?eye
regex.icontainsregex((I|you).{0,25}(leak|compromise|hack|see|record|expose))|(dirty|little) secret
regex.icontainsregex\b\+?([ilo0-9]{1}.)?\(?[ilo0-9]{3}?\)?.[ilo0-9]{3}.?[ilo0-9]{4}\b
strings.ilikesubstring*Pay?Pal*
strings.ilikesubstring*Best?Buy*
5 more
strings.ilikesubstring*Geek?Squad*
regex.containsregex[\x{1F300}-\x{1F5FF}\x{1F600}-\x{1F64F}\x{1F680}-\x{1F6FF}\x{1F700}-\x{1F77F}\x{1F780}-\x{1F7FF}\x{1F900}-\x{1F9FF}\x{2600}-\x{26FF}\x{2700}-\x{27BF}\x{2300}-\x{23FF}]
body.links[].href_url.domain.root_domainmemberr2.dev
body.links[].href_url.domain.root_domainmemberpages.dev
body.links[].href_url.domain.root_domainmemberworkers.dev

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(ml.nlu_classifier(body.current_thread.text).intents)
      and
        ml.nlu_classifier(body.current_thread.text).intents.confidence eq "high"
        ml.nlu_classifier(body.current_thread.text).intents.name in ["callback_scam", "cred_theft", "extortion"]
    any([sender.display_name, subject.base])
      [sender.display_name, subject.base] regex_match "\\b\\+?([ilo0-9]{1}.)?\\(?[ilo0-9]{3}?\\)?.[ilo0-9]{3}.?[ilo0-9]{4}\\b"
    any(body.links)
      body.links.display_text regex_match "[\\x{1F300}-\\x{1F5FF}\\x{1F600}-\\x{1F64F}\\x{1F680}-\\x{1F6FF}\\x{1F700}-\\x{1F77F}\\x{1F780}-\\x{1F7FF}\\x{1F900}-\\x{1F9FF}\\x{2600}-\\x{26FF}\\x{2700}-\\x{27BF}\\x{2300}-\\x{23FF}]"
    any(body.links)
      body.links.href_url.domain.root_domain in ["pages.dev", "r2.dev", "workers.dev"]
    body.current_thread.text regex_match "((I|you).{0,25}(leak|compromise|hack|see|record|expose))|(dirty|little) secret"
    sender.display_name regex_match "big(\\s|[[:punct:]])?brother|seeing(\\s|[[:punct:]])?eye"
    strings.replace_confusables(body.current_thread.text) match "Best?Buy"
    strings.replace_confusables(body.current_thread.text) match "Geek?Squad"
    strings.replace_confusables(body.current_thread.text) match "Pay?Pal"
  any(body.links)
    body.links.display_text in ["Accept Access", "Pay Now"]
  attachments length_compare "0"
  headers.auth_summary.dmarc.pass eq "true"
  sender.email.domain.root_domain eq "godaddy.com"
  type.inbound eq "true"

Indicators

These rows show field, operator, and value matches.

Service abuse: Google application integration redirecting to suspicious hosts

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

Detects legitimate Google application integration emails that contain links redirecting to free file hosting services or free subdomain hosts, including Microsoft OAuth redirects to suspicious domains. These could indicate abuse of Google's legitimate service for malicious redirects.

Threat classification

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

CategoryValues
Attack typesCredential Phishing, Malware/Ransomware
Tactics and techniquesEvasion, Free file host, Free subdomain host, Open redirect

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.links
  • headers
  • headers.auth_summary
  • sender.email
  • type

Rule body

type.inbound
and sender.email.email == "noreply-application-integration@google.com"
and headers.auth_summary.dmarc.pass
and length(body.links) < 10
and any(body.links,
        .href_url.domain.domain in $free_file_hosts
        or .href_url.domain.root_domain in $free_file_hosts
        or .href_url.domain.domain in $free_subdomain_hosts
        // Mimecast link logic
        or (
          .href_url.domain.root_domain in (
            "mimecastprotect.com",
            "mimecast.com"
          )
          and any(.href_url.query_params_decoded['domain'],
                  strings.parse_domain(.).domain in $free_file_hosts
                  or strings.parse_domain(.).root_domain in $free_file_hosts
                  or strings.parse_domain(.).root_domain in $free_subdomain_hosts
                  or . in (
                    "storage.cloud.google.com",
                    "login.microsoftonline.com"
                  )
          )
        )
        or network.whois(.href_url.domain).days_old < 30
        // abuse observed
        or .href_url.domain.root_domain == "share.google"
)

Detection logic

Scope: inbound message.

Detects legitimate Google application integration emails that contain links redirecting to free file hosting services or free subdomain hosts, including Microsoft OAuth redirects to suspicious domains. These could indicate abuse of Google's legitimate service for malicious redirects.

  1. inbound message
  2. sender.email.email is 'noreply-application-integration@google.com'
  3. headers.auth_summary.dmarc.pass
  4. length(body.links) < 10
  5. any of body.links where any holds:
    • .href_url.domain.domain in $free_file_hosts
    • .href_url.domain.root_domain in $free_file_hosts
    • .href_url.domain.domain in $free_subdomain_hosts
    • all of:
      • .href_url.domain.root_domain in ('mimecastprotect.com', 'mimecast.com')
      • any of .href_url.query_params_decoded['domain'] where any holds:
        • strings.parse_domain(.).domain in $free_file_hosts
        • strings.parse_domain(.).root_domain in $free_file_hosts
        • strings.parse_domain(.).root_domain in $free_subdomain_hosts
        • . in ('storage.cloud.google.com', 'login.microsoftonline.com')
    • network.whois(.href_url.domain).days_old < 30
    • .href_url.domain.root_domain is 'share.google'

Inspects: body.links, body.links[].href_url.domain, body.links[].href_url.domain.domain, body.links[].href_url.domain.root_domain, body.links[].href_url.query_params_decoded['domain'], headers.auth_summary.dmarc.pass, sender.email.email, type.inbound. Sensors: network.whois, strings.parse_domain. Reference lists: $free_file_hosts, $free_subdomain_hosts.

Indicators matched (6)

FieldMatchValue
sender.email.emailequalsnoreply-application-integration@google.com
body.links[].href_url.domain.root_domainmembermimecastprotect.com
body.links[].href_url.domain.root_domainmembermimecast.com
body.links[].href_url.query_params_decoded['domain'][]memberstorage.cloud.google.com
body.links[].href_url.query_params_decoded['domain'][]memberlogin.microsoftonline.com
body.links[].href_url.domain.root_domainequalsshare.google

Stages and Predicates

Stage 1: mql_rule

and
  any(body.links)
    or
      and
        any(body.links.href_url.query_params_decoded['domain'])
          or
            body.links.href_url.query_params_decoded['domain'][] in ["login.microsoftonline.com", "storage.cloud.google.com"]
            strings.parse_domain func_call "strings.parse_domain(body.links[].href_url.query_params_decoded['domain'][]).domain in free_file_hosts"
            strings.parse_domain func_call "strings.parse_domain(body.links[].href_url.query_params_decoded['domain'][]).root_domain in free_file_hosts"
            strings.parse_domain func_call "strings.parse_domain(body.links[].href_url.query_params_decoded['domain'][]).root_domain in free_subdomain_hosts"
        body.links.href_url.domain.root_domain in ["mimecast.com", "mimecastprotect.com"]
      body.links.href_url.domain.root_domain eq "share.google"
      network.whois func_call "network.whois(body.links[].href_url.domain).days_old < 30"
       macro "body.links[].href_url.domain.domain in free_file_hosts"
       macro "body.links[].href_url.domain.domain in free_subdomain_hosts"
       macro "body.links[].href_url.domain.root_domain in free_file_hosts"
  body.links length_compare "10"
  headers.auth_summary.dmarc.pass eq "true"
  sender.email.email eq "noreply-application-integration@google.com"
  type.inbound eq "true"

Indicators

These rows show field, operator, and value matches.

Service abuse: Google Calendar notification with callback scam language

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

Detects messages sent from Google's legitimate calendar notification service that contain callback scam language, indicating potential abuse of the calendar sharing feature to distribute fraudulent content.

Threat classification

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

CategoryValues
Attack typesCallback Phishing
Tactics and techniquesICS Phishing, Out of band pivot, Social engineering

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • sender.email
  • type

Rule body

type.inbound
and sender.email.email == 'calendar-notification@google.com'
and any(ml.nlu_classifier(body.current_thread.text).intents,
        .name == "callback_scam" and .confidence != "low"
)

Detection logic

Scope: inbound message.

Detects messages sent from Google's legitimate calendar notification service that contain callback scam language, indicating potential abuse of the calendar sharing feature to distribute fraudulent content.

  1. inbound message
  2. sender.email.email is 'calendar-notification@google.com'
  3. any of ml.nlu_classifier(body.current_thread.text).intents where all hold:
    • .name is 'callback_scam'
    • .confidence is not 'low'

Inspects: body.current_thread.text, sender.email.email, type.inbound. Sensors: ml.nlu_classifier.

Indicators matched (2)

FieldMatchValue
sender.email.emailequalscalendar-notification@google.com
ml.nlu_classifier(body.current_thread.text).intents[].nameequalscallback_scam

Stages and Predicates

Stage 1: mql_rule

and
  any(ml.nlu_classifier(body.current_thread.text).intents)
    and
      ml.nlu_classifier(body.current_thread.text).intents.confidence ne "low"
      ml.nlu_classifier(body.current_thread.text).intents.name eq "callback_scam"
  sender.email.email eq "calendar-notification@google.com"
  type.inbound eq "true"

Indicators

These rows show field, operator, and value matches.

Service abuse: Google Groups callback scam

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

Detects inbound messages originating from Google Groups that contain high-confidence callback scam content, identifying abuse of the legitimate service to distribute fraudulent callback requests.

Threat classification

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

CategoryValues
Attack typesCallback Phishing
Tactics and techniquesFree email provider, Social engineering

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • sender.email
  • type

Rule body

type.inbound
and sender.email.domain.domain == "groups.google.com"
and any(ml.nlu_classifier(body.current_thread.text).intents,
        .name == "callback_scam" and .confidence == "high"
)

Detection logic

Scope: inbound message.

Detects inbound messages originating from Google Groups that contain high-confidence callback scam content, identifying abuse of the legitimate service to distribute fraudulent callback requests.

  1. inbound message
  2. sender.email.domain.domain is 'groups.google.com'
  3. any of ml.nlu_classifier(body.current_thread.text).intents where all hold:
    • .name is 'callback_scam'
    • .confidence is 'high'

Inspects: body.current_thread.text, sender.email.domain.domain, type.inbound. Sensors: ml.nlu_classifier.

Indicators matched (3)

FieldMatchValue
sender.email.domain.domainequalsgroups.google.com
ml.nlu_classifier(body.current_thread.text).intents[].nameequalscallback_scam
ml.nlu_classifier(body.current_thread.text).intents[].confidenceequalshigh

Stages and Predicates

Stage 1: mql_rule

and
  any(ml.nlu_classifier(body.current_thread.text).intents)
    and
      ml.nlu_classifier(body.current_thread.text).intents.confidence eq "high"
      ml.nlu_classifier(body.current_thread.text).intents.name eq "callback_scam"
  sender.email.domain.domain eq "groups.google.com"
  type.inbound eq "true"

Indicators

These rows show field, operator, and value matches.

Service abuse: Google OAuth with suspicious redirect destination

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

Detects messages containing Google OAuth links with prompt=none parameter that redirect to suspicious domains including free file hosts, free subdomain providers, or self-service creation platforms.

Threat classification

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

CategoryValues
Attack typesCredential Phishing
Tactics and techniquesEvasion, Free file host, Free subdomain host, Open redirect, Social engineering

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.links
  • type

Rule body

type.inbound
and any(body.links,
        .href_url.domain.subdomain == "accounts"
        and .href_url.domain.sld == "google"
        and strings.istarts_with(.href_url.path, '/o/oauth2/v2/auth')
        and strings.icontains(.href_url.url, 'prompt=none')
)

Detection logic

Scope: inbound message.

Detects messages containing Google OAuth links with prompt=none parameter that redirect to suspicious domains including free file hosts, free subdomain providers, or self-service creation platforms.

  1. inbound message
  2. any of body.links where all hold:
    • .href_url.domain.subdomain is 'accounts'
    • .href_url.domain.sld is 'google'
    • .href_url.path starts with '/o/oauth2/v2/auth'
    • .href_url.url contains 'prompt=none'

Inspects: body.links, body.links[].href_url.domain.sld, body.links[].href_url.domain.subdomain, body.links[].href_url.path, body.links[].href_url.url, type.inbound. Sensors: strings.icontains, strings.istarts_with.

Indicators matched (4)

FieldMatchValue
body.links[].href_url.domain.subdomainequalsaccounts
body.links[].href_url.domain.sldequalsgoogle
strings.istarts_withprefix/o/oauth2/v2/auth
strings.icontainssubstringprompt=none

Stages and Predicates

Stage 1: mql_rule

and
  any(body.links)
    and
      body.links.href_url.domain.sld eq "google"
      body.links.href_url.domain.subdomain eq "accounts"
      body.links.href_url.path starts_with "/o/oauth2/v2/auth"
      body.links.href_url.url contains "prompt=none"
  type.inbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.inboundeq
  • true transforms: boolean
field:"type.inbound" kind:eq value:"true"

Service abuse: IBM IAM account notification with callback scam indicators

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

Detects inbound messages abusing IBM's IAM account notification address that contain callback scam intent patterns identified through natural language analysis.

Threat classification

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

CategoryValues
Attack typesCallback Phishing
Tactics and techniquesImpersonation: Brand, Social engineering, Out of band pivot

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • sender.email
  • type

Rule body

type.inbound
and sender.email.email == "ibmacct@iam.ibm.com"
and any(ml.nlu_classifier(body.current_thread.text).intents,
        .name == "callback_scam" and .confidence != "low"
)

Detection logic

Scope: inbound message.

Detects inbound messages abusing IBM's IAM account notification address that contain callback scam intent patterns identified through natural language analysis.

  1. inbound message
  2. sender.email.email is 'ibmacct@iam.ibm.com'
  3. any of ml.nlu_classifier(body.current_thread.text).intents where all hold:
    • .name is 'callback_scam'
    • .confidence is not 'low'

Inspects: body.current_thread.text, sender.email.email, type.inbound. Sensors: ml.nlu_classifier.

Indicators matched (2)

FieldMatchValue
sender.email.emailequalsibmacct@iam.ibm.com
ml.nlu_classifier(body.current_thread.text).intents[].nameequalscallback_scam

Stages and Predicates

Stage 1: mql_rule

and
  any(ml.nlu_classifier(body.current_thread.text).intents)
    and
      ml.nlu_classifier(body.current_thread.text).intents.confidence ne "low"
      ml.nlu_classifier(body.current_thread.text).intents.name eq "callback_scam"
  sender.email.email eq "ibmacct@iam.ibm.com"
  type.inbound eq "true"

Indicators

These rows show field, operator, and value matches.

Service abuse: Linode Objects HTML file hosting

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

Detects inbound messages containing links to HTML files hosted on Linode's object storage service (linodeobjects.com). This pattern is commonly used to host malicious content or bypass security controls by leveraging legitimate cloud storage infrastructure.

Threat classification

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

CategoryValues
Attack typesCredential Phishing, Malware/Ransomware
Tactics and techniquesFree file host, Evasion

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • type

Rule body

type.inbound
and any(body.current_thread.links,
        .href_url.domain.root_domain == "linodeobjects.com"
        and strings.iends_with(.href_url.path, ".html")
)

Detection logic

Scope: inbound message.

Detects inbound messages containing links to HTML files hosted on Linode's object storage service (linodeobjects.com). This pattern is commonly used to host malicious content or bypass security controls by leveraging legitimate cloud storage infrastructure.

  1. inbound message
  2. any of body.current_thread.links where all hold:
    • .href_url.domain.root_domain is 'linodeobjects.com'
    • .href_url.path ends with '.html'

Inspects: body.current_thread.links, body.current_thread.links[].href_url.domain.root_domain, body.current_thread.links[].href_url.path, type.inbound. Sensors: strings.iends_with.

Indicators matched (2)

FieldMatchValue
body.current_thread.links[].href_url.domain.root_domainequalslinodeobjects.com
strings.iends_withsuffix.html

Stages and Predicates

Stage 1: mql_rule

and
  any(body.current_thread.links)
    and
      body.current_thread.links.href_url.domain.root_domain eq "linodeobjects.com"
      body.current_thread.links.href_url.path ends_with ".html"
  type.inbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.inboundeq
  • true transforms: boolean
field:"type.inbound" kind:eq value:"true"

Service abuse: Microsoft Forms Pro with suspicious links or QR codes

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

Detects messages sent from Microsoft Forms Pro (surveys@email.formspro.microsoft.com) that contain suspicious indicators, including links to suspicious TLDs, recipient email addresses embedded in URLs, OAuth authorization links, personal OneDrive paths, template placeholders, or QR codes pointing to recently registered or suspicious domains.

Threat classification

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

CategoryValues
Attack typesCredential Phishing
Tactics and techniquesQR code, Social engineering, Impersonation: Brand

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • recipients
  • recipients.to
  • sender.email
  • type

Rule body

type.inbound
and sender.email.email == 'surveys@email.formspro.microsoft.com'
and (
  any(body.current_thread.links,
      (
        .href_url.domain.tld in $suspicious_tlds
        and not .href_url.domain.root_domain in ('microsoft.us')
      )
      or any(recipients.to,
             strings.icontains(..href_url.url, .email.email)
             and .email.domain.valid
      )
      or .href_url.fragment in ('[[Email]]')
      or strings.starts_with(.href_url.url,
                             'https://login.microsoftonline.com/common/oauth2/v2.0/authorize'
      )
      // personal onedrive
      or strings.starts_with(.href_url.path, '/:o:/p/')
  )
  or any(file.explode(file.message_screenshot()),
         .scan.qr.url.domain.tld in $suspicious_tlds
         or network.whois(.scan.qr.url.domain).days_old < 100
  )
)

Detection logic

Scope: inbound message.

Detects messages sent from Microsoft Forms Pro (surveys@email.formspro.microsoft.com) that contain suspicious indicators, including links to suspicious TLDs, recipient email addresses embedded in URLs, OAuth authorization links, personal OneDrive paths, template placeholders, or QR codes pointing to recently registered or suspicious domains.

  1. inbound message
  2. sender.email.email is 'surveys@email.formspro.microsoft.com'
  3. any of:
    • any of body.current_thread.links where any holds:
      • all of:
        • .href_url.domain.tld in $suspicious_tlds
        • not:
          • .href_url.domain.root_domain in ('microsoft.us')
      • any of recipients.to where all hold:
        • strings.icontains(.href_url.url)
        • .email.domain.valid
      • .href_url.fragment in ('[[Email]]')
      • .href_url.url starts with 'https://login.microsoftonline.com/common/oauth2/v2.0/authorize'
      • .href_url.path starts with '/:o:/p/'
    • any of file.explode(...) where any holds:
      • .scan.qr.url.domain.tld in $suspicious_tlds
      • network.whois(.scan.qr.url.domain).days_old < 100

Inspects: body.current_thread.links, body.current_thread.links[].href_url.domain.root_domain, body.current_thread.links[].href_url.domain.tld, body.current_thread.links[].href_url.fragment, body.current_thread.links[].href_url.path, body.current_thread.links[].href_url.url, recipients.to, recipients.to[].email.domain.valid, recipients.to[].email.email, sender.email.email, type.inbound. Sensors: file.explode, file.message_screenshot, network.whois, strings.icontains, strings.starts_with. Reference lists: $suspicious_tlds.

Indicators matched (4)

FieldMatchValue
sender.email.emailequalssurveys@email.formspro.microsoft.com
body.current_thread.links[].href_url.fragmentmember[[Email]]
strings.starts_withprefixhttps://login.microsoftonline.com/common/oauth2/v2.0/authorize
strings.starts_withprefix/:o:/p/

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(body.current_thread.links)
      or
        and
          not
            body.current_thread.links.href_url.domain.root_domain eq "microsoft.us"
           macro "body.current_thread.links[].href_url.domain.tld in suspicious_tlds"
        any(recipients.to)
          and
            recipients.to.email.domain.valid eq "true"
            strings.icontains func_call "strings.icontains(body.current_thread.links[].href_url.url)"
        body.current_thread.links.href_url.fragment eq "[[Email]]"
        body.current_thread.links.href_url.path starts_with "/:o:/p/"
        body.current_thread.links.href_url.url starts_with "https://login.microsoftonline.com/common/oauth2/v2.0/authorize"
    any(file.explode(...))
      or
        network.whois func_call "network.whois(file.explode(...)[].scan.qr.url.domain).days_old < 100"
         macro "file.explode(...)[].scan.qr.url.domain.tld in suspicious_tlds"
  sender.email.email eq "surveys@email.formspro.microsoft.com"
  type.inbound eq "true"

Indicators

These rows show field, operator, and value matches.

Service abuse: Microsoft Power Apps callback scam

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

Detects callback scam messages sent through Microsoft Power Apps that impersonate well-known brands like McAfee, Norton, Geek Squad, PayPal, or other services, containing suspicious transaction-related language and phone numbers to solicit victim contact.

Threat classification

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

CategoryValues
Attack typesCallback Phishing
Tactics and techniquesImpersonation: Brand, Out of band pivot, Social engineering

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • sender.email
  • subject
  • type

Rule body

type.inbound
and sender.email.email == "powerapps-noreply@microsoft.com"
and (
  any(ml.nlu_classifier(body.current_thread.text).intents,
      .name == "callback_scam" and .confidence != "low"
  )
  or (
    regex.icontains(body.current_thread.text,
                    (
                      "mcafee|n[o0]rt[o0]n|geek.{0,5}squad|paypal|ebay|symantec|best buy|lifel[o0]ck"
                    )
    )
    and (
      3 of (
        strings.ilike(body.current_thread.text, '*purchase*'),
        strings.ilike(body.current_thread.text, '*payment*'),
        strings.ilike(body.current_thread.text, '*transaction*'),
        strings.ilike(body.current_thread.text, '*subscription*'),
        strings.ilike(body.current_thread.text, '*antivirus*'),
        strings.ilike(body.current_thread.text, '*order*'),
        strings.ilike(body.current_thread.text, '*support*'),
        strings.ilike(body.current_thread.text, '*receipt*'),
        strings.ilike(body.current_thread.text, '*invoice*'),
        strings.ilike(body.current_thread.text, '*call*'),
        strings.ilike(body.current_thread.text, '*cancel*'),
        strings.ilike(body.current_thread.text, '*renew*'),
        strings.ilike(body.current_thread.text, '*refund*'),
        strings.ilike(body.current_thread.text, '*host key*')
      )
    )
    // phone number regex
    and any([body.current_thread.text, subject.subject],
            regex.icontains(.,
                            '\+?([ilo0-9]{1}.)?\(?[ilo0-9]{3}?\)?.[ilo0-9]{3}.?[ilo0-9]{4}',
                            '\+?([ilo0-9]{1,2})?\s?\(?\d{3}\)?[\s\.\-⋅]{0,5}[ilo0-9]{3}[\s\.\-⋅]{0,5}[ilo0-9]{4}'
            )
    )
  )
)

Detection logic

Scope: inbound message.

Detects callback scam messages sent through Microsoft Power Apps that impersonate well-known brands like McAfee, Norton, Geek Squad, PayPal, or other services, containing suspicious transaction-related language and phone numbers to solicit victim contact.

  1. inbound message
  2. sender.email.email is 'powerapps-noreply@microsoft.com'
  3. any of:
    • any of ml.nlu_classifier(body.current_thread.text).intents where all hold:
      • .name is 'callback_scam'
      • .confidence is not 'low'
    • all of:
      • body.current_thread.text matches 'mcafee|n[o0]rt[o0]n|geek.{0,5}squad|paypal|ebay|symantec|best buy|lifel[o0]ck'
      • at least 3 of 14: body.current_thread.text matches any of 14 patterns
        • *purchase*
        • *payment*
        • *transaction*
        • *subscription*
        • *antivirus*
        • *order*
        • *support*
        • *receipt*
        • *invoice*
        • *call*
        • *cancel*
        • *renew*
        • *refund*
        • *host key*
      • any of [body.current_thread.text, subject.subject] where:
        • . matches any of 2 patterns
          • \+?([ilo0-9]{1}.)?\(?[ilo0-9]{3}?\)?.[ilo0-9]{3}.?[ilo0-9]{4}
          • \+?([ilo0-9]{1,2})?\s?\(?\d{3}\)?[\s\.\-⋅]{0,5}[ilo0-9]{3}[\s\.\-⋅]{0,5}[ilo0-9]{4}

Inspects: body.current_thread.text, sender.email.email, subject.subject, type.inbound. Sensors: ml.nlu_classifier, regex.icontains, strings.ilike.

Indicators matched (19)

FieldMatchValue
sender.email.emailequalspowerapps-noreply@microsoft.com
ml.nlu_classifier(body.current_thread.text).intents[].nameequalscallback_scam
regex.icontainsregexmcafee|n[o0]rt[o0]n|geek.{0,5}squad|paypal|ebay|symantec|best buy|lifel[o0]ck
strings.ilikesubstring*purchase*
strings.ilikesubstring*payment*
strings.ilikesubstring*transaction*
strings.ilikesubstring*subscription*
strings.ilikesubstring*antivirus*
strings.ilikesubstring*order*
strings.ilikesubstring*support*
strings.ilikesubstring*receipt*
strings.ilikesubstring*invoice*
7 more
strings.ilikesubstring*call*
strings.ilikesubstring*cancel*
strings.ilikesubstring*renew*
strings.ilikesubstring*refund*
strings.ilikesubstring*host key*
regex.icontainsregex\+?([ilo0-9]{1}.)?\(?[ilo0-9]{3}?\)?.[ilo0-9]{3}.?[ilo0-9]{4}
regex.icontainsregex\+?([ilo0-9]{1,2})?\s?\(?\d{3}\)?[\s\.\-⋅]{0,5}[ilo0-9]{3}[\s\.\-⋅]{0,5}[ilo0-9]{4}

Stages and Predicates

Stage 1: mql_rule

and
  or
    and
      any([body.current_thread.text, subject.subject])
        or
          [body.current_thread.text, subject.subject] regex_match "\\+?([ilo0-9]{1,2})?\\s?\\(?\\d{3}\\)?[\\s\\.\\-⋅]{0,5}[ilo0-9]{3}[\\s\\.\\-⋅]{0,5}[ilo0-9]{4}"
          [body.current_thread.text, subject.subject] regex_match "\\+?([ilo0-9]{1}.)?\\(?[ilo0-9]{3}?\\)?.[ilo0-9]{3}.?[ilo0-9]{4}"
      or
        body.current_thread.text match "antivirus"
        body.current_thread.text match "call"
        body.current_thread.text match "cancel"
        body.current_thread.text match "host key"
        body.current_thread.text match "invoice"
        body.current_thread.text match "order"
        body.current_thread.text match "payment"
        body.current_thread.text match "purchase"
        body.current_thread.text match "receipt"
        body.current_thread.text match "refund"
        body.current_thread.text match "renew"
        body.current_thread.text match "subscription"
        body.current_thread.text match "support"
        body.current_thread.text match "transaction"
      body.current_thread.text regex_match "mcafee|n[o0]rt[o0]n|geek.{0,5}squad|paypal|ebay|symantec|best buy|lifel[o0]ck"
    any(ml.nlu_classifier(body.current_thread.text).intents)
      and
        ml.nlu_classifier(body.current_thread.text).intents.confidence ne "low"
        ml.nlu_classifier(body.current_thread.text).intents.name eq "callback_scam"
  sender.email.email eq "powerapps-noreply@microsoft.com"
  type.inbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
body.current_thread.textregex_match
    • mcafee
    • n[o0]rt[o0]n
    • geek.{0,5}squad
    • paypal
    • ebay
    • symantec
    • best buy
    • lifel[o0]ck
field:"body.current_thread.text" kind:regex_match
body.current_thread.textwildcard
  • *antivirus*
  • *call*
  • *cancel*
  • *host key*
  • *invoice*
  • *order*
  • *payment*
  • *purchase*
  • *receipt*
  • *refund*
  • *renew*
  • *subscription*
  • *support*
  • *transaction*
field:"body.current_thread.text" kind:wildcard
sender.email.emaileq
  • powerapps-noreply@microsoft.com
field:"sender.email.email" kind:eq value:"powerapps-noreply@microsoft.com"
type.inboundeq
  • true transforms: boolean
field:"type.inbound" kind:eq value:"true"

Service abuse: Microsoft Power Automate callback scam impersonation

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

Detects callback scam attempts using the legitimate Microsoft Power Automate service email address with high-confidence callback scam language in the message body.

Threat classification

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

CategoryValues
Attack typesCallback Phishing
Tactics and techniquesOut of band pivot, Social engineering

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • sender.email
  • type

Rule body

type.inbound
and sender.email.email == 'flow-noreply@microsoft.com'
and any(ml.nlu_classifier(body.current_thread.text).intents,
        .name == "callback_scam" and .confidence != "low"
)

Detection logic

Scope: inbound message.

Detects callback scam attempts using the legitimate Microsoft Power Automate service email address with high-confidence callback scam language in the message body.

  1. inbound message
  2. sender.email.email is 'flow-noreply@microsoft.com'
  3. any of ml.nlu_classifier(body.current_thread.text).intents where all hold:
    • .name is 'callback_scam'
    • .confidence is not 'low'

Inspects: body.current_thread.text, sender.email.email, type.inbound. Sensors: ml.nlu_classifier.

Indicators matched (2)

FieldMatchValue
sender.email.emailequalsflow-noreply@microsoft.com
ml.nlu_classifier(body.current_thread.text).intents[].nameequalscallback_scam

Stages and Predicates

Stage 1: mql_rule

and
  any(ml.nlu_classifier(body.current_thread.text).intents)
    and
      ml.nlu_classifier(body.current_thread.text).intents.confidence ne "low"
      ml.nlu_classifier(body.current_thread.text).intents.name eq "callback_scam"
  sender.email.email eq "flow-noreply@microsoft.com"
  type.inbound eq "true"

Indicators

These rows show field, operator, and value matches.

Service abuse: Microsoft Power BI callback scam

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

Detects callback scam content sent from the legitimate Microsoft Power BI service email address, indicating potential service abuse to distribute fraudulent callback solicitations.

Threat classification

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

CategoryValues
Attack typesCallback Phishing
Tactics and techniquesOut of band pivot, Social engineering

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • sender.email
  • type

Rule body

type.inbound
and sender.email.email == 'no-reply-powerbi@microsoft.com'
and any(ml.nlu_classifier(body.current_thread.text).intents,
        .name == "callback_scam"
)

Detection logic

Scope: inbound message.

Detects callback scam content sent from the legitimate Microsoft Power BI service email address, indicating potential service abuse to distribute fraudulent callback solicitations.

  1. inbound message
  2. sender.email.email is 'no-reply-powerbi@microsoft.com'
  3. any of ml.nlu_classifier(body.current_thread.text).intents where:
    • .name is 'callback_scam'

Inspects: body.current_thread.text, sender.email.email, type.inbound. Sensors: ml.nlu_classifier.

Indicators matched (2)

FieldMatchValue
sender.email.emailequalsno-reply-powerbi@microsoft.com
ml.nlu_classifier(body.current_thread.text).intents[].nameequalscallback_scam

Stages and Predicates

Stage 1: mql_rule

and
  any(ml.nlu_classifier(body.current_thread.text).intents)
    ml.nlu_classifier(body.current_thread.text).intents.name eq "callback_scam"
  sender.email.email eq "no-reply-powerbi@microsoft.com"
  type.inbound eq "true"

Indicators

These rows show field, operator, and value matches.

Service abuse: Mimecast URL with excessive path length

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

Detects messages containing the second stage Mimecast redirect URL with unusually long paths, potentially indicating abuse of the Mimecast URL redirection service to obfuscate malicious destinations.

Threat classification

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

CategoryValues
Attack typesCredential Phishing, Malware/Ransomware
Tactics and techniquesEvasion, Open redirect

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.links
  • type

Rule body

type.inbound
and any(filter(body.links,
               strings.icontains(.href_url.domain.root_domain, "mimecast")
               and strings.starts_with(.href_url.path, "/r/")
        ),
        length(.href_url.path) > 2000
)

Detection logic

Scope: inbound message.

Detects messages containing the second stage Mimecast redirect URL with unusually long paths, potentially indicating abuse of the Mimecast URL redirection service to obfuscate malicious destinations.

  1. inbound message
  2. any of filter(body.links) where:
    • length(.href_url.path) > 2000

Inspects: body.links, body.links[].href_url.domain.root_domain, body.links[].href_url.path, type.inbound. Sensors: strings.icontains, strings.starts_with.

Indicators matched (2)

FieldMatchValue
strings.icontainssubstringmimecast
strings.starts_withprefix/r/

Stages and Predicates

Stage 1: mql_rule

and
  any(filter(body.links))
    filter(body.links).href_url.path length_compare "2000"
  type.inbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.inboundeq
  • true transforms: boolean
field:"type.inbound" kind:eq value:"true"

Service abuse: Monday.com callback scam

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

Detects callback scam solicitations originating from Monday.com's notification system using natural language understanding to identify fraudulent callback language in the message body.

Threat classification

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

CategoryValues
Attack typesCallback Phishing
Tactics and techniquesSocial engineering, Out of band pivot

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • sender.email
  • type

Rule body

type.inbound
and sender.email.email == "notifications@monday.com"
and any(ml.nlu_classifier(body.current_thread.text).intents,
        .name == "callback_scam"
)

Detection logic

Scope: inbound message.

Detects callback scam solicitations originating from Monday.com's notification system using natural language understanding to identify fraudulent callback language in the message body.

  1. inbound message
  2. sender.email.email is 'notifications@monday.com'
  3. any of ml.nlu_classifier(body.current_thread.text).intents where:
    • .name is 'callback_scam'

Inspects: body.current_thread.text, sender.email.email, type.inbound. Sensors: ml.nlu_classifier.

Indicators matched (2)

FieldMatchValue
sender.email.emailequalsnotifications@monday.com
ml.nlu_classifier(body.current_thread.text).intents[].nameequalscallback_scam

Stages and Predicates

Stage 1: mql_rule

and
  any(ml.nlu_classifier(body.current_thread.text).intents)
    ml.nlu_classifier(body.current_thread.text).intents.name eq "callback_scam"
  sender.email.email eq "notifications@monday.com"
  type.inbound eq "true"

Indicators

These rows show field, operator, and value matches.

Service abuse: MongoDB Atlas callback scam

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

Detects inbound messages from MongoDB Atlas alert addresses that contain callback scam content identified through natural language analysis with medium or high confidence.

Threat classification

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

CategoryValues
Attack typesCallback Phishing
Tactics and techniquesImpersonation: Brand, Social engineering

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • sender.email
  • type

Rule body

type.inbound
and sender.email.email == "mongodb-atlas-alerts@mongodb.com"
and any(ml.nlu_classifier(body.current_thread.text).intents,
        .name == "callback_scam" and .confidence != "low"
) 

Detection logic

Scope: inbound message.

Detects inbound messages from MongoDB Atlas alert addresses that contain callback scam content identified through natural language analysis with medium or high confidence.

  1. inbound message
  2. sender.email.email is 'mongodb-atlas-alerts@mongodb.com'
  3. any of ml.nlu_classifier(body.current_thread.text).intents where all hold:
    • .name is 'callback_scam'
    • .confidence is not 'low'

Inspects: body.current_thread.text, sender.email.email, type.inbound. Sensors: ml.nlu_classifier.

Indicators matched (2)

FieldMatchValue
sender.email.emailequalsmongodb-atlas-alerts@mongodb.com
ml.nlu_classifier(body.current_thread.text).intents[].nameequalscallback_scam

Stages and Predicates

Stage 1: mql_rule

and
  any(ml.nlu_classifier(body.current_thread.text).intents)
    and
      ml.nlu_classifier(body.current_thread.text).intents.confidence ne "low"
      ml.nlu_classifier(body.current_thread.text).intents.name eq "callback_scam"
  sender.email.email eq "mongodb-atlas-alerts@mongodb.com"
  type.inbound eq "true"

Indicators

These rows show field, operator, and value matches.

Service abuse: Notion free-tier account impersonating VIP

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

Detects messages sent from Notion's legitimate notification address (notify@mail.notion.so), but where the sender's display name matches an internal VIP, and the embedded links resolve to a Notion workspace associated with a free-tier subscription. This pattern indicates abuse of Notion's free tier to craft convincing internal impersonation lures.

Threat classification

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

CategoryValues
Attack typesCredential Phishing
Tactics and techniquesImpersonation: VIP, Social engineering

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • sender.email
  • type

Rule body

type.inbound
and sender.email.email == 'notify@mail.notion.so'
// from VIP
and any($org_vips, strings.icontains(sender.display_name, .display_name))
and any(body.current_thread.links,
        any(ml.link_analysis(.).additional_responses,
            .json['statsigUser']['custom']['spaceSubscriptionTier'] == 'free'
        )
)

Detection logic

Scope: inbound message.

Detects messages sent from Notion's legitimate notification address (notify@mail.notion.so), but where the sender's display name matches an internal VIP, and the embedded links resolve to a Notion workspace associated with a free-tier subscription. This pattern indicates abuse of Notion's free tier to craft convincing internal impersonation lures.

  1. inbound message
  2. sender.email.email is 'notify@mail.notion.so'
  3. any of $org_vips where:
    • strings.icontains(sender.display_name)
  4. any of body.current_thread.links where:
    • any of ml.link_analysis(.).additional_responses where:
      • .json['statsigUser']['custom']['spaceSubscriptionTier'] is 'free'

Inspects: body.current_thread.links, sender.display_name, sender.email.email, type.inbound. Sensors: ml.link_analysis, strings.icontains. Reference lists: $org_vips.

Indicators matched (2)

FieldMatchValue
sender.email.emailequalsnotify@mail.notion.so
ml.link_analysis(body.current_thread.links[]).additional_responses[].json['statsigUser']['custom']['spaceSubscriptionTier']equalsfree

Stages and Predicates

Stage 1: mql_rule

and
  any(body.current_thread.links)
    any(ml.link_analysis(body.current_thread.links).additional_responses)
      ml.link_analysis(body.current_thread.links).additional_responses.json['statsigUser']['custom']['spaceSubscriptionTier'] eq "free"
  any($org_vips)
    strings.icontains func_call "strings.icontains(sender.display_name)"
  sender.email.email eq "notify@mail.notion.so"
  type.inbound eq "true"

Indicators

These rows show field, operator, and value matches.

Service abuse: Nylas tracking subdomain with suspicious content

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

Detects messages containing links to Nylas tracking subdomains with display text and suspicious language patterns, indicating potential abuse of the email tracking service.

Threat classification

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

CategoryValues
Attack typesBEC/Fraud, Credential Phishing
Tactics and techniquesEvasion, Social engineering

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • type

Rule body

type.inbound
and any(filter(body.current_thread.links, .href_url.domain.sld == "nylas"),
        .display_text is not null
        and strings.icontains(.href_url.domain.subdomain, 'tracking')
)
and any(ml.nlu_classifier(body.current_thread.text).intents,
        .name == "cred_theft" and .confidence != "low"
)

Detection logic

Scope: inbound message.

Detects messages containing links to Nylas tracking subdomains with display text and suspicious language patterns, indicating potential abuse of the email tracking service.

  1. inbound message
  2. any of filter(body.current_thread.links) where all hold:
    • .display_text is set
    • .href_url.domain.subdomain contains 'tracking'
  3. any of ml.nlu_classifier(body.current_thread.text).intents where all hold:
    • .name is 'cred_theft'
    • .confidence is not 'low'

Inspects: body.current_thread.links, body.current_thread.links[].href_url.domain.sld, body.current_thread.text, type.inbound. Sensors: ml.nlu_classifier, strings.icontains.

Indicators matched (3)

FieldMatchValue
body.current_thread.links[].href_url.domain.sldequalsnylas
strings.icontainssubstringtracking
ml.nlu_classifier(body.current_thread.text).intents[].nameequalscred_theft

Stages and Predicates

Stage 1: mql_rule

and
  any(filter(body.current_thread.links))
    and
      filter(body.current_thread.links).display_text is_not_null
      filter(body.current_thread.links).href_url.domain.subdomain contains "tracking"
  any(ml.nlu_classifier(body.current_thread.text).intents)
    and
      ml.nlu_classifier(body.current_thread.text).intents.confidence ne "low"
      ml.nlu_classifier(body.current_thread.text).intents.name eq "cred_theft"
  type.inbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.inboundeq
  • true transforms: boolean
field:"type.inbound" kind:eq value:"true"

Service abuse: Oracle Cloud Workflow callback scam

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

Detects inbound messages sent through Oracle Cloud's workflow mail service (workflow.mail.us2.cloud.oracle.com) that contain callback scam content within styled HTML table cells. Natural language understanding is used to identify callback scam intent with medium or high confidence within the message body, indicating misuse of legitimate Oracle infrastructure to deliver fraudulent content.

Threat classification

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

CategoryValues
Attack typesCallback Phishing
Tactics and techniquesSocial engineering, Impersonation: Brand

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • sender.email
  • type

Rule body

type.inbound
and sender.email.domain.domain == "workflow.mail.us2.cloud.oracle.com"
and any(html.xpath(body.html,
                   "//td[contains(@style, 'padding: 20px 40px')]//font[@style='']"
        ).nodes,
        any(ml.nlu_classifier(.inner_text).intents,
            .name == "callback_scam" and .confidence != "low"
        )
)   

Detection logic

Scope: inbound message.

Detects inbound messages sent through Oracle Cloud's workflow mail service (workflow.mail.us2.cloud.oracle.com) that contain callback scam content within styled HTML table cells. Natural language understanding is used to identify callback scam intent with medium or high confidence within the message body, indicating misuse of legitimate Oracle infrastructure to deliver fraudulent content.

  1. inbound message
  2. sender.email.domain.domain is 'workflow.mail.us2.cloud.oracle.com'
  3. any of html.xpath(body.html, "//td[contains(@style, 'padding: 20px 40px')]//font[@style='']").nodes where:
    • any of ml.nlu_classifier(.inner_text).intents where all hold:
      • .name is 'callback_scam'
      • .confidence is not 'low'

Inspects: body.html, sender.email.domain.domain, type.inbound. Sensors: html.xpath, ml.nlu_classifier.

Indicators matched (2)

FieldMatchValue
sender.email.domain.domainequalsworkflow.mail.us2.cloud.oracle.com
ml.nlu_classifier(html.xpath(body.html, "//td[contains(@style, 'padding: 20px 40px')]//font[@style='']").nodes[].inner_text).intents[].nameequalscallback_scam

Stages and Predicates

Stage 1: mql_rule

and
  any(html.xpath(body.html, "//td[contains(@style, 'padding: 20px 40px')]//font[@style='']").nodes)
    any(ml.nlu_classifier(html.xpath(body.html, "//td[contains(@style, 'padding: 20px 40px')]//font[@style='']").nodes.inner_text).intents)
      and
        ml.nlu_classifier(html.xpath(body.html, "//td[contains(@style, 'padding: 20px 40px')]//font[@style='']").nodes[].inner_text).intents[].confidence ne "low"
        ml.nlu_classifier(html.xpath(body.html, "//td[contains(@style, 'padding: 20px 40px')]//font[@style='']").nodes[].inner_text).intents[].name eq "callback_scam"
  sender.email.domain.domain eq "workflow.mail.us2.cloud.oracle.com"
  type.inbound eq "true"

Indicators

These rows show field, operator, and value matches.

Service abuse: Outlook Groups with Google Sites link and evasion tag

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

Detects inbound messages sent via Outlook Groups (groups.outlook.com) that contain links to Google Sites, combined with a suspicious short alphanumeric tag appended to either the message body or subject line. This pattern is commonly used to evade detection while redirecting recipients to credential harvesting pages hosted on Google Sites.

Threat classification

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

CategoryValues
Attack typesCredential Phishing
Tactics and techniquesEvasion, Free subdomain host, Social engineering

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • headers
  • headers.return_path
  • subject
  • type

Rule body

type.inbound
and headers.return_path.domain.domain == "groups.outlook.com"
and any(body.current_thread.links,
        .href_url.domain.domain == "sites.google.com"
)
and (
  regex.icontains(body.current_thread.text, '\n[a-z0-9]{3}\s*$')
  or regex.icontains(subject.base, '\s{2,}[a-z0-9]{3}\s*$')
)

Detection logic

Scope: inbound message.

Detects inbound messages sent via Outlook Groups (groups.outlook.com) that contain links to Google Sites, combined with a suspicious short alphanumeric tag appended to either the message body or subject line. This pattern is commonly used to evade detection while redirecting recipients to credential harvesting pages hosted on Google Sites.

  1. inbound message
  2. headers.return_path.domain.domain is 'groups.outlook.com'
  3. any of body.current_thread.links where:
    • .href_url.domain.domain is 'sites.google.com'
  4. any of:
    • body.current_thread.text matches '\\n[a-z0-9]{3}\\s*$'
    • subject.base matches '\\s{2,}[a-z0-9]{3}\\s*$'

Inspects: body.current_thread.links, body.current_thread.links[].href_url.domain.domain, body.current_thread.text, headers.return_path.domain.domain, subject.base, type.inbound. Sensors: regex.icontains.

Indicators matched (4)

FieldMatchValue
headers.return_path.domain.domainequalsgroups.outlook.com
body.current_thread.links[].href_url.domain.domainequalssites.google.com
regex.icontainsregex\n[a-z0-9]{3}\s*$
regex.icontainsregex\s{2,}[a-z0-9]{3}\s*$

Stages and Predicates

Stage 1: mql_rule

and
  any(body.current_thread.links)
    body.current_thread.links.href_url.domain.domain eq "sites.google.com"
  or
    body.current_thread.text regex_match "\\n[a-z0-9]{3}\\s*$"
    subject.base regex_match "\\s{2,}[a-z0-9]{3}\\s*$"
  headers.return_path.domain.domain eq "groups.outlook.com"
  type.inbound eq "true"

Indicators

These rows show field, operator, and value matches.

Service abuse: PayPal manager account creation with callback scam indicators

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

Detects inbound messages abusing PayPal's noreply address with subjects about PayPal Manager user account creation that contain callback scam intent patterns identified through natural language analysis.

Threat classification

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

CategoryValues
Attack typesCallback Phishing, Credential Phishing
Tactics and techniquesImpersonation: Brand, Social engineering, Spoofing

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • sender.email
  • subject
  • type

Rule body

type.inbound
and sender.email.email == "noreply@paypal.com"
and strings.icontains(subject.base,
                      "Creation of your PayPal Manager user account"
)
and any(ml.nlu_classifier(body.current_thread.text).intents,
        .name in ("callback_scam", "cred_theft") and .confidence != "low"
)

Detection logic

Scope: inbound message.

Detects inbound messages abusing PayPal's noreply address with subjects about PayPal Manager user account creation that contain callback scam intent patterns identified through natural language analysis.

  1. inbound message
  2. sender.email.email is 'noreply@paypal.com'
  3. subject.base contains 'Creation of your PayPal Manager user account'
  4. any of ml.nlu_classifier(body.current_thread.text).intents where all hold:
    • .name in ('callback_scam', 'cred_theft')
    • .confidence is not 'low'

Inspects: body.current_thread.text, sender.email.email, subject.base, type.inbound. Sensors: ml.nlu_classifier, strings.icontains.

Indicators matched (4)

FieldMatchValue
sender.email.emailequalsnoreply@paypal.com
strings.icontainssubstringCreation of your PayPal Manager user account
ml.nlu_classifier(body.current_thread.text).intents[].namemembercallback_scam
ml.nlu_classifier(body.current_thread.text).intents[].namemembercred_theft

Stages and Predicates

Stage 1: mql_rule

and
  any(ml.nlu_classifier(body.current_thread.text).intents)
    and
      ml.nlu_classifier(body.current_thread.text).intents.confidence ne "low"
      ml.nlu_classifier(body.current_thread.text).intents.name in ["callback_scam", "cred_theft"]
  sender.email.email eq "noreply@paypal.com"
  subject.base contains "Creation of your PayPal Manager user account"
  type.inbound eq "true"

Indicators

These rows show field, operator, and value matches.

Service abuse: Postman reply-to mismatch with credential theft intent

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

Detects inbound messages sent from Postman.io where the reply-to address belongs to a different domain than the sender, combined with high or medium confidence credential theft intent detected in the message body. This technique leverages a legitimate service to deliver messages while redirecting replies to an attacker-controlled address.

Threat classification

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

CategoryValues
Attack typesCredential Phishing
Tactics and techniquesSocial engineering, Out of band pivot

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • headers
  • headers.reply_to
  • sender.email
  • type

Rule body

type.inbound
and sender.email.domain.root_domain == "postman.io"
and any(headers.reply_to,
        .email.domain.root_domain != sender.email.domain.root_domain
)
and any(ml.nlu_classifier(body.current_thread.text).intents,
        .name == "cred_theft" and .confidence != "low"
)

Detection logic

Scope: inbound message.

Detects inbound messages sent from Postman.io where the reply-to address belongs to a different domain than the sender, combined with high or medium confidence credential theft intent detected in the message body. This technique leverages a legitimate service to deliver messages while redirecting replies to an attacker-controlled address.

  1. inbound message
  2. sender.email.domain.root_domain is 'postman.io'
  3. any of headers.reply_to where:
    • .email.domain.root_domain is not sender.email.domain.root_domain
  4. any of ml.nlu_classifier(body.current_thread.text).intents where all hold:
    • .name is 'cred_theft'
    • .confidence is not 'low'

Inspects: body.current_thread.text, headers.reply_to, headers.reply_to[].email.domain.root_domain, sender.email.domain.root_domain, type.inbound. Sensors: ml.nlu_classifier.

Indicators matched (2)

FieldMatchValue
sender.email.domain.root_domainequalspostman.io
ml.nlu_classifier(body.current_thread.text).intents[].nameequalscred_theft

Stages and Predicates

Stage 1: mql_rule

and
  any(ml.nlu_classifier(body.current_thread.text).intents)
    and
      ml.nlu_classifier(body.current_thread.text).intents.confidence ne "low"
      ml.nlu_classifier(body.current_thread.text).intents.name eq "cred_theft"
  any(headers.reply_to)
    headers.reply_to.email.domain.root_domain cross_field_compare "sender.email.domain.root_domain"
  sender.email.domain.root_domain eq "postman.io"
  type.inbound eq "true"

Indicators

These rows show field, operator, and value matches.

Service abuse: Recruiting with suspicious language patterns from legitimate platforms

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

Detects suspicious recruiting messages from legitimate services like Salesforce, LADesk, or AWS Apps with unusually long sender email addresses and recruiting-specific language patterns that may indicate abuse of trusted platforms for social engineering.

Threat classification

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

CategoryValues
Attack typesBEC/Fraud
Tactics and techniquesSocial engineering

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • sender.email
  • type

Rule body

type.inbound
and length(sender.email.email) >= 50
and sender.email.domain.root_domain in (
  "salesforce.com",
  "ladesk.com",
  "awsapps.com"
)
and (
  (
    any(ml.nlu_classifier(body.current_thread.text).topics,
        .name in ("B2B Cold Outreach", "Professional and Career Development")
    )
    and not any(ml.nlu_classifier(body.current_thread.text).topics,
                .name == "Reminders and Notifications" and .confidence == "high"
    )
  )
  or 2 of (
    strings.icontains(body.current_thread.text, "profile caught my attention"),
    strings.icontains(body.current_thread.text, "recruiting top talent"),
    strings.icontains(body.current_thread.text, "talent acquisition team"),
    strings.icontains(body.current_thread.text,
                      "experience seems highly relevant"
    ),
    strings.icontains(body.current_thread.text, "expling this opptunity"),
    strings.icontains(body.current_thread.text, "your professional profile"),
    strings.icontains(body.current_thread.text, "a pivotal hire"),
    strings.icontains(body.current_thread.text, "a key hire"),
    strings.icontains(body.current_thread.text, "schedule a time")
  )
)

Detection logic

Scope: inbound message.

Detects suspicious recruiting messages from legitimate services like Salesforce, LADesk, or AWS Apps with unusually long sender email addresses and recruiting-specific language patterns that may indicate abuse of trusted platforms for social engineering.

  1. inbound message
  2. length(sender.email.email) ≥ 50
  3. sender.email.domain.root_domain in ('salesforce.com', 'ladesk.com', 'awsapps.com')
  4. any of:
    • all of:
      • any of ml.nlu_classifier(body.current_thread.text).topics where:
        • .name in ('B2B Cold Outreach', 'Professional and Career Development')
      • not:
        • any of ml.nlu_classifier(body.current_thread.text).topics where all hold:
          • .name is 'Reminders and Notifications'
          • .confidence is 'high'
    • at least 2 of 9: body.current_thread.text contains any of 9 patterns
      • profile caught my attention
      • recruiting top talent
      • talent acquisition team
      • experience seems highly relevant
      • expling this opptunity
      • your professional profile
      • a pivotal hire
      • a key hire
      • schedule a time

Inspects: body.current_thread.text, sender.email.domain.root_domain, sender.email.email, type.inbound. Sensors: ml.nlu_classifier, strings.icontains.

Indicators matched (14)

FieldMatchValue
sender.email.domain.root_domainmembersalesforce.com
sender.email.domain.root_domainmemberladesk.com
sender.email.domain.root_domainmemberawsapps.com
ml.nlu_classifier(body.current_thread.text).topics[].namememberB2B Cold Outreach
ml.nlu_classifier(body.current_thread.text).topics[].namememberProfessional and Career Development
strings.icontainssubstringprofile caught my attention
strings.icontainssubstringrecruiting top talent
strings.icontainssubstringtalent acquisition team
strings.icontainssubstringexperience seems highly relevant
strings.icontainssubstringexpling this opptunity
strings.icontainssubstringyour professional profile
strings.icontainssubstringa pivotal hire
2 more
strings.icontainssubstringa key hire
strings.icontainssubstringschedule a time

Stages and Predicates

Stage 1: mql_rule

and
  or
    and
      not
        any(ml.nlu_classifier(body.current_thread.text).topics)
          and
            ml.nlu_classifier(body.current_thread.text).topics.confidence eq "high"
            ml.nlu_classifier(body.current_thread.text).topics.name eq "Reminders and Notifications"
      any(ml.nlu_classifier(body.current_thread.text).topics)
        ml.nlu_classifier(body.current_thread.text).topics.name in ["B2B Cold Outreach", "Professional and Career Development"]
    body.current_thread.text contains "a key hire"
    body.current_thread.text contains "a pivotal hire"
    body.current_thread.text contains "experience seems highly relevant"
    body.current_thread.text contains "expling this opptunity"
    body.current_thread.text contains "profile caught my attention"
    body.current_thread.text contains "recruiting top talent"
    body.current_thread.text contains "schedule a time"
    body.current_thread.text contains "talent acquisition team"
    body.current_thread.text contains "your professional profile"
  sender.email.domain.root_domain in ["awsapps.com", "ladesk.com", "salesforce.com"]
  sender.email.email length_compare "50"
  type.inbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
body.current_thread.textcontains
  • a key hire
  • a pivotal hire
  • experience seems highly relevant
  • expling this opptunity
  • profile caught my attention
  • recruiting top talent
  • schedule a time
  • talent acquisition team
  • your professional profile
field:"body.current_thread.text" kind:contains
sender.email.domain.root_domainin
  • awsapps.com
  • ladesk.com
  • salesforce.com
field:"sender.email.domain.root_domain" kind:in
type.inboundeq
  • true transforms: boolean
field:"type.inbound" kind:eq value:"true"

Service abuse: Roomsy with unrelated body content

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

Detects messages from Roomsy.com with a structured noreply sender pattern that contain content unrelated to travel, transportation, or order confirmations.

Threat classification

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

CategoryValues
Attack typesBEC/Fraud, Credential Phishing
Tactics and techniquesImpersonation: Brand, Social engineering

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • sender.email
  • type

Rule body

type.inbound
and sender.email.domain.root_domain == "roomsy.com"
and regex.imatch(sender.email.local_part, "noreply[0-9]{5}")
and not any(ml.nlu_classifier(body.current_thread.text).topics,
            .name in ("Travel and Transportation", "Order Confirmations")
)

Detection logic

Scope: inbound message.

Detects messages from Roomsy.com with a structured noreply sender pattern that contain content unrelated to travel, transportation, or order confirmations.

  1. inbound message
  2. sender.email.domain.root_domain is 'roomsy.com'
  3. sender.email.local_part matches 'noreply[0-9]{5}'
  4. not:
    • any of ml.nlu_classifier(body.current_thread.text).topics where:
      • .name in ('Travel and Transportation', 'Order Confirmations')

Inspects: body.current_thread.text, sender.email.domain.root_domain, sender.email.local_part, type.inbound. Sensors: ml.nlu_classifier, regex.imatch.

Indicators matched (2)

FieldMatchValue
sender.email.domain.root_domainequalsroomsy.com
regex.imatchregexnoreply[0-9]{5}

Stages and Predicates

Stage 1: mql_rule

and
  not
    any(ml.nlu_classifier(body.current_thread.text).topics)
      ml.nlu_classifier(body.current_thread.text).topics.name in ["Order Confirmations", "Travel and Transportation"]
  sender.email.domain.root_domain eq "roomsy.com"
  sender.email.local_part regex_match "noreply[0-9]{5}"
  type.inbound eq "true"

Exclusions

The rule actively suppresses these predicates.

FieldKindExcluded valuesSearch
ml.nlu_classifier(body.current_thread.text).topicsarray_any(no value, null check)excludes:ml.nlu_classifier(body.current_thread.text).topics

Indicators

These rows show field, operator, and value matches.

Service abuse: Sendgrid credential theft with personalized request targeting single recipient

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

Detects messages sent through Sendgrid from new sender domains that contain credential theft language with high confidence. The message targets a single recipient whose email address appears in both the message body and link display text, indicating personalization tactics commonly used in targeted attacks.

Threat classification

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

CategoryValues
Attack typesCredential Phishing
Tactics and techniquesSocial engineering

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • body.links
  • headers
  • headers.domains
  • recipients
  • recipients.to[0]
  • type

Rule body

type.inbound
// a single recipient
and length(recipients.to) == 1
// the domain is a first time sender
and profile.by_sender_domain().prevalence == "new"
// sent from sendgrid
and any(headers.domains, .root_domain == "sendgrid.net")
// cred_theft intent
and any(ml.nlu_classifier(body.current_thread.text).intents,
        .name == "cred_theft" and .confidence != "low"
)
// a request is within the display_text
and any(filter(ml.nlu_classifier(body.current_thread.text).entities,
               .name == "request"
        ),
        any(body.links, .display_text == ..text)
)
// the rcpt email address is in the body of the message, accounting for display_url, which also might include it
and (
  // number of occurances the rcpt email occurs in the body
  strings.count(body.current_thread.text, recipients.to[0].email.email) > 
  // length of the filtered links to those that contain the email
  length(filter(body.links,
                strings.contains(.display_url.url, recipients.to[0].email.email)
         )
  )
)
and not (
  strings.icontains(body.current_thread.text,
                    strings.concat('This message was generated automatically for ',
                                   recipients.to[0].email.email
                    )
  )
  or strings.icontains(body.current_thread.text,
                       strings.concat('This email was sent to ',
                                      recipients.to[0].email.email
                       )
  )
)

Detection logic

Scope: inbound message.

Detects messages sent through Sendgrid from new sender domains that contain credential theft language with high confidence. The message targets a single recipient whose email address appears in both the message body and link display text, indicating personalization tactics commonly used in targeted attacks.

  1. inbound message
  2. length(recipients.to) is 1
  3. profile.by_sender_domain().prevalence is 'new'
  4. any of headers.domains where:
    • .root_domain is 'sendgrid.net'
  5. any of ml.nlu_classifier(body.current_thread.text).intents where all hold:
    • .name is 'cred_theft'
    • .confidence is not 'low'
  6. any of filter(...) where:
    • any of body.links where:
      • .display_text is .text
  7. strings.count(body.current_thread.text) > length(filter(body.links, strings.contains(.display_url.url, recipients.to[0].email.email)))
  8. none of:
    • strings.icontains(body.current_thread.text)
    • strings.icontains(body.current_thread.text)

Inspects: body.current_thread.text, body.links, body.links[].display_text, body.links[].display_url.url, headers.domains, headers.domains[].root_domain, recipients.to, recipients.to[0].email.email, type.inbound. Sensors: ml.nlu_classifier, profile.by_sender_domain, strings.concat, strings.contains, strings.count, strings.icontains.

Indicators matched (3)

FieldMatchValue
headers.domains[].root_domainequalssendgrid.net
ml.nlu_classifier(body.current_thread.text).intents[].nameequalscred_theft
ml.nlu_classifier(body.current_thread.text).entities[].nameequalsrequest

Stages and Predicates

Stage 1: mql_rule

and
  any(filter(...))
    any(body.links)
      body.links.display_text cross_field_compare "filter(...).text"
  any(ml.nlu_classifier(body.current_thread.text).intents)
    and
      ml.nlu_classifier(body.current_thread.text).intents.confidence ne "low"
      ml.nlu_classifier(body.current_thread.text).intents.name eq "cred_theft"
  any(headers.domains)
    headers.domains.root_domain eq "sendgrid.net"
  not
    strings.icontains func_call "strings.icontains(body.current_thread.text)"
  profile.by_sender_domain func_call "profile.by_sender_domain().prevalence == new"
  recipients.to length_compare "1"
  strings.count func_call "strings.count(body.current_thread.text) > length(filter(body.links, strings.contains(.display_url.url, recipients.to[0].email.email)))"
  type.inbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.inboundeq
  • true transforms: boolean
field:"type.inbound" kind:eq value:"true"

Service abuse: SendGrid impersonation via Sendgrid from new sender

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

Detects messages impersonating SendGrid from new senders, while routing through legitimate SendGrid infrastructure. This pattern is commonly used to abuse trusted email services for malicious purposes.

Threat classification

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

CategoryValues
Attack typesCredential Phishing
Tactics and techniquesImpersonation: Brand, Social engineering

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • headers
  • headers.auth_summary
  • headers.domains
  • sender.email
  • subject
  • type

Rule body

type.inbound
// SendGird impersonation patterns
and (
  strings.ilike(strings.replace_confusables(sender.display_name), '*sendgrid*')
  or strings.ilevenshtein(strings.replace_confusables(sender.display_name),
                          'sendgrid'
  ) <= 1
  or (
    strings.ilike(strings.replace_confusables(sender.email.local_part),
                  '*sendgrid*'
    )
    and (
      sender.display_name is null
      or strings.ilike(strings.replace_confusables(subject.base), '*sendgrid*')
    )
  )
  or any(ml.logo_detect(file.message_screenshot()).brands,
         .name == "SendGrid" and .confidence == "high"
  )
  or regex.icontains(body.current_thread.text, 'sendgrid\s*20[0-9]{2}')
)
// sent from sendgrid infra
and any(headers.domains,
        strings.icontains(.domain, 'outbound-mail.sendgrid.net')
)
// not common senders with valid domains
// this catches cases where the domain is invalid and senders become common
and not (
  profile.by_sender_email().prevalence == "common" and sender.email.domain.valid
)

// negate legit sendgrid messages
and not (
  sender.email.domain.domain == "sendgrid.com"
  and coalesce(headers.auth_summary.dmarc.pass, false)
)

Detection logic

Scope: inbound message.

Detects messages impersonating SendGrid from new senders, while routing through legitimate SendGrid infrastructure. This pattern is commonly used to abuse trusted email services for malicious purposes.

  1. inbound message
  2. any of:
    • strings.replace_confusables(sender.display_name) matches '*sendgrid*'
    • strings.replace_confusables(sender.display_name) is similar to 'sendgrid'
    • all of:
      • strings.replace_confusables(sender.email.local_part) matches '*sendgrid*'
      • any of:
        • sender.display_name is missing
        • strings.replace_confusables(subject.base) matches '*sendgrid*'
    • any of ml.logo_detect(file.message_screenshot()).brands where all hold:
      • .name is 'SendGrid'
      • .confidence is 'high'
    • body.current_thread.text matches 'sendgrid\\s*20[0-9]{2}'
  3. any of headers.domains where:
    • .domain contains 'outbound-mail.sendgrid.net'
  4. not:
    • all of:
      • profile.by_sender_email().prevalence is 'common'
      • sender.email.domain.valid
  5. not:
    • all of:
      • sender.email.domain.domain is 'sendgrid.com'
      • coalesce(headers.auth_summary.dmarc.pass)

Inspects: body.current_thread.text, headers.auth_summary.dmarc.pass, headers.domains, headers.domains[].domain, sender.display_name, sender.email.domain.domain, sender.email.domain.valid, sender.email.local_part, subject.base, type.inbound. Sensors: file.message_screenshot, ml.logo_detect, profile.by_sender_email, regex.icontains, strings.icontains, strings.ilevenshtein, strings.ilike, strings.replace_confusables.

Indicators matched (6)

FieldMatchValue
strings.ilikesubstring*sendgrid*
strings.ilevenshteinfuzzysendgrid
ml.logo_detect(file.message_screenshot()).brands[].nameequalsSendGrid
ml.logo_detect(file.message_screenshot()).brands[].confidenceequalshigh
regex.icontainsregexsendgrid\s*20[0-9]{2}
strings.icontainssubstringoutbound-mail.sendgrid.net

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(ml.logo_detect(file.message_screenshot()).brands)
      and
        ml.logo_detect(file.message_screenshot()).brands.confidence eq "high"
        ml.logo_detect(file.message_screenshot()).brands.name eq "SendGrid"
    and
      or
        sender.display_name is_null
        strings.replace_confusables(subject.base) match "sendgrid"
      strings.replace_confusables(sender.email.local_part) match "sendgrid"
    body.current_thread.text regex_match "sendgrid\\s*20[0-9]{2}"
    strings.ilevenshtein func_call "strings.ilevenshtein(strings.replace_confusables(sender.display_name), \"sendgrid\") <= 1"
    strings.replace_confusables(sender.display_name) match "sendgrid"
  not
    and
      coalesce func_call "coalesce(headers.auth_summary.dmarc.pass)"
      sender.email.domain.domain eq "sendgrid.com"
  not
    and
      profile.by_sender_email func_call "profile.by_sender_email().prevalence == common"
      sender.email.domain.valid eq "true"
  any(headers.domains)
    headers.domains.domain contains "outbound-mail.sendgrid.net"
  type.inbound eq "true"

Exclusions

The rule actively suppresses these predicates.

Indicators

These rows show field, operator, and value matches.

Service abuse: SendGrid-formatted link with actor-controlled fragment

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

Detects messages containing SendGrid or SendGrid-like links with base64-encoded zlib-compressed JSON in the URL fragment, indicating potential abuse of legitimate email services for malicious purposes.

Threat classification

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

CategoryValues
Attack typesCredential Phishing
Tactics and techniquesEvasion, Social engineering

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.links
  • type

Rule body

type.inbound
and length(body.links) < 10
and any(body.links,
        // SendGrid or SendGrid-like links have been abused
        (
          .href_url.path == "/ls/click"
          or any(.href_url.query_params_decoded['upn'], . is not null)
        )
        // base64-encoded zlib-compressed JSON
        and regex.match(.href_url.fragment, 'eJy.{7}A.*')
)

Detection logic

Scope: inbound message.

Detects messages containing SendGrid or SendGrid-like links with base64-encoded zlib-compressed JSON in the URL fragment, indicating potential abuse of legitimate email services for malicious purposes.

  1. inbound message
  2. length(body.links) < 10
  3. any of body.links where all hold:
    • any of:
      • .href_url.path is '/ls/click'
      • any of .href_url.query_params_decoded['upn'] where:
        • . is set
    • .href_url.fragment matches 'eJy.{7}A.*'

Inspects: body.links, body.links[].href_url.fragment, body.links[].href_url.path, body.links[].href_url.query_params_decoded['upn'], type.inbound. Sensors: regex.match.

Indicators matched (2)

FieldMatchValue
body.links[].href_url.pathequals/ls/click
regex.matchregexeJy.{7}A.*

Stages and Predicates

Stage 1: mql_rule

and
  any(body.links)
    and
      or
        any(body.links.href_url.query_params_decoded['upn'])
          body.links.href_url.query_params_decoded['upn'] is_not_null
        body.links.href_url.path eq "/ls/click"
      body.links.href_url.fragment regex_match "eJy.{7}A.*"
  body.links length_compare "10"
  type.inbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.inboundeq
  • true transforms: boolean
field:"type.inbound" kind:eq value:"true"

Service abuse: SendThisFile with credential theft and financial language

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

Detects messages from sendthisfile.com containing credential theft language combined with financial communications topics.

Threat classification

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

CategoryValues
Attack typesBEC/Fraud, Credential Phishing
Tactics and techniquesFree file host, Social engineering

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • headers
  • sender.email
  • type

Rule body

type.inbound
and sender.email.domain.root_domain == "sendthisfile.com"
and any(ml.nlu_classifier(body.current_thread.text).intents,
        .name == "cred_theft" and .confidence != "low"
)
and any(ml.nlu_classifier(body.current_thread.text).topics,
        .name == "Financial Communications" and .confidence != "low"
)
// not a reply or forward
and (headers.in_reply_to is null or length(headers.references) == 0)

Detection logic

Scope: inbound message.

Detects messages from sendthisfile.com containing credential theft language combined with financial communications topics.

  1. inbound message
  2. sender.email.domain.root_domain is 'sendthisfile.com'
  3. any of ml.nlu_classifier(body.current_thread.text).intents where all hold:
    • .name is 'cred_theft'
    • .confidence is not 'low'
  4. any of ml.nlu_classifier(body.current_thread.text).topics where all hold:
    • .name is 'Financial Communications'
    • .confidence is not 'low'
  5. any of:
    • headers.in_reply_to is missing
    • length(headers.references) is 0

Inspects: body.current_thread.text, headers.in_reply_to, headers.references, sender.email.domain.root_domain, type.inbound. Sensors: ml.nlu_classifier.

Indicators matched (3)

FieldMatchValue
sender.email.domain.root_domainequalssendthisfile.com
ml.nlu_classifier(body.current_thread.text).intents[].nameequalscred_theft
ml.nlu_classifier(body.current_thread.text).topics[].nameequalsFinancial Communications

Stages and Predicates

Stage 1: mql_rule

and
  any(ml.nlu_classifier(body.current_thread.text).intents)
    and
      ml.nlu_classifier(body.current_thread.text).intents.confidence ne "low"
      ml.nlu_classifier(body.current_thread.text).intents.name eq "cred_theft"
  any(ml.nlu_classifier(body.current_thread.text).topics)
    and
      ml.nlu_classifier(body.current_thread.text).topics.confidence ne "low"
      ml.nlu_classifier(body.current_thread.text).topics.name eq "Financial Communications"
  or
    headers.in_reply_to is_null
    headers.references length_compare "0"
  sender.email.domain.root_domain eq "sendthisfile.com"
  type.inbound eq "true"

Indicators

These rows show field, operator, and value matches.

Service abuse: Settime.io sender with callback scam intent

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

Detects inbound messages from noreply@settime.io that exhibit callback scam characteristics, as identified by natural language understanding with medium or high confidence. Settime.io is a scheduling service that can be abused to send fraudulent messages prompting recipients to call a phone number controlled by threat actors.

Threat classification

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

CategoryValues
Attack typesCallback Phishing
Tactics and techniquesSocial engineering, Out of band pivot

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • sender.email
  • type

Rule body

type.inbound
and sender.email.email == "noreply@settime.io"
and any(ml.nlu_classifier(body.current_thread.text).intents,
        .name == "callback_scam" and .confidence != "low"
)

Detection logic

Scope: inbound message.

Detects inbound messages from noreply@settime.io that exhibit callback scam characteristics, as identified by natural language understanding with medium or high confidence. Settime.io is a scheduling service that can be abused to send fraudulent messages prompting recipients to call a phone number controlled by threat actors.

  1. inbound message
  2. sender.email.email is 'noreply@settime.io'
  3. any of ml.nlu_classifier(body.current_thread.text).intents where all hold:
    • .name is 'callback_scam'
    • .confidence is not 'low'

Inspects: body.current_thread.text, sender.email.email, type.inbound. Sensors: ml.nlu_classifier.

Indicators matched (2)

FieldMatchValue
sender.email.emailequalsnoreply@settime.io
ml.nlu_classifier(body.current_thread.text).intents[].nameequalscallback_scam

Stages and Predicates

Stage 1: mql_rule

and
  any(ml.nlu_classifier(body.current_thread.text).intents)
    and
      ml.nlu_classifier(body.current_thread.text).intents.confidence ne "low"
      ml.nlu_classifier(body.current_thread.text).intents.name eq "callback_scam"
  sender.email.email eq "noreply@settime.io"
  type.inbound eq "true"

Indicators

These rows show field, operator, and value matches.

Service abuse: Soundestlink redirect with suspicious indicators

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

Detects messages containing Soundestlink redirect links that lack proper unsubscribe mechanisms, and lack standard mailing list headers, indicating potential abuse of the service.

Threat classification

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

CategoryValues
Attack typesCredential Phishing, Malware/Ransomware
Tactics and techniquesEvasion

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • headers
  • headers.hops
  • type

Rule body

type.inbound
and any(body.current_thread.links,
        .href_url.domain.root_domain == "soundestlink.com"
        and not strings.istarts_with(.href_url.path, '/contactsPreferences/')
)
and length(distinct(filter(body.current_thread.links,
                           .href_url.domain.root_domain == "soundestlink.com"
                           and not strings.istarts_with(.href_url.path,
                                                        '/contactsPreferences/'
                           )
                    ),
                    .href_url.url
           )
) == 1
and not any(headers.hops, any(.fields, .name =~ "List-Unsubscribe"))
and not (
  any(html.xpath(body.html, '//a').nodes, .inner_text =~ "Edit Preferences")
  and any(html.xpath(body.html, '//a').nodes, .inner_text =~ "Unsubscribe")
)

Detection logic

Scope: inbound message.

Detects messages containing Soundestlink redirect links that lack proper unsubscribe mechanisms, and lack standard mailing list headers, indicating potential abuse of the service.

  1. inbound message
  2. any of body.current_thread.links where all hold:
    • .href_url.domain.root_domain is 'soundestlink.com'
    • not:
      • .href_url.path starts with '/contactsPreferences/'
  3. length(distinct(filter(body.current_thread.links, .href_url.domain.root_domain == 'soundestlink.com' and not strings.istarts_with(.href_url.path, '/contactsPreferences/')), .href_url.url)) is 1
  4. not:
    • any of headers.hops where:
      • any of .fields where:
        • .name is 'List-Unsubscribe'
  5. not:
    • all of:
      • any of html.xpath(body.html, '//a').nodes where:
        • .inner_text is 'Edit Preferences'
      • any of html.xpath(body.html, '//a').nodes where:
        • .inner_text is 'Unsubscribe'

Inspects: body.current_thread.links, body.current_thread.links[].href_url.domain.root_domain, body.current_thread.links[].href_url.path, body.html, headers.hops, headers.hops[].fields, headers.hops[].fields[].name, type.inbound. Sensors: html.xpath, strings.istarts_with.

Indicators matched (1)

FieldMatchValue
body.current_thread.links[].href_url.domain.root_domainequalssoundestlink.com

Stages and Predicates

Stage 1: mql_rule

and
  any(body.current_thread.links)
    and
      not
        body.current_thread.links.href_url.path starts_with "/contactsPreferences/"
      body.current_thread.links.href_url.domain.root_domain eq "soundestlink.com"
  not
    any(headers.hops)
      any(headers.hops.fields)
        headers.hops.fields.name eq "List-Unsubscribe"
  not
    and
      any(html.xpath(body.html, '//a').nodes)
        html.xpath(body.html, '//a').nodes.inner_text eq "Edit Preferences"
      any(html.xpath(body.html, '//a').nodes)
        html.xpath(body.html, '//a').nodes.inner_text eq "Unsubscribe"
  distinct(filter(body.current_thread.links, .href_url.domain.root_domain == 'soundestlink.com' and not strings.istarts_with(.href_url.path, '/contactsPreferences/')), .href_url.url) length_compare "1"
  type.inbound eq "true"

Exclusions

The rule actively suppresses these predicates.

FieldKindExcluded valuesSearch
headers.hopsarray_any(no value, null check)excludes:headers.hops
html.xpath(body.html, '//a').nodesarray_any(no value, null check)excludes:html.xpath(body.html, '//a').nodes

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.inboundeq
  • true transforms: boolean
field:"type.inbound" kind:eq value:"true"

Service abuse: Soundestlink.com Microsoft impersonation

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

Detects links or extracted domains hosted on soundestlink.com where the subdomain contains Microsoft-related keywords such as 'microsoft', 'teams', 'login', 'office', '365', or 'outlook'. This pattern indicates abuse of a legitimate link redirection/tracking service to disguise malicious URLs as Microsoft login or authentication pages, a common technique used to harvest credentials.

Threat classification

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

CategoryValues
Attack typesCredential Phishing
Tactics and techniquesImpersonation: Brand, Lookalike domain, Social engineering

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.html
  • body.links
  • type

Rule body

type.inbound
and (
  // parsed urls
  any(body.links,
      (
        .href_url.domain.root_domain == "soundestlink.com"
        and regex.icontains(.href_url.domain.subdomain,
                            '(?:microsoft|teams|login|office|365|outlook)'
        )
      )
      // handle mimecast
      or (
        .href_url.domain.root_domain in ("mimecastprotect.com", "mimecast.com")
        and any(.href_url.query_params_decoded['domain'],
                strings.parse_domain(.).root_domain == "soundestlink.com"
                and regex.icontains(strings.parse_domain(.).subdomain,
                                    '(?:microsoft|teams|login|office|365|outlook)'
                )
        )
      )
  )
  // unparsed and extracted
  or (
    strings.icontains(body.html.display_text, 'soundestlink.com')
    and any(regex.extract(body.html.display_text,
                          '(?P<domain>[a-z0-9.\-]+\.soundestlink\.com)'
            ),
            regex.icontains(strings.parse_domain(.named_groups["domain"]).subdomain,
                            '(?:microsoft|teams|login|office|365|outlook)'
            )
    )
  )
)

Detection logic

Scope: inbound message.

Detects links or extracted domains hosted on soundestlink.com where the subdomain contains Microsoft-related keywords such as 'microsoft', 'teams', 'login', 'office', '365', or 'outlook'. This pattern indicates abuse of a legitimate link redirection/tracking service to disguise malicious URLs as Microsoft login or authentication pages, a common technique used to harvest credentials.

  1. inbound message
  2. any of:
    • any of body.links where any holds:
      • all of:
        • .href_url.domain.root_domain is 'soundestlink.com'
        • .href_url.domain.subdomain matches '(?:microsoft|teams|login|office|365|outlook)'
      • all of:
        • .href_url.domain.root_domain in ('mimecastprotect.com', 'mimecast.com')
        • any of .href_url.query_params_decoded['domain'] where all hold:
          • strings.parse_domain(.).root_domain is 'soundestlink.com'
          • strings.parse_domain(.).subdomain matches '(?:microsoft|teams|login|office|365|outlook)'
    • all of:
      • body.html.display_text contains 'soundestlink.com'
      • any of regex.extract(body.html.display_text) where:
        • strings.parse_domain(.named_groups['domain']).subdomain matches '(?:microsoft|teams|login|office|365|outlook)'

Inspects: body.html.display_text, body.links, body.links[].href_url.domain.root_domain, body.links[].href_url.domain.subdomain, body.links[].href_url.query_params_decoded['domain'], type.inbound. Sensors: regex.extract, regex.icontains, strings.icontains, strings.parse_domain.

Indicators matched (6)

FieldMatchValue
body.links[].href_url.domain.root_domainequalssoundestlink.com
regex.icontainsregex(?:microsoft|teams|login|office|365|outlook)
body.links[].href_url.domain.root_domainmembermimecastprotect.com
body.links[].href_url.domain.root_domainmembermimecast.com
strings.icontainssubstringsoundestlink.com
regex.extractregex(?P<domain>[a-z0-9.\-]+\.soundestlink\.com)

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(body.links)
      or
        and
          any(body.links.href_url.query_params_decoded['domain'])
            and
              strings.parse_domain func_call "strings.parse_domain(body.links[].href_url.query_params_decoded['domain'][]).root_domain == soundestlink.com"
              strings.parse_domain(body.links[].href_url.query_params_decoded['domain'][]).subdomain regex_match "(?:microsoft|teams|login|office|365|outlook)"
          body.links.href_url.domain.root_domain in ["mimecast.com", "mimecastprotect.com"]
        and
          body.links.href_url.domain.root_domain eq "soundestlink.com"
          body.links.href_url.domain.subdomain regex_match "(?:microsoft|teams|login|office|365|outlook)"
    and
      any(regex.extract(body.html.display_text))
        strings.parse_domain(regex.extract(body.html.display_text)[].named_groups['domain']).subdomain regex_match "(?:microsoft|teams|login|office|365|outlook)"
      body.html.display_text contains "soundestlink.com"
  type.inbound eq "true"

Indicators

These rows show field, operator, and value matches.

Service abuse: Square marketing with suspicious QR code

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

Detects messages from Square's marketing domain containing QR codes that redirect to self-service creation platforms, file sharing services, or image hosting services.

Threat classification

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

CategoryValues
Attack typesCredential Phishing
Tactics and techniquesQR code, Free file host

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • sender.email
  • type

Rule body

type.inbound
and sender.email.domain.domain == "squaremktg.com"
and beta.scan_qr(file.message_screenshot()).found
//
// This rule makes use of a beta feature and is subject to change without notice
// using the beta feature in custom rules is not suggested until it has been formally released
//
and any(filter(beta.scan_qr(file.message_screenshot()).items,
               // ignore square's own free website hosting service
               .url.domain.root_domain != "square.site"
        ),
        (
          .url.domain.root_domain in $self_service_creation_platform_domains
          or .url.domain.domain in $self_service_creation_platform_domains
        )
        or (
          .url.domain.root_domain in $free_file_hosts
          or .url.domain.domain in $free_file_hosts
        )
)

Detection logic

Scope: inbound message.

Detects messages from Square's marketing domain containing QR codes that redirect to self-service creation platforms, file sharing services, or image hosting services.

  1. inbound message
  2. sender.email.domain.domain is 'squaremktg.com'
  3. beta.scan_qr(file.message_screenshot()).found
  4. any of filter(...) where any holds:
    • any of:
      • .url.domain.root_domain in $self_service_creation_platform_domains
      • .url.domain.domain in $self_service_creation_platform_domains
    • any of:
      • .url.domain.root_domain in $free_file_hosts
      • .url.domain.domain in $free_file_hosts

Inspects: sender.email.domain.domain, type.inbound. Sensors: beta.scan_qr, file.message_screenshot. Reference lists: $free_file_hosts, $self_service_creation_platform_domains.

Indicators matched (1)

FieldMatchValue
sender.email.domain.domainequalssquaremktg.com

Stages and Predicates

Stage 1: mql_rule

and
  any(filter(...))
    or
       macro "filter(...)[].url.domain.domain in free_file_hosts"
       macro "filter(...)[].url.domain.domain in self_service_creation_platform_domains"
       macro "filter(...)[].url.domain.root_domain in free_file_hosts"
       macro "filter(...)[].url.domain.root_domain in self_service_creation_platform_domains"
  beta.scan_qr func_call "beta.scan_qr(file.message_screenshot()).found"
  sender.email.domain.domain eq "squaremktg.com"
  type.inbound eq "true"

Indicators

These rows show field, operator, and value matches.

Service abuse: SurveyMonkey with suspicious outbound links

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

Detects messages sent from SurveyMonkey's user domain that contain links to non-SurveyMonkey domains within nested table elements, excluding survey-related content.

Threat classification

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

CategoryValues
Attack typesCredential Phishing
Tactics and techniquesSocial engineering, Impersonation: Brand

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • sender.email
  • type

Rule body

type.inbound
and sender.email.domain.root_domain == "surveymonkeyuser.com"
and any(html.xpath(body.html, '//table//table//a').nodes,
        .links[0].href_url.domain.root_domain != "surveymonkey.com"
        and not strings.icontains(.inner_text, "survey")
        and not (
          .links[0].href_url.domain.root_domain in (
            "mimecast.com",
            "mimecastprotect.com"
          )
          and any(.links[0].href_url.query_params_decoded['domain'],
                  strings.parse_domain(.).domain in $tenant_domains
                  or strings.parse_domain(.).domain in ("surveymonkey.com", )
          )
        )
)

Detection logic

Scope: inbound message.

Detects messages sent from SurveyMonkey's user domain that contain links to non-SurveyMonkey domains within nested table elements, excluding survey-related content.

  1. inbound message
  2. sender.email.domain.root_domain is 'surveymonkeyuser.com'
  3. any of html.xpath(body.html, '//table//table//a').nodes where all hold:
    • .links[0].href_url.domain.root_domain is not 'surveymonkey.com'
    • not:
      • .inner_text contains 'survey'
    • not:
      • all of:
        • .links[0].href_url.domain.root_domain in ('mimecast.com', 'mimecastprotect.com')
        • any of .links[0].href_url.query_params_decoded['domain'] where any holds:
          • strings.parse_domain(.).domain in $tenant_domains
          • strings.parse_domain(.).domain in ('surveymonkey.com')

Inspects: body.html, sender.email.domain.root_domain, type.inbound. Sensors: html.xpath, strings.icontains, strings.parse_domain. Reference lists: $tenant_domains.

Indicators matched (1)

FieldMatchValue
sender.email.domain.root_domainequalssurveymonkeyuser.com

Stages and Predicates

Stage 1: mql_rule

and
  any(html.xpath(body.html, '//table//table//a').nodes)
    and
      not
        and
          any(html.xpath(body.html, '//table//table//a').nodes.links[0].href_url.query_params_decoded['domain'])
            or
              strings.parse_domain func_call "strings.parse_domain(html.xpath(body.html, '//table//table//a').nodes[].links[0].href_url.query_params_decoded['domain'][]).domain in (surveymonkey.com)"
              strings.parse_domain func_call "strings.parse_domain(html.xpath(body.html, '//table//table//a').nodes[].links[0].href_url.query_params_decoded['domain'][]).domain in tenant_domains"
          html.xpath(body.html, '//table//table//a').nodes.links[0].href_url.domain.root_domain in ["mimecast.com", "mimecastprotect.com"]
      not
        html.xpath(body.html, '//table//table//a').nodes.inner_text contains "survey"
      html.xpath(body.html, '//table//table//a').nodes.links[0].href_url.domain.root_domain ne "surveymonkey.com"
  sender.email.domain.root_domain eq "surveymonkeyuser.com"
  type.inbound eq "true"

Indicators

These rows show field, operator, and value matches.

Service abuse: Suspicious Datadog alert

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

Message from alert@dtdg.co containing links to URL shorteners or self-service creation platforms.

Threat classification

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

CategoryValues
Attack typesCredential Phishing, Malware/Ransomware
Tactics and techniquesEvasion, Free subdomain host

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • body.links
  • sender.email
  • type

Rule body

type.inbound
and sender.email.email == "alert@dtdg.co"
and length(body.current_thread.text) < 1000
and (
  (
    any(filter(body.links,
               .parser == "hyperlink"
               and not any(.href_url.query_params_decoded["domain"],
                           strings.parse_domain(.).root_domain == "datadoghq.com"
               )
        ),
        .href_url.domain.root_domain != "datadoghq.com"
        and .href_url.domain.root_domain != "aka.ms"
    )
    and regex.icontains(body.current_thread.text,
                        'quarantine|held for.{0,10}review|secure message|voice\s?mail'
    )
  )
  or (
    ml.nlu_classifier(body.current_thread.text).language == "english"
    and any(ml.nlu_classifier(body.current_thread.text).topics,
            .confidence == "high"
            and .name == "Voicemail Call and Missed Call Notifications"
    )
  )
)

Detection logic

Scope: inbound message.

Message from alert@dtdg.co containing links to URL shorteners or self-service creation platforms.

  1. inbound message
  2. sender.email.email is 'alert@dtdg.co'
  3. length(body.current_thread.text) < 1000
  4. any of:
    • all of:
      • any of filter(body.links) where all hold:
        • .href_url.domain.root_domain is not 'datadoghq.com'
        • .href_url.domain.root_domain is not 'aka.ms'
      • body.current_thread.text matches 'quarantine|held for.{0,10}review|secure message|voice\\s?mail'
    • all of:
      • ml.nlu_classifier(body.current_thread.text).language is 'english'
      • any of ml.nlu_classifier(body.current_thread.text).topics where all hold:
        • .confidence is 'high'
        • .name is 'Voicemail Call and Missed Call Notifications'

Inspects: body.current_thread.text, body.links, body.links[].href_url.query_params_decoded['domain'], body.links[].parser, sender.email.email, type.inbound. Sensors: ml.nlu_classifier, regex.icontains, strings.parse_domain.

Indicators matched (5)

FieldMatchValue
sender.email.emailequalsalert@dtdg.co
body.links[].parserequalshyperlink
regex.icontainsregexquarantine|held for.{0,10}review|secure message|voice\s?mail
ml.nlu_classifier(body.current_thread.text).topics[].confidenceequalshigh
ml.nlu_classifier(body.current_thread.text).topics[].nameequalsVoicemail Call and Missed Call Notifications

Stages and Predicates

Stage 1: mql_rule

and
  or
    and
      any(filter(body.links))
        and
          filter(body.links).href_url.domain.root_domain ne "aka.ms"
          filter(body.links).href_url.domain.root_domain ne "datadoghq.com"
      body.current_thread.text regex_match "quarantine|held for.{0,10}review|secure message|voice\\s?mail"
    and
      any(ml.nlu_classifier(body.current_thread.text).topics)
        and
          ml.nlu_classifier(body.current_thread.text).topics.confidence eq "high"
          ml.nlu_classifier(body.current_thread.text).topics.name eq "Voicemail Call and Missed Call Notifications"
      ml.nlu_classifier func_call "ml.nlu_classifier(body.current_thread.text).language == english"
  body.current_thread.text length_compare "1000"
  sender.email.email eq "alert@dtdg.co"
  type.inbound eq "true"

Indicators

These rows show field, operator, and value matches.

Service abuse: Trello board invitation with VIP impersonation

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

Detects fraudulent Trello board invitations that impersonate organization VIPs by using organization domain names in board titles and including notes purportedly from legitimate company executives.

Threat classification

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

CategoryValues
Attack typesCredential Phishing
Tactics and techniquesImpersonation: VIP, Social engineering

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • headers
  • headers.hops
  • sender.email
  • type

Rule body

type.inbound
and sender.email.domain.root_domain == "trello.com"
// inspect the hops for two observed patterns
and any(headers.hops,
        any(.fields,
            // X-Msys-Api with campaign_id
            (
              .name =~ "X-Msys-Api"
              and strings.icontains(.value, 'campaign_id":"invite_board_')
            )
            // X-Atl-Po-Triggerid with trello and invite board
            or (
              .name == "Feedback-Id"
              and strings.icontains(.value, 'trello')
              and regex.icontains(.value, 'invite[_-]board')
            )
        )
)

// inspect the body for two observed patterns
and (
  // org_sld as the start of the board name with the org_vip as the sender
  any(html.xpath(body.html, '//h2').nodes,
      // org vip
      any($org_vips, strings.icontains(..display_text, .display_name))
      // org sld as the board name
      and any($org_slds,
              strings.icontains(..display_text,
                                strings.concat('invited you to their board ', .)
              )
      )
  )
  // pattern of the first name ending in `From` after the org_vip display name
  or any(html.xpath(body.html,
                    '//div[img[@class="trello-member-avatar"]]/parent::div'
         ).nodes,
         strings.starts_with(.display_text, 'A note from ')
         and strings.iends_with(.display_text, 'From')
         and any($org_vips, strings.icontains(..display_text, .display_name))
  )
)

Detection logic

Scope: inbound message.

Detects fraudulent Trello board invitations that impersonate organization VIPs by using organization domain names in board titles and including notes purportedly from legitimate company executives.

  1. inbound message
  2. sender.email.domain.root_domain is 'trello.com'
  3. any of headers.hops where:
    • any of .fields where any holds:
      • all of:
        • .name is 'X-Msys-Api'
        • .value contains 'campaign_id":"invite_board_'
      • all of:
        • .name is 'Feedback-Id'
        • .value contains 'trello'
        • .value matches 'invite[_-]board'
  4. any of:
    • any of html.xpath(body.html, '//h2').nodes where all hold:
      • any of $org_vips where:
        • strings.icontains(.display_text)
      • any of $org_slds where:
        • strings.icontains(.display_text)
    • any of html.xpath(body.html, '//div[img[@class="trello-member-avatar"]]/parent::div').nodes where all hold:
      • .display_text starts with 'A note from '
      • .display_text ends with 'From'
      • any of $org_vips where:
        • strings.icontains(.display_text)

Inspects: body.html, headers.hops, headers.hops[].fields, headers.hops[].fields[].name, headers.hops[].fields[].value, sender.email.domain.root_domain, type.inbound. Sensors: html.xpath, regex.icontains, strings.concat, strings.icontains, strings.iends_with, strings.starts_with. Reference lists: $org_slds, $org_vips.

Indicators matched (8)

FieldMatchValue
sender.email.domain.root_domainequalstrello.com
headers.hops[].fields[].nameequalsX-Msys-Api
strings.icontainssubstringcampaign_id":"invite_board_
headers.hops[].fields[].nameequalsFeedback-Id
strings.icontainssubstringtrello
regex.icontainsregexinvite[_-]board
strings.starts_withprefixA note from
strings.iends_withsuffixFrom

Stages and Predicates

Stage 1: mql_rule

and
  any(headers.hops)
    any(headers.hops.fields)
      or
        and
          headers.hops.fields[].name eq "Feedback-Id"
          headers.hops.fields[].value contains "trello"
          headers.hops.fields[].value regex_match "invite[_-]board"
        and
          headers.hops.fields[].name eq "X-Msys-Api"
          headers.hops.fields[].value contains "campaign_id\":\"invite_board_"
  or
    any(html.xpath(body.html, '//div[img[@class="trello-member-avatar"]]/parent::div').nodes)
      and
        any($org_vips)
          strings.icontains func_call "strings.icontains(html.xpath(body.html, '//div[img[@class=\"trello-member-avatar\"]]/parent::div').nodes[].display_text)"
        html.xpath(body.html, '//div[img[@class="trello-member-avatar"]]/parent::div').nodes.display_text ends_with "From"
        html.xpath(body.html, '//div[img[@class="trello-member-avatar"]]/parent::div').nodes.display_text starts_with "A note from "
    any(html.xpath(body.html, '//h2').nodes)
      and
        any($org_slds)
          strings.icontains func_call "strings.icontains(html.xpath(body.html, '//h2').nodes[].display_text)"
        any($org_vips)
          strings.icontains func_call "strings.icontains(html.xpath(body.html, '//h2').nodes[].display_text)"
  sender.email.domain.root_domain eq "trello.com"
  type.inbound eq "true"

Indicators

These rows show field, operator, and value matches.

Service abuse: WeTransfer callback scam

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

Detects callback scams originating from legitimate WeTransfer noreply address using natural language processing to identify high-confidence callback scam intent in the message body.

Threat classification

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

CategoryValues
Attack typesCallback Phishing
Tactics and techniquesSocial engineering, Out of band pivot

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • sender.email
  • type

Rule body

type.inbound
and sender.email.email == 'noreply@wetransfer.com'
and any(ml.nlu_classifier(body.current_thread.text).intents,
        .name == "callback_scam"
)

Detection logic

Scope: inbound message.

Detects callback scams originating from legitimate WeTransfer noreply address using natural language processing to identify high-confidence callback scam intent in the message body.

  1. inbound message
  2. sender.email.email is 'noreply@wetransfer.com'
  3. any of ml.nlu_classifier(body.current_thread.text).intents where:
    • .name is 'callback_scam'

Inspects: body.current_thread.text, sender.email.email, type.inbound. Sensors: ml.nlu_classifier.

Indicators matched (2)

FieldMatchValue
sender.email.emailequalsnoreply@wetransfer.com
ml.nlu_classifier(body.current_thread.text).intents[].nameequalscallback_scam

Stages and Predicates

Stage 1: mql_rule

and
  any(ml.nlu_classifier(body.current_thread.text).intents)
    ml.nlu_classifier(body.current_thread.text).intents.name eq "callback_scam"
  sender.email.email eq "noreply@wetransfer.com"
  type.inbound eq "true"

Indicators

These rows show field, operator, and value matches.

Service abuse: Wufoo credential theft

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

Detects malicious messages sent from Wufoo's sending address (no-reply@wufoo.com) that are abusing the platform to deliver credential theft content. This rule identifies messages that lack Wufoo's standard display name and structural HTML elements found in legitimate Wufoo emails, while containing links and content classified as credential theft by NLU analysis.

Threat classification

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

CategoryValues
Attack typesCredential Phishing
Tactics and techniquesSocial engineering

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • sender.email
  • type

Rule body

type.inbound
and sender.email.email == 'no-reply@wufoo.com'
and not strings.icontains(sender.display_name, 'Wufoo')
// table found in legit wufoo emails
and not length(html.xpath(body.html, "//table[@class='readonly']").nodes) == 1
and 0 < length(body.links)
and any(ml.nlu_classifier(body.current_thread.text).intents,
        .name == 'cred_theft' and .confidence != 'low'
)

Detection logic

Scope: inbound message.

Detects malicious messages sent from Wufoo's sending address (no-reply@wufoo.com) that are abusing the platform to deliver credential theft content. This rule identifies messages that lack Wufoo's standard display name and structural HTML elements found in legitimate Wufoo emails, while containing links and content classified as credential theft by NLU analysis.

  1. inbound message
  2. sender.email.email is 'no-reply@wufoo.com'
  3. not:
    • sender.display_name contains 'Wufoo'
  4. not:
    • length(html.xpath(body.html, "//table[@class='readonly']").nodes) is 1
  5. length(body.links) > 0
  6. any of ml.nlu_classifier(body.current_thread.text).intents where all hold:
    • .name is 'cred_theft'
    • .confidence is not 'low'

Inspects: body.current_thread.text, body.html, body.links, sender.display_name, sender.email.email, type.inbound. Sensors: html.xpath, ml.nlu_classifier, strings.icontains.

Indicators matched (2)

FieldMatchValue
sender.email.emailequalsno-reply@wufoo.com
ml.nlu_classifier(body.current_thread.text).intents[].nameequalscred_theft

Stages and Predicates

Stage 1: mql_rule

and
  any(ml.nlu_classifier(body.current_thread.text).intents)
    and
      ml.nlu_classifier(body.current_thread.text).intents.confidence ne "low"
      ml.nlu_classifier(body.current_thread.text).intents.name eq "cred_theft"
  not
    html.xpath(body.html, "//table[@class='readonly']").nodes length_compare "1"
  not
    sender.display_name contains "Wufoo"
  body.links length_compare "0"
  sender.email.email eq "no-reply@wufoo.com"
  type.inbound eq "true"

Exclusions

The rule actively suppresses these predicates.

FieldKindExcluded valuesSearch
html.xpath(body.html, "//table[@class='readonly']").nodeslength_compare1
sender.display_namecontainsWufooexcludes:sender.display_name field:"sender.display_name" value:"Wufoo"

Indicators

These rows show field, operator, and value matches.

Service abuse: Zohodesk reply-to mismatch with job scam indicators

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

Detects inbound messages sent from Zohodesk infrastructure where the reply-to address points to a domain outside of Zohodesk, combined with natural language signals indicating job scam content. This technique abuses legitimate Zohodesk services to add credibility while redirecting responses to an external actor-controlled address.

Threat classification

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

CategoryValues
Attack typesBEC/Fraud, Spam
Tactics and techniquesSocial engineering, Out of band pivot, Spoofing

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • headers
  • headers.reply_to
  • sender.email
  • type

Rule body

type.inbound
and sender.email.domain.root_domain == "zohodesk.com"
and any(headers.reply_to, .email.domain.root_domain != "zohodesk.com")
and (
  any(ml.nlu_classifier(body.current_thread.text).intents,
      .name == "job_scam" and .confidence != "low"
  )
  // nlu fallback where we don't get job scam
  or strings.icontains(body.current_thread.text, "talent acquisition")
)

Detection logic

Scope: inbound message.

Detects inbound messages sent from Zohodesk infrastructure where the reply-to address points to a domain outside of Zohodesk, combined with natural language signals indicating job scam content. This technique abuses legitimate Zohodesk services to add credibility while redirecting responses to an external actor-controlled address.

  1. inbound message
  2. sender.email.domain.root_domain is 'zohodesk.com'
  3. any of headers.reply_to where:
    • .email.domain.root_domain is not 'zohodesk.com'
  4. any of:
    • any of ml.nlu_classifier(body.current_thread.text).intents where all hold:
      • .name is 'job_scam'
      • .confidence is not 'low'
    • body.current_thread.text contains 'talent acquisition'

Inspects: body.current_thread.text, headers.reply_to, headers.reply_to[].email.domain.root_domain, sender.email.domain.root_domain, type.inbound. Sensors: ml.nlu_classifier, strings.icontains.

Indicators matched (3)

FieldMatchValue
sender.email.domain.root_domainequalszohodesk.com
ml.nlu_classifier(body.current_thread.text).intents[].nameequalsjob_scam
strings.icontainssubstringtalent acquisition

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(ml.nlu_classifier(body.current_thread.text).intents)
      and
        ml.nlu_classifier(body.current_thread.text).intents.confidence ne "low"
        ml.nlu_classifier(body.current_thread.text).intents.name eq "job_scam"
    body.current_thread.text contains "talent acquisition"
  any(headers.reply_to)
    headers.reply_to.email.domain.root_domain ne "zohodesk.com"
  sender.email.domain.root_domain eq "zohodesk.com"
  type.inbound eq "true"

Indicators

These rows show field, operator, and value matches.

Service abuse: Zoom Clips with unregistered reply-to domain

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

Detects messages sent through legitimate Zoom infrastructure sharing a clip, where the reply-to domain has no registered WHOIS record.

Threat classification

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

CategoryValues
Attack typesSpam
Tactics and techniquesSocial engineering, Evasion

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • headers
  • headers.reply_to[0]
  • sender.email
  • subject
  • type

Rule body

type.inbound
// Legitimate zoom sending infrastructure
and sender.email.email == "no-reply@zoom.us"
// sharing a clip
and strings.starts_with(subject.base, 'Clips')
// reply-to domain is not registered
and (network.whois(headers.reply_to[0].email.domain).found == false)

Detection logic

Scope: inbound message.

Detects messages sent through legitimate Zoom infrastructure sharing a clip, where the reply-to domain has no registered WHOIS record.

  1. inbound message
  2. sender.email.email is 'no-reply@zoom.us'
  3. subject.base starts with 'Clips'
  4. network.whois(headers.reply_to[0].email.domain).found is False

Inspects: headers.reply_to[0].email.domain, sender.email.email, subject.base, type.inbound. Sensors: network.whois, strings.starts_with.

Indicators matched (2)

FieldMatchValue
sender.email.emailequalsno-reply@zoom.us
strings.starts_withprefixClips

Stages and Predicates

Stage 1: mql_rule

and
  network.whois func_call "network.whois(headers.reply_to[0].email.domain).found == false"
  sender.email.email eq "no-reply@zoom.us"
  subject.base starts_with "Clips"
  type.inbound eq "true"

Indicators

These rows show field, operator, and value matches.

Service abuse: Zoom with newly registered reply-to domain

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

Detects messages from legitimate Zoom infrastructure (no-reply@zoom.us) that contain a reply-to address with a domain registered within the last 45 days, indicating potential abuse of Zoom's service for malicious purposes.

Threat classification

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

CategoryValues
Attack typesSpam
Tactics and techniquesSocial engineering, Evasion

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • headers
  • headers.reply_to[0]
  • sender.email
  • type

Rule body

type.inbound
// Legitimate zoom sending infrastructure
and sender.email.email == "no-reply@zoom.us"
// newly registered reply-to domain
and network.whois(headers.reply_to[0].email.domain).days_old < 45

Detection logic

Scope: inbound message.

Detects messages from legitimate Zoom infrastructure (no-reply@zoom.us) that contain a reply-to address with a domain registered within the last 45 days, indicating potential abuse of Zoom's service for malicious purposes.

  1. inbound message
  2. sender.email.email is 'no-reply@zoom.us'
  3. network.whois(headers.reply_to[0].email.domain).days_old < 45

Inspects: headers.reply_to[0].email.domain, sender.email.email, type.inbound. Sensors: network.whois.

Indicators matched (1)

FieldMatchValue
sender.email.emailequalsno-reply@zoom.us

Stages and Predicates

Stage 1: mql_rule

and
  network.whois func_call "network.whois(headers.reply_to[0].email.domain).days_old < 45"
  sender.email.email eq "no-reply@zoom.us"
  type.inbound eq "true"

Indicators

These rows show field, operator, and value matches.