Detection rules › Sublime MQL
Fake Zoom meeting invite with suspicious link
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).
| Category | Values |
|---|---|
| Attack types | Credential Phishing |
| Tactics and techniques | Impersonation: 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.
- inbound message
- length(body.previous_threads) is 0
- length(ml.nlu_classifier(body.current_thread.text).topics) is 1
all of
ml.nlu_classifier(body.current_thread.text).topicswhere all hold:- .name in ('Events and Webinars', 'Software and App Updates')
- .confidence is not 'low'
body.current_thread.text matches any of 3 patterns
*zoom meeting**meeting ID**participants*
any of:
any of
recipients.towhere:- .display_name matches 'undisclosed?recipients'
- length(recipients.to) is 0
not:
any of
body.linkswhere 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
any of
body.linkswhere 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')
not:
all of:
- body.current_thread.text contains 'meeting summary'
- body.current_thread.text contains 'AI-generated content may be inaccurate or misleading.'
not:
all of:
any of:
- subject.is_reply
- subject.is_forward
any of:
- length(headers.references) > 0
- headers.in_reply_to is set
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)
| Field | Match | Value |
|---|---|---|
ml.nlu_classifier(body.current_thread.text).topics[].name | member | Events and Webinars |
ml.nlu_classifier(body.current_thread.text).topics[].name | member | Software and App Updates |
strings.ilike | substring | *zoom meeting* |
strings.ilike | substring | *meeting ID* |
strings.ilike | substring | *participants* |
strings.ilike | substring | undisclosed?recipients |
body.links[].href_url.domain.root_domain | member | zoom.us |
body.links[].href_url.domain.root_domain | member | zoom.com |
body.links[].href_url.domain.root_domain | member | emailprotection.link |
strings.istarts_with | prefix | com. |
strings.icontains | substring | https://challenges.cloudflare.com/turnstile/ |
strings.icontains | substring | meeting summary |
6 more
strings.icontains | substring | AI-generated content may be inaccurate or misleading. |
sender.email.domain.root_domain | member | zoom.us |
sender.email.domain.root_domain | member | zuora.com |
sender.email.domain.root_domain | member | zoomgov.com |
sender.email.domain.root_domain | member | zoom.com |
sender.email.domain.root_domain | member | zoom-x.de |