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: Arketa notification callback scammedium
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: EventCreate links to newly registered domainsmedium
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: Kagoya.net-hosted domains sending English business lureslow
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 suspicious reply-to address or linkslow
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(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+,$') ) )
    • any of body.current_thread.links where all hold:
      • .parser is 'plain'
      • .href_url.scheme is 'mailto'
      • any of:
        • all of:
          • strings.istarts_with(strings.parse_email(.href_url.url).local_part, '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(body.current_thread.links)
      and
        or
          and
            strings.istarts_with func_call "strings.istarts_with(strings.parse_email(.href_url.url).local_part,\n                                 'apple'\n            )"
            strings.parse_email func_call "strings.parse_email(.href_url.url).domain.domain not in $org_domains"
          network.whois func_call "network.whois(.href_url.domain).days_old < 30"
        body.current_thread.links.href_url.scheme eq "mailto"
        body.current_thread.links.parser eq "plain"
     macro "any(html.xpath(body.html, '//div[@class=\"email-body\"]').nodes,\n      any(regex.iextract(.display_text, '^(?P<first_line>[^\\n]+)\\n'),\n          // NLU catches the actor controlled values as callback\n          any(ml.nlu_classifier(beta.ml_translate(.named_groups[\"first_line\"]).text\n              ).intents,\n              .name == \"callback_scam\"\n          )\n          // we have to account for NLU not catching it as callback_scam\n          // this catches more than one digit followed by all capital letters\n          // 599 USD, we use the unicode category Lu for capital letters from a bunch of languges\n          or (\n            any(regex.extract(beta.ml_translate(.named_groups[\"first_line\"]).text,\n                              '(\\d{2,} \\p{Lu}{2,5} )'\n                ),\n                not regex.icontains(.full_match, '[AP]M\\s+$')\n            )\n          )\n          // commonly observed phrase \"if not you call\"\n          or strings.icontains(.named_groups[\"first_line\"], \"If not you call\")\n          // first line ends in a phone number\n          or regex.contains(.named_groups[\"first_line\"], '\\d+,$')\n      )\n  )"
  not
    recipients.to[0].email.domain.domain 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.

FieldKindValuesSearch
sender.email.emaileq
  • appleid@id.apple.com
field:"sender.email.email" kind:eq value:"appleid@id.apple.com"
type.inboundeq
  • true transforms: boolean corpus 1212 (mql 1212)
field:"type.inbound" kind:eq value:"true"

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")) == 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"
  length func_call "length(filter(body.links, .href_url.domain.root_domain == \"breely.com\")) == 1"
  type.inbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.inboundeq
  • true transforms: boolean corpus 1212 (mql 1212)
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(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 ) )

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
  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"
   macro "any(html.xpath(body.html,\n                   \"//td[@style[contains(., 'adobe-clean-display')]]/strong/a/text()\"\n        ).nodes,\n        strings.parse_email(.raw).domain.root_domain not in $org_domains\n        and strings.parse_email(.raw).email not in $recipient_emails\n        and strings.parse_email(.raw).email not in $sender_emails\n        and not (\n          strings.parse_email(.raw).domain.domain not in $free_email_providers\n          and strings.parse_email(.raw).domain.domain in $recipient_domains\n          and strings.parse_email(.raw).domain.domain in $sender_domains\n        )\n)"

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(filter(body.links, .href_url.scheme == 'mailto'), 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
  sender.email.email eq "message@adobe.com"
  type.inbound eq "true"
   macro "any(filter(body.links, .href_url.scheme == 'mailto'),\n        network.whois(.href_url.domain).days_old < 365\n)"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
sender.email.emaileq
  • message@adobe.com corpus 5 (mql 5)
field:"sender.email.email" kind:eq value:"message@adobe.com"
type.inboundeq
  • true transforms: boolean corpus 1212 (mql 1212)
field:"type.inbound" kind:eq value:"true"

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(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 )
  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 ) ) == 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
  length func_call "length(distinct(filter(body.links,\n                           .href_url.domain.root_domain == \"adobe.com\"\n                           and strings.istarts_with(.href_url.path, '/id/urn:')\n                    ),\n                    .href_url.url\n           )\n) == 1"
  sender.email.email eq "message@adobe.com"
  type.inbound eq "true"
   macro "any(filter(body.links,\n               .href_url.scheme == 'mailto'\n               // is not the recipient\n               and .href_url.url !~ recipients.to[0].email.email\n               // not in org domains\n               and .href_url.domain.domain not in $org_domains\n               // and not adobe\n               and .href_url.domain.root_domain != \"adobe.com\"\n        ),\n        // and has not been observed inbound/outbound in the environment\n        .href_url.domain.domain not in $sender_domains\n        and .href_url.domain.domain not in $recipient_domains\n)"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
sender.email.emaileq
  • message@adobe.com corpus 5 (mql 5)
field:"sender.email.email" kind:eq value:"message@adobe.com"
type.inboundeq
  • true transforms: boolean corpus 1212 (mql 1212)
field:"type.inbound" kind:eq value:"true"

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

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
  any(body.current_thread.links)
    body.current_thread.links.href_url.domain.domain eq "testflight.apple.com"
  or
     macro "any(html.xpath(body.html, '//h2[@aria-label]').nodes,\n         any(regex.iextract(.display_text,\n                            '(?P<app_name>[^\\r\\n]+)[\\r\\n]+By (?P<dev_name>.*) for IOS.$'\n             ),\n             any([\"openai\", \"openal\", \"open ai\", \"open al\", \"chatgpt\", \"meta\"],\n                 strings.icontains(..named_groups[\"dev_name\"], .)\n                 or strings.icontains(..named_groups[\"app_name\"], .)\n             )\n         )\n  )"
     macro "any(html.xpath(body.html,\n                 '//h2[contains(text(), \"App Description\")]/ancestor::tr/following-sibling::tr//pre'\n      ).nodes,\n      any(ml.nlu_classifier(.display_text).entities,\n          .name == \"org\"\n          and any([\"openai\", \"openal\", \"open ai\", \"open al\", \"chatgpt\", \"meta\"],\n                  strings.icontains(..text, .)\n          )\n      )\n  )"
  sender.email.domain.domain eq "email.apple.com"
  type.inbound eq "true"

Indicators

These rows show field, operator, and value matches.

Service abuse: Arketa notification callback scam

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

Detects messages sent from Arketa's notification address (no-reply@notifications.arketa.co) that has been abused to deliver callback scam content. The rule flags messages where an NLU classifier identifies callback scam intent, or where the body references well-known brands (e.g., McAfee, Norton, PayPal, eBay, Best Buy) alongside scam-related keywords (purchase, invoice, refund, cancel, etc.) and includes a phone number formatted to evade detection through character substitution or spacing tricks.

Threat Classification

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

CategoryValues
Attack typesCallback Phishing
Tactics and techniquesSocial engineering, Impersonation: Brand, Evasion, Out of band pivot

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 == "no-reply@notifications.arketa.co"
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}]?(?:\p{N}[^\p{N}]{0,3}){10,11}'
            )
    )
  )
)

Detection Logic

Scope: inbound message.

Detects messages sent from Arketa's notification address (no-reply@notifications.arketa.co) that has been abused to deliver callback scam content. The rule flags messages where an NLU classifier identifies callback scam intent, or where the body references well-known brands (e.g., McAfee, Norton, PayPal, eBay, Best Buy) alongside scam-related keywords (purchase, invoice, refund, cancel, etc.) and includes a phone number formatted to evade detection through character substitution or spacing tricks.

  1. inbound message
  2. sender.email.email is 'no-reply@notifications.arketa.co'
  3. any of:
    • any(ml.nlu_classifier(body.current_thread.text).intents, .name == "callback_scam" and .confidence != "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([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}]?(?:\p{N}[^\p{N}]{0,3}){10,11}' ) )

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

Indicators Matched (20)

FieldMatchValue
sender.email.emailequalsno-reply@notifications.arketa.co
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}]?(?:\p{N}[^\p{N}]{0,3}){10,11}

Stages and Predicates

Stage 1: mql_rule

and
  or
    and
      body.current_thread.text regex_match "mcafee|n[o0]rt[o0]n|geek.{0,5}squad|paypal|ebay|symantec|best buy|lifel[o0]ck"
       macro "3 of (\n        strings.ilike(body.current_thread.text, '*purchase*'),\n        strings.ilike(body.current_thread.text, '*payment*'),\n        strings.ilike(body.current_thread.text, '*transaction*'),\n        strings.ilike(body.current_thread.text, '*subscription*'),\n        strings.ilike(body.current_thread.text, '*antivirus*'),\n        strings.ilike(body.current_thread.text, '*order*'),\n        strings.ilike(body.current_thread.text, '*support*'),\n        strings.ilike(body.current_thread.text, '*receipt*'),\n        strings.ilike(body.current_thread.text, '*invoice*'),\n        strings.ilike(body.current_thread.text, '*call*'),\n        strings.ilike(body.current_thread.text, '*cancel*'),\n        strings.ilike(body.current_thread.text, '*renew*'),\n        strings.ilike(body.current_thread.text, '*refund*'),\n        strings.ilike(body.current_thread.text, '*host key*')\n      )"
       macro "any([body.current_thread.text, subject.subject],\n            regex.icontains(strings.replace_confusables(.),\n                            '\\+?([ilo0-9]{1}.)?\\(?[ilo0-9]{3}?\\)?.[ilo0-9]{3}.?[ilo0-9]{4}',\n                            '\\+?([ilo0-9]{1,2})?\\s?\\(?\\d{3}\\)?[\\s\\.\\-⋅]{0,5}[ilo0-9]{3}[\\s\\.\\-⋅]{0,5}[ilo0-9]{4}',\n                            '[\\+\\x{FF0B}]?(?:\\p{N}[^\\p{N}]{0,3}){10,11}'\n            )\n    )"
     macro "any(ml.nlu_classifier(body.current_thread.text).intents,\n      .name == \"callback_scam\" and .confidence != \"low\"\n  )"
  sender.email.email eq "no-reply@notifications.arketa.co"
  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
    corpus 7 (mql 7)
field:"body.current_thread.text" kind:regex_match
sender.email.emaileq
  • no-reply@notifications.arketa.co
field:"sender.email.email" kind:eq value:"no-reply@notifications.arketa.co"
type.inboundeq
  • true transforms: boolean corpus 1212 (mql 1212)
field:"type.inbound" kind:eq value:"true"

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|\bebay\b|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' ), false )
  4. any of:
    • any(ml.nlu_classifier(body.current_thread.text).intents, .name == "callback_scam" and .confidence != "low" )
    • all of:
      • body.current_thread.text matches 'mcafee|n[o0]rt[o0]n|geek.{0,5}squad|paypal|\\bebay\\b|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([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}' ) )

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|\bebay\b|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
      body.current_thread.text regex_match "mcafee|n[o0]rt[o0]n|geek.{0,5}squad|paypal|\\bebay\\b|symantec|best buy|lifel[o0]ck"
       macro "3 of (\n        strings.ilike(body.current_thread.text, '*purchase*'),\n        strings.ilike(body.current_thread.text, '*payment*'),\n        strings.ilike(body.current_thread.text, '*transaction*'),\n        strings.ilike(body.current_thread.text, '*subscription*'),\n        strings.ilike(body.current_thread.text, '*antivirus*'),\n        strings.ilike(body.current_thread.text, '*order*'),\n        strings.ilike(body.current_thread.text, '*support*'),\n        strings.ilike(body.current_thread.text, '*receipt*'),\n        strings.ilike(body.current_thread.text, '*invoice*'),\n        strings.ilike(body.current_thread.text, '*call*'),\n        strings.ilike(body.current_thread.text, '*cancel*'),\n        strings.ilike(body.current_thread.text, '*renew*'),\n        strings.ilike(body.current_thread.text, '*refund*'),\n        strings.ilike(body.current_thread.text, '*host key*')\n      )"
       macro "any([body.current_thread.text, subject.subject],\n            regex.icontains(.,\n                            '\\+?([ilo0-9]{1}.)?\\(?[ilo0-9]{3}?\\)?.[ilo0-9]{3}.?[ilo0-9]{4}',\n                            '\\+?([ilo0-9]{1,2})?\\s?\\(?\\d{3}\\)?[\\s\\.\\-⋅]{0,5}[ilo0-9]{3}[\\s\\.\\-⋅]{0,5}[ilo0-9]{4}'\n            )\n    )"
     macro "any(ml.nlu_classifier(body.current_thread.text).intents,\n      .name == \"callback_scam\" and .confidence != \"low\"\n  )"
  not
    coalesce func_call "coalesce(strings.icontains(headers.return_path.local_part,\n                                   'aws-ses-bounces'\n                 ),\n                 false\n)"
  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
    • \bebay\b
    • symantec
    • best buy
    • lifel[o0]ck
field:"body.current_thread.text" kind:regex_match
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 corpus 1212 (mql 1212)
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(ml.nlu_classifier(body.current_thread.text).intents, .name == "callback_scam" and .confidence != "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
  sender.email.email in ["no-reply@calendly.com", "notifications@calendly.com"]
  type.inbound eq "true"
   macro "any(ml.nlu_classifier(body.current_thread.text).intents,\n        .name == \"callback_scam\" and .confidence != \"low\"\n)"

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 corpus 1212 (mql 1212)
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) == 0
    • all of recipients.to where:
      • .display_name is 'Undisclosed recipients'
  5. any of:
    • any(ml.nlu_classifier(body.current_thread.text).topics, .name in ("Financial Communications", "Request to View Invoice") )
    • any(ml.nlu_classifier(subject.base).entities, .name == "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
  any(headers.reply_to)
    headers.reply_to.email.domain.domain ne "res.cisco.com"
  or
    recipients.to length_compare "0"
     macro "all(recipients.to, .display_name == \"Undisclosed recipients\")"
  or
     macro "any(ml.nlu_classifier(body.current_thread.text).topics,\n      .name in (\"Financial Communications\", \"Request to View Invoice\")\n  )"
     macro "any(ml.nlu_classifier(subject.base).entities, .name == \"financial\")"
  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(file.explode(.), strings.icontains(.scan.strings.raw, "sharefile.com") and strings.icontains(.scan.strings.raw, "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
      attachments.file_type in ["doc", "docx"]
       macro "any(file.explode(.),\n                strings.icontains(.scan.strings.raw, \"sharefile.com\")\n                and strings.icontains(.scan.strings.raw,\n                                      \"src=system-email-outlookplugin-new\"\n                )\n        )"
  type.inbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.inboundeq
  • true transforms: boolean corpus 1212 (mql 1212)
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,\n                '(?:<(?:p|div)[^>]*>\\s*<br>\\s*</(?:p|div)>\\s*){6,}'\n) >= 1"
  sender.email.domain.root_domain ne "cognitoforms.com"
  type.inbound eq "true"

Indicators

These rows show field, operator, and value matches.

Exclusions

The rule actively suppresses these predicates.

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

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(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" )
  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(.href_url.domain).days_old < 365"
    network.whois func_call "network.whois(recipients.to[0].email.domain).days_old < 365"
     macro "any(ml.nlu_classifier(regex.extract(body.current_thread.text,\n                                         '^(?P<first_line>[^\\n]+)\\n'\n                           )[0].named_groups[\"first_line\"]\n         ).intents,\n         .name == \"callback_scam\" and .confidence == \"high\"\n  )"
  sender.email.domain.root_domain eq "coursera.org"
  type.inbound eq "true"
   macro "all(recipients.to, .email.domain.domain not in $org_domains)"

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(ml.nlu_classifier(body.current_thread.text).intents, .name == "extortion" and .confidence != "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
  sender.email.email eq "noreply@alerts.elastic.co"
  type.inbound eq "true"
   macro "any(ml.nlu_classifier(body.current_thread.text).intents,\n        .name == \"extortion\" and .confidence != \"low\"\n)"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
sender.email.emaileq
  • noreply@alerts.elastic.co
field:"sender.email.email" kind:eq value:"noreply@alerts.elastic.co"
type.inboundeq
  • true transforms: boolean corpus 1212 (mql 1212)
field:"type.inbound" kind:eq value:"true"

Service abuse: EventCreate links to newly registered domains

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

Flags inbound messages containing links to eventcreate.com where the final rendered page includes outbound links to domains registered within the last 30 days, indicating the use of a legitimate service to pivot traffic to freshly created phishing infrastructure.

Threat Classification

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

CategoryValues
Attack typesCredential Phishing
Tactics and techniquesOut of band pivot

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.root_domain == 'eventcreate.com'
        ),
        any(ml.link_analysis(.).final_dom.links,
            network.whois(.href_url.domain).days_old < 30
        )
        or ml.link_analysis(.).credphish.disposition == "phishing"
)

Detection Logic

Scope: inbound message.

Flags inbound messages containing links to eventcreate.com where the final rendered page includes outbound links to domains registered within the last 30 days, indicating the use of a legitimate service to pivot traffic to freshly created phishing infrastructure.

  1. inbound message
  2. any(filter(body.current_thread.links, .href_url.domain.root_domain == 'eventcreate.com' ), any(ml.link_analysis(.).final_dom.links, network.whois(.href_url.domain).days_old < 30 ) or ml.link_analysis(.).credphish.disposition == "phishing" )

Inspects: body.current_thread.links, body.current_thread.links[].href_url.domain.root_domain, type.inbound. Sensors: ml.link_analysis, network.whois.

Indicators Matched (1)

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

Stages and Predicates

Stage 1: mql_rule

and
  type.inbound eq "true"
   macro "any(filter(body.current_thread.links,\n               .href_url.domain.root_domain == 'eventcreate.com'\n        ),\n        any(ml.link_analysis(.).final_dom.links,\n            network.whois(.href_url.domain).days_old < 30\n        )\n        or ml.link_analysis(.).credphish.disposition == \"phishing\"\n)"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.inboundeq
  • true transforms: boolean corpus 1212 (mql 1212)
field:"type.inbound" kind:eq value:"true"

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(ml.nlu_classifier(beta.ocr(ml.link_analysis(.).screenshot).text).intents, .name == "cred_theft" and .confidence != "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
    and
      body.current_thread.text contains "Agency Partner"
      body.current_thread.text contains "You're invited"
      body.current_thread.text contains "You've been invited"
    and
      body.current_thread.text contains "Agency Partner"
      body.current_thread.text contains "You're invited"
      body.current_thread.text contains "You've received a partner request"
    and
      body.current_thread.text contains "Agency Partner"
      body.current_thread.text contains "You're invited"
      body.current_thread.text contains "not part of or affiliated with Meta"
    and
      body.current_thread.text contains "Agency Partner"
      body.current_thread.text contains "You're invited"
      subject.subject contains "Action required"
    and
      body.current_thread.text contains "Agency Partner"
      body.current_thread.text contains "You're invited"
      subject.subject contains "invited to join"
    and
      body.current_thread.text contains "Agency Partner"
      body.current_thread.text contains "You're invited"
      subject.subject contains "partner request"
    and
      body.current_thread.text contains "Agency Partner"
      body.current_thread.text contains "You've been invited"
      body.current_thread.text contains "You've received a partner request"
    and
      body.current_thread.text contains "Agency Partner"
      body.current_thread.text contains "You've been invited"
      body.current_thread.text contains "not part of or affiliated with Meta"
    and
      body.current_thread.text contains "Agency Partner"
      body.current_thread.text contains "You've been invited"
      subject.subject contains "Action required"
    and
      body.current_thread.text contains "Agency Partner"
      body.current_thread.text contains "You've been invited"
      subject.subject contains "invited to join"
    and
      body.current_thread.text contains "Agency Partner"
      body.current_thread.text contains "You've been invited"
      subject.subject contains "partner request"
    and
      body.current_thread.text contains "Agency Partner"
      body.current_thread.text contains "You've received a partner request"
      body.current_thread.text contains "not part of or affiliated with Meta"
    and
      body.current_thread.text contains "Agency Partner"
      body.current_thread.text contains "You've received a partner request"
      subject.subject contains "Action required"
    and
      body.current_thread.text contains "Agency Partner"
      body.current_thread.text contains "You've received a partner request"
      subject.subject contains "invited to join"
    and
      body.current_thread.text contains "Agency Partner"
      body.current_thread.text contains "You've received a partner request"
      subject.subject contains "partner request"
    and
      body.current_thread.text contains "Agency Partner"
      body.current_thread.text contains "not part of or affiliated with Meta"
      subject.subject contains "Action required"
    and
      body.current_thread.text contains "Agency Partner"
      body.current_thread.text contains "not part of or affiliated with Meta"
      subject.subject contains "invited to join"
    and
      body.current_thread.text contains "Agency Partner"
      body.current_thread.text contains "not part of or affiliated with Meta"
      subject.subject contains "partner request"
    and
      body.current_thread.text contains "Agency Partner"
      subject.subject contains "Action required"
      subject.subject contains "invited to join"
    and
      body.current_thread.text contains "Agency Partner"
      subject.subject contains "Action required"
      subject.subject contains "partner request"
    and
      body.current_thread.text contains "Agency Partner"
      subject.subject contains "invited to join"
      subject.subject contains "partner request"
    and
      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"
    and
      body.current_thread.text contains "You're invited"
      body.current_thread.text contains "You've been invited"
      body.current_thread.text contains "not part of or affiliated with Meta"
    and
      body.current_thread.text contains "You're invited"
      body.current_thread.text contains "You've been invited"
      subject.subject contains "Action required"
    and
      body.current_thread.text contains "You're invited"
      body.current_thread.text contains "You've been invited"
      subject.subject contains "invited to join"
    and
      body.current_thread.text contains "You're invited"
      body.current_thread.text contains "You've been invited"
      subject.subject contains "partner request"
    and
      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"
    and
      body.current_thread.text contains "You're invited"
      body.current_thread.text contains "You've received a partner request"
      subject.subject contains "Action required"
    and
      body.current_thread.text contains "You're invited"
      body.current_thread.text contains "You've received a partner request"
      subject.subject contains "invited to join"
    and
      body.current_thread.text contains "You're invited"
      body.current_thread.text contains "You've received a partner request"
      subject.subject contains "partner request"
    and
      body.current_thread.text contains "You're invited"
      body.current_thread.text contains "not part of or affiliated with Meta"
      subject.subject contains "Action required"
    and
      body.current_thread.text contains "You're invited"
      body.current_thread.text contains "not part of or affiliated with Meta"
      subject.subject contains "invited to join"
    and
      body.current_thread.text contains "You're invited"
      body.current_thread.text contains "not part of or affiliated with Meta"
      subject.subject contains "partner request"
    and
      body.current_thread.text contains "You're invited"
      subject.subject contains "Action required"
      subject.subject contains "invited to join"
    and
      body.current_thread.text contains "You're invited"
      subject.subject contains "Action required"
      subject.subject contains "partner request"
    and
      body.current_thread.text contains "You're invited"
      subject.subject contains "invited to join"
      subject.subject contains "partner request"
    and
      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"
    and
      body.current_thread.text contains "You've been invited"
      body.current_thread.text contains "You've received a partner request"
      subject.subject contains "Action required"
    and
      body.current_thread.text contains "You've been invited"
      body.current_thread.text contains "You've received a partner request"
      subject.subject contains "invited to join"
    and
      body.current_thread.text contains "You've been invited"
      body.current_thread.text contains "You've received a partner request"
      subject.subject contains "partner request"
    and
      body.current_thread.text contains "You've been invited"
      body.current_thread.text contains "not part of or affiliated with Meta"
      subject.subject contains "Action required"
    and
      body.current_thread.text contains "You've been invited"
      body.current_thread.text contains "not part of or affiliated with Meta"
      subject.subject contains "invited to join"
    and
      body.current_thread.text contains "You've been invited"
      body.current_thread.text contains "not part of or affiliated with Meta"
      subject.subject contains "partner request"
    and
      body.current_thread.text contains "You've been invited"
      subject.subject contains "Action required"
      subject.subject contains "invited to join"
    and
      body.current_thread.text contains "You've been invited"
      subject.subject contains "Action required"
      subject.subject contains "partner request"
    and
      body.current_thread.text contains "You've been invited"
      subject.subject contains "invited to join"
      subject.subject contains "partner request"
    and
      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"
    and
      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 "invited to join"
    and
      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 "partner request"
    and
      body.current_thread.text contains "You've received a partner request"
      subject.subject contains "Action required"
      subject.subject contains "invited to join"
    and
      body.current_thread.text contains "You've received a partner request"
      subject.subject contains "Action required"
      subject.subject contains "partner request"
    and
      body.current_thread.text contains "You've received a partner request"
      subject.subject contains "invited to join"
      subject.subject contains "partner request"
    and
      body.current_thread.text contains "not part of or affiliated with Meta"
      subject.subject contains "Action required"
      subject.subject contains "invited to join"
    and
      body.current_thread.text contains "not part of or affiliated with Meta"
      subject.subject contains "Action required"
      subject.subject contains "partner request"
    and
      body.current_thread.text contains "not part of or affiliated with Meta"
      subject.subject contains "invited to join"
      subject.subject contains "partner request"
    and
      subject.subject contains "Action required"
      subject.subject contains "invited to join"
      subject.subject contains "partner request"
  or
    any(body.links)
      network.whois func_call "network.whois(.href_url.domain).days_old <= 30"
    any(body.links)
       macro "any(ml.nlu_classifier(beta.ocr(ml.link_analysis(.).screenshot).text).intents,\n             .name == \"cred_theft\" and .confidence != \"low\"\n         )"
    body.current_thread.text contains "1 Meta Way, Menlo Park, CA 94025"
  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 corpus 2 (mql 2)
  • 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 corpus 2 (mql 2)
  • invited to join
  • partner request
field:"subject.subject" kind:contains
type.inboundeq
  • true transforms: boolean corpus 1212 (mql 1212)
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}]?(?:\p{N}[^\p{N}]{0,3}){10,11}',
                            '[\+\x{FF0B}][\s\(\)]*(?:[\p{L}\p{N}\p{No}\p{So}][\s\(\)\-⋅.\x{2298}]{0,3}){9,12}'
            )
    )
  )
)

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(ml.nlu_classifier(body.current_thread.text).intents, .name == "callback_scam" and .confidence != "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([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}]?(?:\p{N}[^\p{N}]{0,3}){10,11}', '[\+\x{FF0B}][\s\(\)]*(?:[\p{L}\p{N}\p{No}\p{So}][\s\(\)\-⋅.\x{2298}]{0,3}){9,12}' ) )

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 (21)

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*
9 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}]?(?:\p{N}[^\p{N}]{0,3}){10,11}
regex.icontainsregex[\+\x{FF0B}][\s\(\)]*(?:[\p{L}\p{N}\p{No}\p{So}][\s\(\)\-⋅.\x{2298}]{0,3}){9,12}

Stages and Predicates

Stage 1: mql_rule

and
  or
    and
      body.current_thread.text regex_match "mcafee|n[o0]rt[o0]n|geek.{0,5}squad|paypal|ebay|symantec|best buy|lifel[o0]ck"
       macro "3 of (\n        strings.ilike(body.current_thread.text, '*purchase*'),\n        strings.ilike(body.current_thread.text, '*payment*'),\n        strings.ilike(body.current_thread.text, '*transaction*'),\n        strings.ilike(body.current_thread.text, '*subscription*'),\n        strings.ilike(body.current_thread.text, '*antivirus*'),\n        strings.ilike(body.current_thread.text, '*order*'),\n        strings.ilike(body.current_thread.text, '*support*'),\n        strings.ilike(body.current_thread.text, '*receipt*'),\n        strings.ilike(body.current_thread.text, '*invoice*'),\n        strings.ilike(body.current_thread.text, '*call*'),\n        strings.ilike(body.current_thread.text, '*cancel*'),\n        strings.ilike(body.current_thread.text, '*renew*'),\n        strings.ilike(body.current_thread.text, '*refund*'),\n        strings.ilike(body.current_thread.text, '*host key*')\n      )"
       macro "any([body.current_thread.text, subject.subject],\n            regex.icontains(strings.replace_confusables(.),\n                            '\\+?([ilo0-9]{1}.)?\\(?[ilo0-9]{3}?\\)?.[ilo0-9]{3}.?[ilo0-9]{4}',\n                            '\\+?([ilo0-9]{1,2})?\\s?\\(?\\d{3}\\)?[\\s\\.\\-⋅]{0,5}[ilo0-9]{3}[\\s\\.\\-⋅]{0,5}[ilo0-9]{4}',\n                            '[\\+\\x{FF0B}]?(?:\\p{N}[^\\p{N}]{0,3}){10,11}',\n                            '[\\+\\x{FF0B}][\\s\\(\\)]*(?:[\\p{L}\\p{N}\\p{No}\\p{So}][\\s\\(\\)\\-⋅.\\x{2298}]{0,3}){9,12}'\n            )\n    )"
     macro "any(ml.nlu_classifier(body.current_thread.text).intents,\n      .name == \"callback_scam\" and .confidence != \"low\"\n  )"
  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
    corpus 7 (mql 7)
field:"body.current_thread.text" kind:regex_match
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 corpus 1212 (mql 1212)
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.

FieldKindValuesSearch
body.current_thread.textcontains
  • 12603 State Route 143 Suite G
  • 4049 US Highway 231 #2002 Wetumpka, AL 36093
  • [SOURCEID]
field:"body.current_thread.text" kind:contains
sender.email.domain.subdomaineq
  • mg
field:"sender.email.domain.subdomain" kind:eq value:"mg"
sender.email.local_partin
  • info corpus 2 (mql 2)
  • no-reply corpus 2 (mql 2)
  • noreply corpus 2 (mql 2)
field:"sender.email.local_part" kind:in
type.inboundeq
  • true transforms: boolean corpus 1212 (mql 1212)
field:"type.inbound" kind:eq value:"true"

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

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

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
sender.email.emaileq
  • no-reply@filemail.com
field:"sender.email.email" kind:eq value:"no-reply@filemail.com"
type.inboundeq
  • true transforms: boolean corpus 1212 (mql 1212)
field:"type.inbound" kind:eq value:"true"

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(ml.nlu_classifier(body.current_thread.text).intents, .name == "benign" )
  5. not:
    • any(ml.nlu_classifier(body.current_thread.text).topics, .name == "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
  any(headers.domains)
    headers.domains.root_domain eq "sendgrid.net"
  not
     macro "any(ml.nlu_classifier(body.current_thread.text).intents,\n            .name == \"benign\"\n)"
  not
     macro "any(ml.nlu_classifier(body.current_thread.text).topics,\n            .name == \"Bounce Back and Delivery Failure Notifications\"\n)"
  sender.email.domain.domain macro "sender.email.domain.domain in free_email_providers"
  type.inbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.inboundeq
  • true transforms: boolean corpus 1212 (mql 1212)
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(ml.nlu_classifier(body.current_thread.text).intents, .name == "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
  sender.email.domain.root_domain eq "getaccept.com"
  type.inbound eq "true"
   macro "any(ml.nlu_classifier(body.current_thread.text).intents,\n        .name == \"callback_scam\"\n)"

Indicators

These rows show field, operator, and value matches.

Service abuse: GitHub notification with excessive mentions and suspicious links

#

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) == 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(ml.nlu_classifier(body.current_thread.text).intents, .name in~ ("callback_scam", "cred_theft", "extortion") and .confidence == "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([sender.display_name, subject.base], regex.icontains(., '\b\+?([ilo0-9]{1}.)?\(?[ilo0-9]{3}?\)?.[ilo0-9]{3}.?[ilo0-9]{4}\b' ) )
      • strings.ilike(strings.replace_confusables(body.current_thread.text), "*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(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.ilike func_call "strings.ilike(strings.replace_confusables(body.current_thread.text),\n                     \"*Pay?Pal*\",\n                     \"*Best?Buy*\",\n                     \"*Geek?Squad*\",\n    )"
     macro "(\n    any(ml.nlu_classifier(body.current_thread.text).intents,\n        .name in~ (\"callback_scam\", \"cred_theft\", \"extortion\")\n        and .confidence == \"high\"\n    )\n  )"
     macro "any([sender.display_name, subject.base],\n        regex.icontains(.,\n                        '\\b\\+?([ilo0-9]{1}.)?\\(?[ilo0-9]{3}?\\)?.[ilo0-9]{3}.?[ilo0-9]{4}\\b'\n        )\n    )"
  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.

FieldKindValuesSearch
body.current_thread.textregex_match
    • ((I|you).{0,25}(leak|compromise|hack|see|record|expose))
    • (dirty|little) secret
field:"body.current_thread.text" kind:regex_match
headers.auth_summary.dmarc.passeq
  • true transforms: boolean corpus 39 (mql 39)
field:"headers.auth_summary.dmarc.pass" kind:eq value:"true"
sender.display_nameregex_match
    • big(\s|[[:punct:]])?brother
    • seeing(\s|[[:punct:]])?eye
field:"sender.display_name" kind:regex_match
sender.email.domain.root_domaineq
  • godaddy.com
field:"sender.email.domain.root_domain" kind:eq value:"godaddy.com"
type.inboundeq
  • true transforms: boolean corpus 1212 (mql 1212)
field:"type.inbound" kind:eq value:"true"

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(.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" ) )
    • 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
        body.links.href_url.domain.root_domain in ["mimecast.com", "mimecastprotect.com"]
         macro "any(.href_url.query_params_decoded['domain'],\n                  strings.parse_domain(.).domain in $free_file_hosts\n                  or strings.parse_domain(.).root_domain in $free_file_hosts\n                  or strings.parse_domain(.).root_domain in $free_subdomain_hosts\n                  or . in (\n                    \"storage.cloud.google.com\",\n                    \"login.microsoftonline.com\"\n                  )\n          )"
      body.links.href_url.domain.domain macro "body.links[].href_url.domain.domain in free_file_hosts"
      body.links.href_url.domain.domain macro "body.links[].href_url.domain.domain in free_subdomain_hosts"
      body.links.href_url.domain.root_domain eq "share.google"
      body.links.href_url.domain.root_domain macro "body.links[].href_url.domain.root_domain in free_file_hosts"
      network.whois func_call "network.whois(.href_url.domain).days_old < 30"
  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(ml.nlu_classifier(body.current_thread.text).intents, .name == "callback_scam" and .confidence != "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
  sender.email.email eq "calendar-notification@google.com"
  type.inbound eq "true"
   macro "any(ml.nlu_classifier(body.current_thread.text).intents,\n        .name == \"callback_scam\" and .confidence != \"low\"\n)"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
sender.email.emaileq
  • calendar-notification@google.com
field:"sender.email.email" kind:eq value:"calendar-notification@google.com"
type.inboundeq
  • true transforms: boolean corpus 1212 (mql 1212)
field:"type.inbound" kind:eq value:"true"

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(ml.nlu_classifier(body.current_thread.text).intents, .name == "callback_scam" and .confidence == "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
  sender.email.domain.domain eq "groups.google.com"
  type.inbound eq "true"
   macro "any(ml.nlu_classifier(body.current_thread.text).intents,\n        .name == \"callback_scam\" and .confidence == \"high\"\n)"

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 corpus 1212 (mql 1212)
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(ml.nlu_classifier(body.current_thread.text).intents, .name == "callback_scam" and .confidence != "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
  sender.email.email eq "ibmacct@iam.ibm.com"
  type.inbound eq "true"
   macro "any(ml.nlu_classifier(body.current_thread.text).intents,\n        .name == \"callback_scam\" and .confidence != \"low\"\n)"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
sender.email.emaileq
  • ibmacct@iam.ibm.com
field:"sender.email.email" kind:eq value:"ibmacct@iam.ibm.com"
type.inboundeq
  • true transforms: boolean corpus 1212 (mql 1212)
field:"type.inbound" kind:eq value:"true"

Service abuse: Kagoya.net-hosted domains sending English business lures

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

Flags inbound mail routed through infrastructure tied to the Japanese hosting provider Kagoya.net where the message body is written in English, a mismatch that surfaces abuse of these mail servers for business-themed lures.

Threat Classification

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

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

Telemetry Coverage

PlatformRecord / event type
SublimeInbound email message

Message Attributes

  • body
  • body.current_thread
  • headers
  • headers.domains
  • subject
  • type

Rule Body

type.inbound
and any(headers.domains, .root_domain == "kagoya.net")
and ml.nlu_classifier(body.current_thread.text).language == "english"
and not (
  (length(headers.references) > 0 or headers.in_reply_to is not null)
  and (subject.is_forward or subject.is_reply)
  and length(body.previous_threads) >= 1
)

Detection Logic

Scope: inbound message.

Flags inbound mail routed through infrastructure tied to the Japanese hosting provider Kagoya.net where the message body is written in English, a mismatch that surfaces abuse of these mail servers for business-themed lures.

  1. inbound message
  2. any of headers.domains where:
    • .root_domain is 'kagoya.net'
  3. ml.nlu_classifier(body.current_thread.text).language == "english"
  4. not:
    • all of:
      • any of:
        • length(headers.references) > 0
        • headers.in_reply_to is set
      • any of:
        • subject.is_forward
        • subject.is_reply
      • length(body.previous_threads) >= 1

Inspects: body.current_thread.text, body.previous_threads, headers.domains, headers.domains[].root_domain, headers.in_reply_to, headers.references, subject.is_forward, subject.is_reply, type.inbound. Sensors: ml.nlu_classifier.

Indicators Matched (1)

FieldMatchValue
headers.domains[].root_domainequalskagoya.net

Stages and Predicates

Stage 1: mql_rule

and
  not
    and
      or
        headers.in_reply_to is_not_null
        headers.references length_compare "0"
      or
        subject.is_forward eq "true"
        subject.is_reply eq "true"
      body.previous_threads length_compare "1"
  any(headers.domains)
    headers.domains.root_domain eq "kagoya.net"
  ml.nlu_classifier func_call "ml.nlu_classifier(body.current_thread.text).language == \"english\""
  type.inbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.inboundeq
  • true transforms: boolean corpus 1212 (mql 1212)
field:"type.inbound" kind:eq value:"true"

Exclusions

The rule actively suppresses these predicates.

FieldKindExcluded valuesSearch
headers.in_reply_tois_not_null(no value, null check)excludes:headers.in_reply_to
headers.referenceslength_compare0excludes:headers.references field:"headers.references" value:"0"
subject.is_forwardeqtrueexcludes:subject.is_forward field:"subject.is_forward" value:"true"
subject.is_replyeqtrueexcludes:subject.is_reply field:"subject.is_reply" value:"true"
body.previous_threadslength_compare1excludes:body.previous_threads field:"body.previous_threads" value:"1"

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 corpus 1212 (mql 1212)
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.email)
        • .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(file.explode(file.message_screenshot()), .scan.qr.url.domain.tld in $suspicious_tlds or 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"
          body.current_thread.links.href_url.domain.tld 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(..href_url.url, .email.email)"
        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"
     macro "any(file.explode(file.message_screenshot()),\n         .scan.qr.url.domain.tld in $suspicious_tlds\n         or network.whois(.scan.qr.url.domain).days_old < 100\n  )"
  sender.email.email eq "surveys@email.formspro.microsoft.com"
  type.inbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
sender.email.emaileq
  • surveys@email.formspro.microsoft.com
field:"sender.email.email" kind:eq value:"surveys@email.formspro.microsoft.com"
type.inboundeq
  • true transforms: boolean corpus 1212 (mql 1212)
field:"type.inbound" kind:eq value:"true"

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(ml.nlu_classifier(body.current_thread.text).intents, .name == "callback_scam" and .confidence != "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([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}' ) )

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
      body.current_thread.text regex_match "mcafee|n[o0]rt[o0]n|geek.{0,5}squad|paypal|ebay|symantec|best buy|lifel[o0]ck"
       macro "3 of (\n        strings.ilike(body.current_thread.text, '*purchase*'),\n        strings.ilike(body.current_thread.text, '*payment*'),\n        strings.ilike(body.current_thread.text, '*transaction*'),\n        strings.ilike(body.current_thread.text, '*subscription*'),\n        strings.ilike(body.current_thread.text, '*antivirus*'),\n        strings.ilike(body.current_thread.text, '*order*'),\n        strings.ilike(body.current_thread.text, '*support*'),\n        strings.ilike(body.current_thread.text, '*receipt*'),\n        strings.ilike(body.current_thread.text, '*invoice*'),\n        strings.ilike(body.current_thread.text, '*call*'),\n        strings.ilike(body.current_thread.text, '*cancel*'),\n        strings.ilike(body.current_thread.text, '*renew*'),\n        strings.ilike(body.current_thread.text, '*refund*'),\n        strings.ilike(body.current_thread.text, '*host key*')\n      )"
       macro "any([body.current_thread.text, subject.subject],\n            regex.icontains(.,\n                            '\\+?([ilo0-9]{1}.)?\\(?[ilo0-9]{3}?\\)?.[ilo0-9]{3}.?[ilo0-9]{4}',\n                            '\\+?([ilo0-9]{1,2})?\\s?\\(?\\d{3}\\)?[\\s\\.\\-⋅]{0,5}[ilo0-9]{3}[\\s\\.\\-⋅]{0,5}[ilo0-9]{4}'\n            )\n    )"
     macro "any(ml.nlu_classifier(body.current_thread.text).intents,\n      .name == \"callback_scam\" and .confidence != \"low\"\n  )"
  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
    corpus 7 (mql 7)
field:"body.current_thread.text" kind:regex_match
sender.email.emaileq
  • powerapps-noreply@microsoft.com
field:"sender.email.email" kind:eq value:"powerapps-noreply@microsoft.com"
type.inboundeq
  • true transforms: boolean corpus 1212 (mql 1212)
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(ml.nlu_classifier(body.current_thread.text).intents, .name == "callback_scam" and .confidence != "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
  sender.email.email eq "flow-noreply@microsoft.com"
  type.inbound eq "true"
   macro "any(ml.nlu_classifier(body.current_thread.text).intents,\n        .name == \"callback_scam\" and .confidence != \"low\"\n)"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
sender.email.emaileq
  • flow-noreply@microsoft.com
field:"sender.email.email" kind:eq value:"flow-noreply@microsoft.com"
type.inboundeq
  • true transforms: boolean corpus 1212 (mql 1212)
field:"type.inbound" kind:eq value:"true"

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(ml.nlu_classifier(body.current_thread.text).intents, .name == "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
  sender.email.email eq "no-reply-powerbi@microsoft.com"
  type.inbound eq "true"
   macro "any(ml.nlu_classifier(body.current_thread.text).intents,\n        .name == \"callback_scam\"\n)"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
sender.email.emaileq
  • no-reply-powerbi@microsoft.com
field:"sender.email.email" kind:eq value:"no-reply-powerbi@microsoft.com"
type.inboundeq
  • true transforms: boolean corpus 1212 (mql 1212)
field:"type.inbound" kind:eq value:"true"

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(filter(body.links, strings.icontains(.href_url.domain.root_domain, "mimecast") and strings.starts_with(.href_url.path, "/r/") ), 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
  type.inbound eq "true"
   macro "any(filter(body.links,\n               strings.icontains(.href_url.domain.root_domain, \"mimecast\")\n               and strings.starts_with(.href_url.path, \"/r/\")\n        ),\n        length(.href_url.path) > 2000\n)"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.inboundeq
  • true transforms: boolean corpus 1212 (mql 1212)
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(ml.nlu_classifier(body.current_thread.text).intents, .name == "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
  sender.email.email eq "notifications@monday.com"
  type.inbound eq "true"
   macro "any(ml.nlu_classifier(body.current_thread.text).intents,\n        .name == \"callback_scam\"\n)"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
sender.email.emaileq
  • notifications@monday.com
field:"sender.email.email" kind:eq value:"notifications@monday.com"
type.inboundeq
  • true transforms: boolean corpus 1212 (mql 1212)
field:"type.inbound" kind:eq value:"true"

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(ml.nlu_classifier(body.current_thread.text).intents, .name == "callback_scam" and .confidence != "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
  sender.email.email eq "mongodb-atlas-alerts@mongodb.com"
  type.inbound eq "true"
   macro "any(ml.nlu_classifier(body.current_thread.text).intents,\n        .name == \"callback_scam\" and .confidence != \"low\"\n)"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
sender.email.emaileq
  • mongodb-atlas-alerts@mongodb.com
field:"sender.email.email" kind:eq value:"mongodb-atlas-alerts@mongodb.com"
type.inboundeq
  • true transforms: boolean corpus 1212 (mql 1212)
field:"type.inbound" kind:eq value:"true"

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($org_vips, strings.icontains(sender.display_name, .display_name))
  4. any of body.current_thread.links where:
    • any(ml.link_analysis(.).additional_responses, .json['statsigUser']['custom']['spaceSubscriptionTier'] == '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)
     macro "any(ml.link_analysis(.).additional_responses,\n            .json['statsigUser']['custom']['spaceSubscriptionTier'] == 'free'\n        )"
  sender.email.email eq "notify@mail.notion.so"
  type.inbound eq "true"
   macro "any($org_vips, strings.icontains(sender.display_name, .display_name))"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
sender.email.emaileq
  • notify@mail.notion.so
field:"sender.email.email" kind:eq value:"notify@mail.notion.so"
type.inboundeq
  • true transforms: boolean corpus 1212 (mql 1212)
field:"type.inbound" kind:eq value:"true"

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(filter(body.current_thread.links, .href_url.domain.sld == "nylas"), .display_text is not null and strings.icontains(.href_url.domain.subdomain, 'tracking') )
  3. any(ml.nlu_classifier(body.current_thread.text).intents, .name == "cred_theft" and .confidence != "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
  type.inbound eq "true"
   macro "any(filter(body.current_thread.links, .href_url.domain.sld == \"nylas\"),\n        .display_text is not null\n        and strings.icontains(.href_url.domain.subdomain, 'tracking')\n)"
   macro "any(ml.nlu_classifier(body.current_thread.text).intents,\n        .name == \"cred_theft\" and .confidence != \"low\"\n)"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.inboundeq
  • true transforms: boolean corpus 1212 (mql 1212)
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(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" ) )

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
  sender.email.domain.domain eq "workflow.mail.us2.cloud.oracle.com"
  type.inbound eq "true"
   macro "any(html.xpath(body.html,\n                   \"//td[contains(@style, 'padding: 20px 40px')]//font[@style='']\"\n        ).nodes,\n        any(ml.nlu_classifier(.inner_text).intents,\n            .name == \"callback_scam\" and .confidence != \"low\"\n        )\n)"

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(ml.nlu_classifier(body.current_thread.text).intents, .name in ("callback_scam", "cred_theft") and .confidence != "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
  sender.email.email eq "noreply@paypal.com"
  subject.base contains "Creation of your PayPal Manager user account"
  type.inbound eq "true"
   macro "any(ml.nlu_classifier(body.current_thread.text).intents,\n        .name in (\"callback_scam\", \"cred_theft\") and .confidence != \"low\"\n)"

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(ml.nlu_classifier(body.current_thread.text).intents, .name == "cred_theft" and .confidence != "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(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"
   macro "any(ml.nlu_classifier(body.current_thread.text).intents,\n        .name == \"cred_theft\" and .confidence != \"low\"\n)"

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(ml.nlu_classifier(body.current_thread.text).topics, .name in ("B2B Cold Outreach", "Professional and Career Development") )
      • not:
        • any(ml.nlu_classifier(body.current_thread.text).topics, .name == "Reminders and Notifications" and .confidence == "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
         macro "any(ml.nlu_classifier(body.current_thread.text).topics,\n                .name == \"Reminders and Notifications\" and .confidence == \"high\"\n    )"
       macro "any(ml.nlu_classifier(body.current_thread.text).topics,\n        .name in (\"B2B Cold Outreach\", \"Professional and Career Development\")\n    )"
    and
      body.current_thread.text contains "a key hire"
      body.current_thread.text contains "a pivotal hire"
    and
      body.current_thread.text contains "a key hire"
      body.current_thread.text contains "experience seems highly relevant"
    and
      body.current_thread.text contains "a key hire"
      body.current_thread.text contains "expling this opptunity"
    and
      body.current_thread.text contains "a key hire"
      body.current_thread.text contains "profile caught my attention"
    and
      body.current_thread.text contains "a key hire"
      body.current_thread.text contains "recruiting top talent"
    and
      body.current_thread.text contains "a key hire"
      body.current_thread.text contains "schedule a time"
    and
      body.current_thread.text contains "a key hire"
      body.current_thread.text contains "talent acquisition team"
    and
      body.current_thread.text contains "a key hire"
      body.current_thread.text contains "your professional profile"
    and
      body.current_thread.text contains "a pivotal hire"
      body.current_thread.text contains "experience seems highly relevant"
    and
      body.current_thread.text contains "a pivotal hire"
      body.current_thread.text contains "expling this opptunity"
    and
      body.current_thread.text contains "a pivotal hire"
      body.current_thread.text contains "profile caught my attention"
    and
      body.current_thread.text contains "a pivotal hire"
      body.current_thread.text contains "recruiting top talent"
    and
      body.current_thread.text contains "a pivotal hire"
      body.current_thread.text contains "schedule a time"
    and
      body.current_thread.text contains "a pivotal hire"
      body.current_thread.text contains "talent acquisition team"
    and
      body.current_thread.text contains "a pivotal hire"
      body.current_thread.text contains "your professional profile"
    and
      body.current_thread.text contains "experience seems highly relevant"
      body.current_thread.text contains "expling this opptunity"
    and
      body.current_thread.text contains "experience seems highly relevant"
      body.current_thread.text contains "profile caught my attention"
    and
      body.current_thread.text contains "experience seems highly relevant"
      body.current_thread.text contains "recruiting top talent"
    and
      body.current_thread.text contains "experience seems highly relevant"
      body.current_thread.text contains "schedule a time"
    and
      body.current_thread.text contains "experience seems highly relevant"
      body.current_thread.text contains "talent acquisition team"
    and
      body.current_thread.text contains "experience seems highly relevant"
      body.current_thread.text contains "your professional profile"
    and
      body.current_thread.text contains "expling this opptunity"
      body.current_thread.text contains "profile caught my attention"
    and
      body.current_thread.text contains "expling this opptunity"
      body.current_thread.text contains "recruiting top talent"
    and
      body.current_thread.text contains "expling this opptunity"
      body.current_thread.text contains "schedule a time"
    and
      body.current_thread.text contains "expling this opptunity"
      body.current_thread.text contains "talent acquisition team"
    and
      body.current_thread.text contains "expling this opptunity"
      body.current_thread.text contains "your professional profile"
    and
      body.current_thread.text contains "profile caught my attention"
      body.current_thread.text contains "recruiting top talent"
    and
      body.current_thread.text contains "profile caught my attention"
      body.current_thread.text contains "schedule a time"
    and
      body.current_thread.text contains "profile caught my attention"
      body.current_thread.text contains "talent acquisition team"
    and
      body.current_thread.text contains "profile caught my attention"
      body.current_thread.text contains "your professional profile"
    and
      body.current_thread.text contains "recruiting top talent"
      body.current_thread.text contains "schedule a time"
    and
      body.current_thread.text contains "recruiting top talent"
      body.current_thread.text contains "talent acquisition team"
    and
      body.current_thread.text contains "recruiting top talent"
      body.current_thread.text contains "your professional profile"
    and
      body.current_thread.text contains "schedule a time"
      body.current_thread.text contains "talent acquisition team"
    and
      body.current_thread.text contains "schedule a time"
      body.current_thread.text contains "your professional profile"
    and
      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 corpus 2 (mql 2)
  • ladesk.com
  • salesforce.com
field:"sender.email.domain.root_domain" kind:in
type.inboundeq
  • true transforms: boolean corpus 1212 (mql 1212)
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(ml.nlu_classifier(body.current_thread.text).topics, .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
     macro "any(ml.nlu_classifier(body.current_thread.text).topics,\n            .name in (\"Travel and Transportation\", \"Order Confirmations\")\n)"
  sender.email.domain.root_domain eq "roomsy.com"
  sender.email.local_part regex_match "noreply[0-9]{5}"
  type.inbound eq "true"

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) == 1
  3. profile.by_sender_domain().prevalence == "new"
  4. any of headers.domains where:
    • .root_domain is 'sendgrid.net'
  5. any(ml.nlu_classifier(body.current_thread.text).intents, .name == "cred_theft" and .confidence != "low" )
  6. any(filter(ml.nlu_classifier(body.current_thread.text).entities, .name == "request" ), any(body.links, .display_text == ..text) )
  7. ( // 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) ) ) )
  8. none of:
    • strings.icontains(body.current_thread.text, strings.concat('This message was generated automatically for ', recipients.to[0].email.email ) )
    • strings.icontains(body.current_thread.text, strings.concat('This email was sent to ', recipients.to[0].email.email ) )

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
  not
    or
      strings.icontains func_call "strings.icontains(body.current_thread.text,\n                       strings.concat('This email was sent to ',\n                                      recipients.to[0].email.email\n                       )\n  )"
      strings.icontains func_call "strings.icontains(body.current_thread.text,\n                    strings.concat('This message was generated automatically for ',\n                                   recipients.to[0].email.email\n                    )\n  )"
  any(headers.domains)
    headers.domains.root_domain eq "sendgrid.net"
  profile.by_sender_domain func_call "profile.by_sender_domain().prevalence == \"new\""
  recipients.to length_compare "1"
  strings.count func_call "(\n  // number of occurances the rcpt email occurs in the body\n  strings.count(body.current_thread.text, recipients.to[0].email.email) > \n  // length of the filtered links to those that contain the email\n  length(filter(body.links,\n                strings.contains(.display_url.url, recipients.to[0].email.email)\n         )\n  )\n)"
  type.inbound eq "true"
   macro "any(filter(ml.nlu_classifier(body.current_thread.text).entities,\n               .name == \"request\"\n        ),\n        any(body.links, .display_text == ..text)\n)"
   macro "any(ml.nlu_classifier(body.current_thread.text).intents,\n        .name == \"cred_theft\" and .confidence != \"low\"\n)"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.inboundeq
  • true transforms: boolean corpus 1212 (mql 1212)
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.ilike(strings.replace_confusables(sender.display_name), '*sendgrid*')
    • strings.ilevenshtein(strings.replace_confusables(sender.display_name), 'sendgrid' ) <= 1
    • all of:
      • strings.ilike(strings.replace_confusables(sender.email.local_part), '*sendgrid*' )
      • any of:
        • sender.display_name is missing
        • strings.ilike(strings.replace_confusables(subject.base), '*sendgrid*')
    • any(ml.logo_detect(file.message_screenshot()).brands, .name == "SendGrid" and .confidence == "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 == "common"
      • sender.email.domain.valid
  5. not:
    • all of:
      • sender.email.domain.domain is 'sendgrid.com'
      • coalesce(headers.auth_summary.dmarc.pass, false)

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
    and
      or
        sender.display_name is_null
        strings.ilike func_call "strings.ilike(strings.replace_confusables(subject.base), '*sendgrid*')"
      strings.ilike func_call "strings.ilike(strings.replace_confusables(sender.email.local_part),\n                  '*sendgrid*'\n    )"
    body.current_thread.text regex_match "sendgrid\\s*20[0-9]{2}"
    strings.ilevenshtein func_call "strings.ilevenshtein(strings.replace_confusables(sender.display_name),\n                          'sendgrid'\n  ) <= 1"
    strings.ilike func_call "strings.ilike(strings.replace_confusables(sender.display_name), '*sendgrid*')"
     macro "any(ml.logo_detect(file.message_screenshot()).brands,\n         .name == \"SendGrid\" and .confidence == \"high\"\n  )"
  not
    and
      headers.auth_summary.dmarc.pass eq "true"
      headers.auth_summary.dmarc.pass is_not_null
      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"

Indicators

These rows show field, operator, and value matches.

Exclusions

The rule actively suppresses these predicates.

FieldKindExcluded valuesSearch
headers.auth_summary.dmarc.passeqtrueexcludes:headers.auth_summary.dmarc.pass field:"headers.auth_summary.dmarc.pass" value:"true"
headers.auth_summary.dmarc.passis_not_null(no value, null check)excludes:headers.auth_summary.dmarc.pass
sender.email.domain.domaineqsendgrid.comexcludes:sender.email.domain.domain field:"sender.email.domain.domain" value:"sendgrid.com"
sender.email.domain.valideqtrueexcludes:sender.email.domain.valid field:"sender.email.domain.valid" value:"true"

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

#

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(ml.nlu_classifier(body.current_thread.text).intents, .name == "cred_theft" and .confidence != "low" )
  4. any(ml.nlu_classifier(body.current_thread.text).topics, .name == "Financial Communications" and .confidence != "low" )
  5. any of:
    • headers.in_reply_to is missing
    • length(headers.references) == 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
  or
    headers.in_reply_to is_null
    headers.references length_compare "0"
  sender.email.domain.root_domain eq "sendthisfile.com"
  type.inbound eq "true"
   macro "any(ml.nlu_classifier(body.current_thread.text).intents,\n        .name == \"cred_theft\" and .confidence != \"low\"\n)"
   macro "any(ml.nlu_classifier(body.current_thread.text).topics,\n        .name == \"Financial Communications\" and .confidence != \"low\"\n)"

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(ml.nlu_classifier(body.current_thread.text).intents, .name == "callback_scam" and .confidence != "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
  sender.email.email eq "noreply@settime.io"
  type.inbound eq "true"
   macro "any(ml.nlu_classifier(body.current_thread.text).intents,\n        .name == \"callback_scam\" and .confidence != \"low\"\n)"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
sender.email.emaileq
  • noreply@settime.io
field:"sender.email.email" kind:eq value:"noreply@settime.io"
type.inboundeq
  • true transforms: boolean corpus 1212 (mql 1212)
field:"type.inbound" kind:eq value:"true"

Service abuse: Soundestlink redirect with suspicious indicators

#

Service abuse: Soundestlink.com Microsoft impersonation

#

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

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
  beta.scan_qr func_call "beta.scan_qr(file.message_screenshot()).found"
  sender.email.domain.domain eq "squaremktg.com"
  type.inbound eq "true"
   macro "any(filter(beta.scan_qr(file.message_screenshot()).items,\n               // ignore square's own free website hosting service\n               .url.domain.root_domain != \"square.site\"\n        ),\n        (\n          .url.domain.root_domain in $self_service_creation_platform_domains\n          or .url.domain.domain in $self_service_creation_platform_domains\n        )\n        or (\n          .url.domain.root_domain in $free_file_hosts\n          or .url.domain.domain in $free_file_hosts\n        )\n)"

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

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
  sender.email.domain.root_domain eq "surveymonkeyuser.com"
  type.inbound eq "true"
   macro "any(html.xpath(body.html, '//table//table//a').nodes,\n        .links[0].href_url.domain.root_domain != \"surveymonkey.com\"\n        and not strings.icontains(.inner_text, \"survey\")\n        and not (\n          .links[0].href_url.domain.root_domain in (\n            \"mimecast.com\",\n            \"mimecastprotect.com\"\n          )\n          and any(.links[0].href_url.query_params_decoded['domain'],\n                  strings.parse_domain(.).domain in $tenant_domains\n                  or strings.parse_domain(.).domain in (\"surveymonkey.com\", )\n          )\n        )\n)"

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(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" )
      • 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 == "english"
      • any(ml.nlu_classifier(body.current_thread.text).topics, .confidence == "high" and .name == "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
      body.current_thread.text regex_match "quarantine|held for.{0,10}review|secure message|voice\\s?mail"
       macro "any(filter(body.links,\n               .parser == \"hyperlink\"\n               and not any(.href_url.query_params_decoded[\"domain\"],\n                           strings.parse_domain(.).root_domain == \"datadoghq.com\"\n               )\n        ),\n        .href_url.domain.root_domain != \"datadoghq.com\"\n        and .href_url.domain.root_domain != \"aka.ms\"\n    )"
    and
      ml.nlu_classifier func_call "ml.nlu_classifier(body.current_thread.text).language == \"english\""
       macro "any(ml.nlu_classifier(body.current_thread.text).topics,\n            .confidence == \"high\"\n            and .name == \"Voicemail Call and Missed Call Notifications\"\n    )"
  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.

FieldKindValuesSearch
body.current_thread.textregex_match
    • quarantine
    • held for.{0,10}review
    • secure message
    • voice\s?mail
field:"body.current_thread.text" kind:regex_match
sender.email.emaileq
  • alert@dtdg.co
field:"sender.email.email" kind:eq value:"alert@dtdg.co"
type.inboundeq
  • true transforms: boolean corpus 1212 (mql 1212)
field:"type.inbound" kind:eq value:"true"

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(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 ', .) ) ) )
    • 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)) )

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
     macro "any(html.xpath(body.html, '//h2').nodes,\n      // org vip\n      any($org_vips, strings.icontains(..display_text, .display_name))\n      // org sld as the board name\n      and any($org_slds,\n              strings.icontains(..display_text,\n                                strings.concat('invited you to their board ', .)\n              )\n      )\n  )"
     macro "any(html.xpath(body.html,\n                    '//div[img[@class=\"trello-member-avatar\"]]/parent::div'\n         ).nodes,\n         strings.starts_with(.display_text, 'A note from ')\n         and strings.iends_with(.display_text, 'From')\n         and any($org_vips, strings.icontains(..display_text, .display_name))\n  )"
  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(ml.nlu_classifier(body.current_thread.text).intents, .name == "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
  sender.email.email eq "noreply@wetransfer.com"
  type.inbound eq "true"
   macro "any(ml.nlu_classifier(body.current_thread.text).intents,\n        .name == \"callback_scam\"\n)"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
sender.email.emaileq
  • noreply@wetransfer.com
field:"sender.email.email" kind:eq value:"noreply@wetransfer.com"
type.inboundeq
  • true transforms: boolean corpus 1212 (mql 1212)
field:"type.inbound" kind:eq value:"true"

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) == 1
  5. 0 < length(body.links)
  6. any(ml.nlu_classifier(body.current_thread.text).intents, .name == 'cred_theft' and .confidence != '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
  not
    length func_call "length(html.xpath(body.html, \"//table[@class='readonly']\").nodes) == 1"
  not
    sender.display_name contains "Wufoo"
  body.links length_compare "0"
  sender.email.email eq "no-reply@wufoo.com"
  type.inbound eq "true"
   macro "any(ml.nlu_classifier(body.current_thread.text).intents,\n        .name == 'cred_theft' and .confidence != 'low'\n)"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
sender.email.emaileq
  • no-reply@wufoo.com
field:"sender.email.email" kind:eq value:"no-reply@wufoo.com"
type.inboundeq
  • true transforms: boolean corpus 1212 (mql 1212)
field:"type.inbound" kind:eq value:"true"

Exclusions

The rule actively suppresses these predicates.

FieldKindExcluded valuesSearch
sender.display_namecontainsWufooexcludes:sender.display_name field:"sender.display_name" value:"Wufoo"

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(ml.nlu_classifier(body.current_thread.text).intents, .name == "job_scam" and .confidence != "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
    body.current_thread.text contains "talent acquisition"
     macro "any(ml.nlu_classifier(body.current_thread.text).intents,\n      .name == \"job_scam\" and .confidence != \"low\"\n  )"
  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 suspicious reply-to address or links

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

Detects legitimate-looking Zoom 'Clips shared' notifications sent from Zoom's genuine no-reply infrastructure, where the underlying reply-to address or embedded links show signs of abuse. This includes reply-to domains that very recently created, links pointing to scheduling services like Cal.com, Calendly, or Vasta, or unsolicited reply-to senders — all indicating the legitimate clip-sharing feature is being leveraged to route victims to attacker-controlled contact points.

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

  • body
  • body.links
  • 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 (
  // as determiend by the subject
  strings.starts_with(subject.base, 'Clips')
  // or by a link
  or any(body.links,
         .href_url.domain.root_domain == "zoom.us"
         and strings.istarts_with(.href_url.path, '/clips/share')
  )
)
and (
  // reply-to domain is not registered
  network.whois(headers.reply_to[0].email.domain).found == false
  // recently registered
  or network.whois(headers.reply_to[0].email.domain).days_old <= 90
  // links it cal.com
  or any(body.links,
         .href_url.domain.root_domain in ('cal.com', 'calendly.com', 'vasta.me')
         // the link domain is newer than 90 days
         or network.whois(.href_url.domain).days_old < 90
  )

  // the reply to address is not soliticed
  //
  // 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
  //
  or beta.profile.by_reply_to().solicited == false
)

Detection Logic

Scope: inbound message.

Detects legitimate-looking Zoom 'Clips shared' notifications sent from Zoom's genuine no-reply infrastructure, where the underlying reply-to address or embedded links show signs of abuse. This includes reply-to domains that very recently created, links pointing to scheduling services like Cal.com, Calendly, or Vasta, or unsolicited reply-to senders — all indicating the legitimate clip-sharing feature is being leveraged to route victims to attacker-controlled contact points.

  1. inbound message
  2. sender.email.email is 'no-reply@zoom.us'
  3. any of:
    • subject.base starts with 'Clips'
    • any of body.links where all hold:
      • .href_url.domain.root_domain is 'zoom.us'
      • .href_url.path starts with '/clips/share'
  4. any of:
    • network.whois(headers.reply_to[0].email.domain).found == false
    • network.whois(headers.reply_to[0].email.domain).days_old <= 90
    • any of body.links where any holds:
      • .href_url.domain.root_domain in ('cal.com', 'calendly.com', 'vasta.me')
      • network.whois(.href_url.domain).days_old < 90
    • beta.profile.by_reply_to().solicited == false

Inspects: body.links, body.links[].href_url.domain, body.links[].href_url.domain.root_domain, body.links[].href_url.path, headers.reply_to[0].email.domain, sender.email.email, subject.base, type.inbound. Sensors: beta.profile.by_reply_to, network.whois, strings.istarts_with, strings.starts_with.

Indicators Matched (7)

FieldMatchValue
sender.email.emailequalsno-reply@zoom.us
strings.starts_withprefixClips
body.links[].href_url.domain.root_domainequalszoom.us
strings.istarts_withprefix/clips/share
body.links[].href_url.domain.root_domainmembercal.com
body.links[].href_url.domain.root_domainmembercalendly.com
body.links[].href_url.domain.root_domainmembervasta.me

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(body.links)
      and
        body.links.href_url.domain.root_domain eq "zoom.us"
        body.links.href_url.path starts_with "/clips/share"
    subject.base starts_with "Clips"
  or
    any(body.links)
      or
        body.links.href_url.domain.root_domain in ["cal.com", "calendly.com", "vasta.me"]
        network.whois func_call "network.whois(.href_url.domain).days_old < 90"
    beta.profile.by_reply_to func_call "beta.profile.by_reply_to().solicited == false"
    network.whois func_call "network.whois(headers.reply_to[0].email.domain).days_old <= 90"
    network.whois func_call "network.whois(headers.reply_to[0].email.domain).found == false"
  sender.email.email eq "no-reply@zoom.us"
  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.

FieldKindValuesSearch
sender.email.emaileq
  • no-reply@zoom.us corpus 3 (mql 3)
field:"sender.email.email" kind:eq value:"no-reply@zoom.us"
type.inboundeq
  • true transforms: boolean corpus 1212 (mql 1212)
field:"type.inbound" kind:eq value:"true"

Back to all Sublime MQL rules