Detection rules › Sublime MQL
Sublime MQL rules: monday
| Rule | Severity |
|---|---|
| Service abuse: Monday.com infrastructure with phishing intent | high |
Service abuse: Monday.com infrastructure with phishing intent
#Detects unauthorized use of Monday.com tracking links in messages, attachments, or QR codes from unusual senders who lack proper authentication. Excludes legitimate replies and messages from trusted domains with valid DMARC.
Threat classification
Sublime's own taxonomy (not MITRE ATT&CK).
| Category | Values |
|---|---|
| Attack types | Credential Phishing |
| Tactics and techniques | Evasion, Social engineering, QR code |
Telemetry coverage
| Platform | Record / event type |
|---|---|
| Sublime | Inbound email message |
Message attributes
Rule body
type.inbound
and (
(
length(body.links) < 15
and any(body.links,
'monday_tracker' in .href_url.rewrite.encoders
and .href_url.scheme != "mailto"
)
)
or (
length(attachments) <= 3
and (
any(attachments,
(.file_type in $file_types_images or .file_type == "pdf")
//
// 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(beta.scan_qr(.).items,
.type is not null
and 'monday_tracker' in .url.rewrite.encoders
and .url.scheme != "mailto"
)
//
// 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
//
// exclude images taken with mobile cameras and screenshots from android
and not any(beta.parse_exif(.).fields,
.key == "Model"
or (
.key == "Software"
and strings.starts_with(.value, "Android")
)
)
// exclude images taken with mobile cameras and screenshots from Apple
and not any(beta.parse_exif(.).fields,
.key == "DeviceManufacturer"
and .value == "Apple Computer Inc."
)
)
)
)
or (
length(attachments) == 0
and (
//
// 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
//
beta.parse_exif(file.message_screenshot()).image_height < 2000
and beta.parse_exif(file.message_screenshot()).image_width < 2000
and beta.scan_qr(file.message_screenshot()).found
and any(beta.scan_qr(file.message_screenshot()).items,
.type is not null
and 'monday_tracker' in .url.rewrite.encoders
and .url.scheme != "mailto"
)
)
)
or (
length(attachments) <= 3
and (
any(attachments,
(
.file_type in ("pdf")
or .file_extension in ("pdf", "eml")
or .file_extension in $file_extensions_macros
or .content_type in ("message/rfc822")
)
and any(file.explode(.),
any(.scan.url.urls, 'monday_tracker' in .rewrite.encoders)
)
)
)
)
)
// negate messages that traverse monday.com infra
and not (
any(headers.domains, strings.ends_with(.domain, "mail.monday.com"))
or (
strings.iends_with(headers.message_id, '@monday-mail.com>')
and any(headers.hops,
any(.fields,
.name =~ "Content-Type"
and strings.iends_with(.value, 'mondaymailcom_"')
)
)
and any(headers.hops, any(.fields, .name =~ "x-monday-crm"))
)
)
and not (
headers.auth_summary.dmarc.details.from.root_domain == "monday.com"
and headers.auth_summary.spf.pass
and headers.auth_summary.dmarc.pass
)
and any(ml.nlu_classifier(body.current_thread.text).intents,
.name != "benign" and .confidence in ("medium", "high")
)
// negating legit replies
and not (
(subject.is_reply or subject.is_forward)
and (length(headers.references) > 0 and headers.in_reply_to is not null)
)
// negate graymail and newsletters
and not (
any(ml.nlu_classifier(body.current_thread.text).topics,
.name in~ (
"Advertising and Promotions",
"B2B Cold Outreach",
"Newsletters and Digests",
"Events and Webinars"
)
and .confidence != "low"
)
)
and (
// negate highly trusted sender domains unless they fail DMARC authentication
not (
sender.email.domain.root_domain in $high_trust_sender_root_domains
and coalesce(headers.auth_summary.dmarc.pass, false)
)
// salesforce has been abused to send phishing campaigns leveraging monday.com infrastructure abuse
or sender.email.domain.root_domain in ("salesforce.com")
)
Detection logic
Scope: inbound message.
Detects unauthorized use of Monday.com tracking links in messages, attachments, or QR codes from unusual senders who lack proper authentication. Excludes legitimate replies and messages from trusted domains with valid DMARC.
- inbound message
any of:
all of:
- length(body.links) < 15
any of
body.linkswhere all hold:- .href_url.rewrite.encoders contains 'monday_tracker'
- .href_url.scheme is not 'mailto'
all of:
- length(attachments) ≤ 3
any of
attachmentswhere all hold:any of:
- .file_type in $file_types_images
- .file_type is 'pdf'
any of
beta.scan_qr(.).itemswhere all hold:- .type is set
- .url.rewrite.encoders contains 'monday_tracker'
- .url.scheme is not 'mailto'
not:
any of
beta.parse_exif(.).fieldswhere any holds:- .key is 'Model'
all of:
- .key is 'Software'
- .value starts with 'Android'
not:
any of
beta.parse_exif(.).fieldswhere all hold:- .key is 'DeviceManufacturer'
- .value is 'Apple Computer Inc.'
all of:
- length(attachments) is 0
all of:
- beta.parse_exif(file.message_screenshot()).image_height < 2000
- beta.parse_exif(file.message_screenshot()).image_width < 2000
- beta.scan_qr(file.message_screenshot()).found
any of
beta.scan_qr(file.message_screenshot()).itemswhere all hold:- .type is set
- .url.rewrite.encoders contains 'monday_tracker'
- .url.scheme is not 'mailto'
all of:
- length(attachments) ≤ 3
any of
attachmentswhere all hold:any of:
- .file_type in ('pdf')
- .file_extension in ('pdf', 'eml')
- .file_extension in $file_extensions_macros
- .content_type in ('message/rfc822')
any of
file.explode(.)where:any of
.scan.url.urlswhere:- .rewrite.encoders contains 'monday_tracker'
none of:
any of
headers.domainswhere:- .domain ends with 'mail.monday.com'
all of:
- headers.message_id ends with '@monday-mail.com>'
any of
headers.hopswhere:any of
.fieldswhere all hold:- .name is 'Content-Type'
- .value ends with 'mondaymailcom_"'
any of
headers.hopswhere:any of
.fieldswhere:- .name is 'x-monday-crm'
not:
all of:
- headers.auth_summary.dmarc.details.from.root_domain is 'monday.com'
- headers.auth_summary.spf.pass
- headers.auth_summary.dmarc.pass
any of
ml.nlu_classifier(body.current_thread.text).intentswhere all hold:- .name is not 'benign'
- .confidence in ('medium', 'high')
not:
all of:
any of:
- subject.is_reply
- subject.is_forward
all of:
- length(headers.references) > 0
- headers.in_reply_to is set
not:
any of
ml.nlu_classifier(body.current_thread.text).topicswhere all hold:- .name in ('Advertising and Promotions', 'B2B Cold Outreach', 'Newsletters and Digests', 'Events and Webinars')
- .confidence is not 'low'
any of:
not:
all of:
- sender.email.domain.root_domain in $high_trust_sender_root_domains
- coalesce(headers.auth_summary.dmarc.pass)
- sender.email.domain.root_domain in ('salesforce.com')
Inspects: attachments[].content_type, attachments[].file_extension, attachments[].file_type, body.current_thread.text, body.links, body.links[].href_url.rewrite.encoders, body.links[].href_url.scheme, headers.auth_summary.dmarc.details.from.root_domain, headers.auth_summary.dmarc.pass, headers.auth_summary.spf.pass, headers.domains, headers.domains[].domain, headers.hops, headers.hops[].fields, headers.hops[].fields[].name, headers.hops[].fields[].value, headers.in_reply_to, headers.message_id, headers.references, sender.email.domain.root_domain, subject.is_forward, subject.is_reply, type.inbound. Sensors: beta.parse_exif, beta.scan_qr, file.explode, file.message_screenshot, ml.nlu_classifier, strings.ends_with, strings.iends_with, strings.starts_with. Reference lists: $file_extensions_macros, $file_types_images, $high_trust_sender_root_domains.
Indicators matched (12)
| Field | Match | Value |
|---|---|---|
body.links[].href_url.rewrite.encoders | contains | monday_tracker |
attachments[].file_type | equals | pdf |
beta.scan_qr(attachments[]).items[].url.rewrite.encoders | contains | monday_tracker |
beta.scan_qr(file.message_screenshot()).items[].url.rewrite.encoders | contains | monday_tracker |
attachments[].file_type | member | pdf |
attachments[].file_extension | member | pdf |
attachments[].file_extension | member | eml |
attachments[].content_type | member | message/rfc822 |
file.explode(attachments[])[].scan.url.urls[].rewrite.encoders | contains | monday_tracker |
ml.nlu_classifier(body.current_thread.text).intents[].confidence | member | medium |
ml.nlu_classifier(body.current_thread.text).intents[].confidence | member | high |
sender.email.domain.root_domain | member | salesforce.com |
Stages and Predicates
Stage 1: mql_rule
and
or
and
any(attachments)
and
not
any(beta.parse_exif(attachments).fields)
or
and
beta.parse_exif(attachments[]).fields[].key eq "Software"
beta.parse_exif(attachments[]).fields[].value starts_with "Android"
beta.parse_exif(attachments[]).fields[].key eq "Model"
not
any(beta.parse_exif(attachments).fields)
and
beta.parse_exif(attachments[]).fields[].key eq "DeviceManufacturer"
beta.parse_exif(attachments[]).fields[].value eq "Apple Computer Inc."
any(beta.scan_qr(attachments).items)
and
beta.scan_qr(attachments[]).items[].type is_not_null
beta.scan_qr(attachments[]).items[].url.rewrite.encoders contains "monday_tracker"
beta.scan_qr(attachments[]).items[].url.scheme ne "mailto"
or
attachments.file_type eq "pdf"
macro "attachments[].file_type in file_types_images"
attachments length_compare "3"
and
any(attachments)
and
any(file.explode(attachments))
any(file.explode(attachments).scan.url.urls)
file.explode(attachments).scan.url.urls.rewrite.encoders contains "monday_tracker"
or
attachments.content_type eq "message/rfc822"
attachments.file_extension in ["eml", "pdf"]
attachments.file_type eq "pdf"
macro "attachments[].file_extension in file_extensions_macros"
attachments length_compare "3"
and
any(beta.scan_qr(file.message_screenshot()).items)
and
beta.scan_qr(file.message_screenshot()).items.type is_not_null
beta.scan_qr(file.message_screenshot()).items.url.rewrite.encoders contains "monday_tracker"
beta.scan_qr(file.message_screenshot()).items.url.scheme ne "mailto"
attachments length_compare "0"
beta.parse_exif func_call "beta.parse_exif(file.message_screenshot()).image_height < 2000"
beta.parse_exif func_call "beta.parse_exif(file.message_screenshot()).image_width < 2000"
beta.scan_qr func_call "beta.scan_qr(file.message_screenshot()).found"
and
any(body.links)
and
body.links.href_url.rewrite.encoders contains "monday_tracker"
body.links.href_url.scheme ne "mailto"
body.links length_compare "15"
not
or
and
any(headers.hops)
any(headers.hops.fields)
and
headers.hops.fields[].name eq "Content-Type"
headers.hops.fields[].value ends_with "mondaymailcom_\""
any(headers.hops)
any(headers.hops.fields)
headers.hops.fields.name eq "x-monday-crm"
headers.message_id ends_with "@monday-mail.com>"
any(headers.domains)
headers.domains.domain ends_with "mail.monday.com"
or
not
and
coalesce func_call "coalesce(headers.auth_summary.dmarc.pass)"
macro "sender.email.domain.root_domain in high_trust_sender_root_domains"
sender.email.domain.root_domain eq "salesforce.com"
not
any(ml.nlu_classifier(body.current_thread.text).topics)
and
ml.nlu_classifier(body.current_thread.text).topics.confidence ne "low"
ml.nlu_classifier(body.current_thread.text).topics.name in ["Advertising and Promotions", "B2B Cold Outreach", "Events and Webinars", "Newsletters and Digests"]
not
and
or
subject.is_forward eq "true"
subject.is_reply eq "true"
headers.in_reply_to is_not_null
headers.references length_compare "0"
not
and
headers.auth_summary.dmarc.details.from.root_domain eq "monday.com"
headers.auth_summary.dmarc.pass eq "true"
headers.auth_summary.spf.pass eq "true"
any(ml.nlu_classifier(body.current_thread.text).intents)
and
ml.nlu_classifier(body.current_thread.text).intents.confidence in ["high", "medium"]
ml.nlu_classifier(body.current_thread.text).intents.name ne "benign"
type.inbound eq "true"Exclusions
The rule actively suppresses these predicates.
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
sender.email.domain.root_domain | in |
| field:"sender.email.domain.root_domain" kind:in value:"salesforce.com" |
type.inbound | eq |
| field:"type.inbound" kind:eq value:"true" |