Detection rules › Sublime MQL
Open redirect: predictiveresponse.net
Message contains use of the predictiveresponse.net open redirect. This has been exploited in the wild.
Threat classification
Sublime's own taxonomy (not MITRE ATT&CK).
| Category | Values |
|---|---|
| Attack types | Credential Phishing, Malware/Ransomware |
| Tactics and techniques | Open redirect |
Event coverage
Rule body MQL
type.inbound
and any(body.links,
.href_url.domain.root_domain == "predictiveresponse.net"
and strings.icontains(.href_url.query_params, 'redirect=')
and not regex.icontains(.href_url.query_params,
'redirect=(?:https?(?:%3a|:))?(?:%2f|\/){2}[^&]*predictiveresponse\.net(?:\&|\/|$)'
)
)
and not sender.email.domain.root_domain == "predictiveresponse.net"
// negate use of predictiveresponse infra
and not any(headers.domains, .root_domain == "predictiveresponse.net")
and not any(headers.hops,
any(.fields,
.name == "List-Unsubscribe"
and strings.iends_with(.value, '@predictiveresponse.net>')
)
)
// negate highly trusted sender domains unless they fail DMARC authentication
and (
(
sender.email.domain.root_domain in $high_trust_sender_root_domains
and not headers.auth_summary.dmarc.pass
)
or sender.email.domain.root_domain not in $high_trust_sender_root_domains
)
Detection logic
Scope: inbound message.
Message contains use of the predictiveresponse.net open redirect. This has been exploited in the wild.
- inbound message
any of
body.linkswhere all hold:- .href_url.domain.root_domain is 'predictiveresponse.net'
- .href_url.query_params contains 'redirect='
not:
- .href_url.query_params matches 'redirect=(?:https?(?:%3a|:))?(?:%2f|\\/){2}[^&]*predictiveresponse\\.net(?:\\&|\\/|$)'
not:
- sender.email.domain.root_domain is 'predictiveresponse.net'
not:
any of
headers.domainswhere:- .root_domain is 'predictiveresponse.net'
not:
any of
headers.hopswhere:any of
.fieldswhere all hold:- .name is 'List-Unsubscribe'
- .value ends with '@predictiveresponse.net>'
any of:
all of:
- sender.email.domain.root_domain in $high_trust_sender_root_domains
not:
- headers.auth_summary.dmarc.pass
- sender.email.domain.root_domain not in $high_trust_sender_root_domains
Inspects: body.links, body.links[].href_url.domain.root_domain, body.links[].href_url.query_params, headers.auth_summary.dmarc.pass, headers.domains, headers.domains[].root_domain, headers.hops, headers.hops[].fields, headers.hops[].fields[].name, headers.hops[].fields[].value, sender.email.domain.root_domain, type.inbound. Sensors: regex.icontains, strings.icontains, strings.iends_with. Reference lists: $high_trust_sender_root_domains.
Indicators matched (7)
| Field | Match | Value |
|---|---|---|
body.links[].href_url.domain.root_domain | equals | predictiveresponse.net |
strings.icontains | substring | redirect= |
regex.icontains | regex | redirect=(?:https?(?:%3a|:))?(?:%2f|\/){2}[^&]*predictiveresponse\.net(?:\&|\/|$) |
sender.email.domain.root_domain | equals | predictiveresponse.net |
headers.domains[].root_domain | equals | predictiveresponse.net |
headers.hops[].fields[].name | equals | List-Unsubscribe |
strings.iends_with | suffix | @predictiveresponse.net> |