Detection rules › Sublime MQL

Fake Zoom meeting invite with suspicious link

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

Detects messages impersonating Zoom meetings that contain suspicious links not hosted on legitimate Zoom domains, with recipients hidden as 'Undisclosed recipients' or missing entirely. The rule identifies Zoom-related language while excluding legitimate Zoom communications and meeting summaries.

Threat classification

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

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

Event coverage

Rule body MQL

type.inbound
and length(body.previous_threads) == 0
and length(ml.nlu_classifier(body.current_thread.text).topics) == 1
and all(ml.nlu_classifier(body.current_thread.text).topics,
        .name in ("Events and Webinars", "Software and App Updates")
        and .confidence != "low"
)

// Zoom meeting language
and strings.ilike(body.current_thread.text,
                  "*zoom meeting*",
                  "*meeting ID*",
                  "*participants*"
)

// suspicious recipients pattern
and (
  any(recipients.to, strings.ilike(.display_name, "undisclosed?recipients"))
  or length(recipients.to) == 0
)

// suspicious link
and not any(body.links,
            .href_url.domain.root_domain in (
              "zoom.us",
              "zoom.com",
              "emailprotection.link"
            )
            and any(.href_url.query_params_decoded['pwd'], . is not null)
)
and (
  any(body.links,
      .href_url.domain.tld in $suspicious_tlds
      // country code second-level domain
      or strings.istarts_with(.href_url.domain.tld, "com.")
      or (
        (
          length(ml.link_analysis(.).files_downloaded) > 0
          // Zoom logo on page
          or ml.link_analysis(.).credphish.brand.name == "Zoom"
          // blocked by a Cloudflare CAPTCHA
          or strings.icontains(ml.link_analysis(.).final_dom.raw,
                               'https://challenges.cloudflare.com/turnstile/',
          )
        )
        and ml.link_analysis(.).effective_url.domain.root_domain not in (
          "zoom.us",
          "zoom.com"
        )
      )
  )
)

// negate auto-generated meeting summaries
and not (
  strings.icontains(body.current_thread.text, "meeting summary")
  and strings.icontains(body.current_thread.text,
                        "AI-generated content may be inaccurate or misleading."
  )
)
and not (
  (subject.is_reply or subject.is_forward)
  and (length(headers.references) > 0 or headers.in_reply_to is not null)
)
// Not from a legitimate Zoom domain
and not (
  sender.email.domain.root_domain in (
    "zoom.us",
    "zuora.com",
    "zoomgov.com",
    "zoom.com",
    "zoom-x.de"
  )
  and headers.auth_summary.dmarc.pass
)

Detection logic

Scope: inbound message.

Detects messages impersonating Zoom meetings that contain suspicious links not hosted on legitimate Zoom domains, with recipients hidden as 'Undisclosed recipients' or missing entirely. The rule identifies Zoom-related language while excluding legitimate Zoom communications and meeting summaries.

  1. inbound message
  2. length(body.previous_threads) is 0
  3. length(ml.nlu_classifier(body.current_thread.text).topics) is 1
  4. all of ml.nlu_classifier(body.current_thread.text).topics where all hold:
    • .name in ('Events and Webinars', 'Software and App Updates')
    • .confidence is not 'low'
  5. body.current_thread.text matches any of 3 patterns
    • *zoom meeting*
    • *meeting ID*
    • *participants*
  6. any of:
    • any of recipients.to where:
      • .display_name matches 'undisclosed?recipients'
    • length(recipients.to) is 0
  7. not:
    • any of body.links where all hold:
      • .href_url.domain.root_domain in ('zoom.us', 'zoom.com', 'emailprotection.link')
      • any of .href_url.query_params_decoded['pwd'] where:
        • . is set
  8. any of body.links where any holds:
    • .href_url.domain.tld in $suspicious_tlds
    • .href_url.domain.tld starts with 'com.'
    • all of:
      • any of:
        • length(ml.link_analysis(.).files_downloaded) > 0
        • ml.link_analysis(.).credphish.brand.name is 'Zoom'
        • ml.link_analysis(.).final_dom.raw contains 'https://challenges.cloudflare.com/turnstile/'
      • ml.link_analysis(.).effective_url.domain.root_domain not in ('zoom.us', 'zoom.com')
  9. not:
    • all of:
      • body.current_thread.text contains 'meeting summary'
      • body.current_thread.text contains 'AI-generated content may be inaccurate or misleading.'
  10. not:
    • all of:
      • any of:
        • subject.is_reply
        • subject.is_forward
      • any of:
        • length(headers.references) > 0
        • headers.in_reply_to is set
  11. not:
    • all of:
      • sender.email.domain.root_domain in ('zoom.us', 'zuora.com', 'zoomgov.com', 'zoom.com', 'zoom-x.de')
      • headers.auth_summary.dmarc.pass

Inspects: body.current_thread.text, body.links, body.links[].href_url.domain.root_domain, body.links[].href_url.domain.tld, body.links[].href_url.query_params_decoded['pwd'], body.previous_threads, headers.auth_summary.dmarc.pass, headers.in_reply_to, headers.references, recipients.to, recipients.to[].display_name, sender.email.domain.root_domain, subject.is_forward, subject.is_reply, type.inbound. Sensors: ml.link_analysis, ml.nlu_classifier, strings.icontains, strings.ilike, strings.istarts_with. Reference lists: $suspicious_tlds.

Indicators matched (18)

FieldMatchValue
ml.nlu_classifier(body.current_thread.text).topics[].namememberEvents and Webinars
ml.nlu_classifier(body.current_thread.text).topics[].namememberSoftware and App Updates
strings.ilikesubstring*zoom meeting*
strings.ilikesubstring*meeting ID*
strings.ilikesubstring*participants*
strings.ilikesubstringundisclosed?recipients
body.links[].href_url.domain.root_domainmemberzoom.us
body.links[].href_url.domain.root_domainmemberzoom.com
body.links[].href_url.domain.root_domainmemberemailprotection.link
strings.istarts_withprefixcom.
strings.icontainssubstringhttps://challenges.cloudflare.com/turnstile/
strings.icontainssubstringmeeting summary
6 more
strings.icontainssubstringAI-generated content may be inaccurate or misleading.
sender.email.domain.root_domainmemberzoom.us
sender.email.domain.root_domainmemberzuora.com
sender.email.domain.root_domainmemberzoomgov.com
sender.email.domain.root_domainmemberzoom.com
sender.email.domain.root_domainmemberzoom-x.de