Detection rules › Sublime MQL
SPF temp error
Attackers can spoof domains that have no MX/SPF records, resulting in a DNS timeout. In O365 this fails closed (goes to spam), but in Gmail this fails open (lands in the inbox) and shows a red padlock Reproduce on Ubuntu 18.04: echo "test" | mail -s "Test" user@gmail.com -a"From: Support support@nomxdomain.com" Example headers: Received-SPF: temperror (google.com: error in processing during lookup of support@ltbit.com: DNS error) client-ip=<>; Authentication-Results: mx.google.com; spf=temperror (google.com: error in processing during lookup of support@nomxdomain.com: DNS error) smtp.mailfrom=support@nomxdomain.com
Threat classification
Sublime's own taxonomy (not MITRE ATT&CK).
| Category | Values |
|---|---|
| Tactics and techniques | Spoofing |
Event coverage
| Message attribute |
|---|
| headers (collection) |
| headers.hops (collection) |
| type |
Rule body MQL
type.inbound
and any(headers.hops,
any(.fields,
strings.ilike(.name, "Received-SPF")
and strings.ilike(.value, "*spf=temperror*")
)
)
Detection logic
Scope: inbound message.
Attackers can spoof domains that have no MX/SPF records, resulting in a DNS timeout. In O365 this fails closed (goes to spam), but in Gmail this fails open (lands in the inbox) and shows a red padlock Reproduce on Ubuntu 18.04: echo "test" | mail -s "Test" user@gmail.com -a"From: Support support@nomxdomain.com" Example headers: Received-SPF: temperror (google.com: error in processing during lookup of support@ltbit.com: DNS error) client-ip=<>; Authentication-Results: mx.google.com; spf=temperror (google.com: error in processing during lookup of support@nomxdomain.com: DNS error) smtp.mailfrom=support@nomxdomain.com
- inbound message
any of
headers.hopswhere:any of
.fieldswhere all hold:- .name matches 'Received-SPF'
- .value matches '*spf=temperror*'
Inspects: headers.hops, headers.hops[].fields, headers.hops[].fields[].name, headers.hops[].fields[].value, type.inbound. Sensors: strings.ilike.
Indicators matched (2)
| Field | Match | Value |
|---|---|---|
strings.ilike | substring | Received-SPF |
strings.ilike | substring | *spf=temperror* |