Detection rules › Sublime MQL

Open redirect: Club-OS

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

Message contains use of the Club-OS open redirect. This has been exploited in the wild.

Threat classification

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

CategoryValues
Attack typesCredential Phishing, Malware/Ransomware
Tactics and techniquesOpen redirect

Event coverage

Rule body MQL

type.inbound
and any(body.links,
        .href_url.domain.root_domain == "club-os.com"
        and strings.icontains(.href_url.path, 'click')
        and strings.icontains(.href_url.query_params, 'target=')
        // negate hash lookup targets (not actor controlled)
        and not (
          regex.icontains(.href_url.query_params, 'target=[a-f0-9]{40}(?:$|&)')
          and strings.icontains(.href_url.query_params, '&hashLookup=true')
        )
        // negate urls that go back to club-os
        and not regex.icontains(.href_url.query_params,
                                'target=[^\&]*club-os.com/'
        )
)

// 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 Club-OS open redirect. This has been exploited in the wild.

  1. inbound message
  2. any of body.links where all hold:
    • .href_url.domain.root_domain is 'club-os.com'
    • .href_url.path contains 'click'
    • .href_url.query_params contains 'target='
    • not:
      • all of:
        • .href_url.query_params matches 'target=[a-f0-9]{40}(?:$|&)'
        • .href_url.query_params contains '&hashLookup=true'
    • not:
      • .href_url.query_params matches 'target=[^\\&]*club-os.com/'
  3. 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.path, body.links[].href_url.query_params, headers.auth_summary.dmarc.pass, sender.email.domain.root_domain, type.inbound. Sensors: regex.icontains, strings.icontains. Reference lists: $high_trust_sender_root_domains.

Indicators matched (6)

FieldMatchValue
body.links[].href_url.domain.root_domainequalsclub-os.com
strings.icontainssubstringclick
strings.icontainssubstringtarget=
regex.icontainsregextarget=[a-f0-9]{40}(?:$|&)
strings.icontainssubstring&hashLookup=true
regex.icontainsregextarget=[^\&]*club-os.com/