Detection rules › Sublime MQL

Brand impersonation: OpenAI with payment issues

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

Detects messages impersonating OpenAI or ChatGPT with payment-related content such as subscription cancellation, payment failures, or billing updates from non-OpenAI domains.

Threat classification

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

CategoryValues
Attack typesCredential Phishing
Tactics and techniquesImpersonation: Brand, Social engineering

Event coverage

Rule body MQL

type.inbound
and (
  // sender or subject contains openai or chatgpt
  regex.icontains(sender.display_name, '\bchat\s*gpt\b')
  or regex.icontains(sender.display_name, '\bopen\s*a[li]\b')
  or regex.icontains(subject.subject, '\bchat\s*gpt\b')
  or regex.icontains(subject.subject, '\bopen\s*a[li]\b')
  or regex.icontains(body.current_thread.text,
                     '(?:regarding\s*your\s*Open\s*A[lI]\s*account|Open\s*A[lI]\s*\.\s*All\s*rights\s*reserved|the\s*open\s*ai\s*team)'
  )
)
and 2 of (
  // payment phrase
  regex.icontains(body.current_thread.text,
                  'update (?:payment method|your (?:billing|payment))'
  ),
  regex.icontains(body.current_thread.text,
                  'Subscription (?:has expired|(?:will be)?Cancel+ed)'
  ),
  regex.icontains(body.current_thread.text,
                  'issue with (?:the transaction|payment)'
  ),
  regex.icontains(body.current_thread.text, "you(?:'ll| will) lose access"),
  regex.icontains(body.current_thread.text,
                  'payment (?:is not successful|error|was declined)'
  ),
  regex.icontains(body.current_thread.text,
                  'unable to (?:process|automatically charge)'
  ),
  strings.icontains(body.current_thread.text, 'bank or card issuer'),
  strings.icontains(body.current_thread.text, 'issue with the transaction'),
  strings.icontains(body.current_thread.text, 'could not be processed'),
  strings.icontains(body.current_thread.text, 'settle the outstanding'),
  strings.icontains(body.current_thread.text, 'account will be downgraded'),
  strings.icontains(body.current_thread.text, 'Renew Subscription'),
  strings.icontains(body.current_thread.text, 'balance is settled'),
  strings.icontains(body.current_thread.text, 'will renew automatically'),
  strings.icontains(body.current_thread.text, 'process your payment'),
  strings.icontains(body.current_thread.text, 'keep your subscription active'),
  strings.icontains(body.current_thread.text, 'avoid any interruption'),
  strings.icontains(body.current_thread.text, 'charge attempt was unsuccessful'),
  strings.icontains(body.current_thread.text, 'scheduled for cancellation'),
  strings.icontains(body.current_thread.text, 'authorizing your payment'),
  strings.icontains(body.current_thread.text, 'Declining Payment'),
  strings.icontains(body.current_thread.text, 'Insufficient funds'),
  strings.icontains(body.current_thread.text, 'Card has expired'),
  strings.icontains(body.current_thread.text, 'exceeds your credit limit'),
  strings.icontains(body.current_thread.text, 'plan features have been paused'),
  strings.icontains(body.current_thread.text, 'saved payment method'),
  strings.icontains(body.current_thread.text, 'active without interruption')
)
// not from openai
and not sender.email.domain.root_domain == 'openai.com'
// negate highly trusted sender domains unless they fail DMARC authentication
and not (
  sender.email.domain.root_domain in $high_trust_sender_root_domains
  and coalesce(headers.auth_summary.dmarc.pass, false)
)

Detection logic

Scope: inbound message.

Detects messages impersonating OpenAI or ChatGPT with payment-related content such as subscription cancellation, payment failures, or billing updates from non-OpenAI domains.

  1. inbound message
  2. any of:
    • sender.display_name matches '\\bchat\\s*gpt\\b'
    • sender.display_name matches '\\bopen\\s*a[li]\\b'
    • subject.subject matches '\\bchat\\s*gpt\\b'
    • subject.subject matches '\\bopen\\s*a[li]\\b'
    • body.current_thread.text matches '(?:regarding\\s*your\\s*Open\\s*A[lI]\\s*account|Open\\s*A[lI]\\s*\\.\\s*All\\s*rights\\s*reserved|the\\s*open\\s*ai\\s*team)'
  3. at least 2 of:
    • body.current_thread.text matches 'update (?:payment method|your (?:billing|payment))'
    • body.current_thread.text matches 'Subscription (?:has expired|(?:will be)?Cancel+ed)'
    • body.current_thread.text matches 'issue with (?:the transaction|payment)'
    • body.current_thread.text matches "you(?:'ll| will) lose access"
    • body.current_thread.text matches 'payment (?:is not successful|error|was declined)'
    • body.current_thread.text matches 'unable to (?:process|automatically charge)'
    • body.current_thread.text contains 'bank or card issuer'
    • body.current_thread.text contains 'issue with the transaction'
    • body.current_thread.text contains 'could not be processed'
    • body.current_thread.text contains 'settle the outstanding'
    • body.current_thread.text contains 'account will be downgraded'
    • body.current_thread.text contains 'Renew Subscription'
    • body.current_thread.text contains 'balance is settled'
    • body.current_thread.text contains 'will renew automatically'
    • body.current_thread.text contains 'process your payment'
    • body.current_thread.text contains 'keep your subscription active'
    • body.current_thread.text contains 'avoid any interruption'
    • body.current_thread.text contains 'charge attempt was unsuccessful'
    • body.current_thread.text contains 'scheduled for cancellation'
    • body.current_thread.text contains 'authorizing your payment'
    • body.current_thread.text contains 'Declining Payment'
    • body.current_thread.text contains 'Insufficient funds'
    • body.current_thread.text contains 'Card has expired'
    • body.current_thread.text contains 'exceeds your credit limit'
    • body.current_thread.text contains 'plan features have been paused'
    • body.current_thread.text contains 'saved payment method'
    • body.current_thread.text contains 'active without interruption'
  4. not:
    • sender.email.domain.root_domain is 'openai.com'
  5. not:
    • all of:
      • sender.email.domain.root_domain in $high_trust_sender_root_domains
      • coalesce(headers.auth_summary.dmarc.pass)

Inspects: body.current_thread.text, headers.auth_summary.dmarc.pass, sender.display_name, sender.email.domain.root_domain, subject.subject, type.inbound. Sensors: regex.icontains, strings.icontains. Reference lists: $high_trust_sender_root_domains.

Indicators matched (31)

FieldMatchValue
regex.icontainsregex\bchat\s*gpt\b
regex.icontainsregex\bopen\s*a[li]\b
regex.icontainsregex(?:regarding\s*your\s*Open\s*A[lI]\s*account|Open\s*A[lI]\s*\.\s*All\s*rights\s*reserved|the\s*open\s*ai\s*team)
regex.icontainsregexupdate (?:payment method|your (?:billing|payment))
regex.icontainsregexSubscription (?:has expired|(?:will be)?Cancel+ed)
regex.icontainsregexissue with (?:the transaction|payment)
regex.icontainsregexyou(?:'ll| will) lose access
regex.icontainsregexpayment (?:is not successful|error|was declined)
regex.icontainsregexunable to (?:process|automatically charge)
strings.icontainssubstringbank or card issuer
strings.icontainssubstringissue with the transaction
strings.icontainssubstringcould not be processed
19 more
strings.icontainssubstringsettle the outstanding
strings.icontainssubstringaccount will be downgraded
strings.icontainssubstringRenew Subscription
strings.icontainssubstringbalance is settled
strings.icontainssubstringwill renew automatically
strings.icontainssubstringprocess your payment
strings.icontainssubstringkeep your subscription active
strings.icontainssubstringavoid any interruption
strings.icontainssubstringcharge attempt was unsuccessful
strings.icontainssubstringscheduled for cancellation
strings.icontainssubstringauthorizing your payment
strings.icontainssubstringDeclining Payment
strings.icontainssubstringInsufficient funds
strings.icontainssubstringCard has expired
strings.icontainssubstringexceeds your credit limit
strings.icontainssubstringplan features have been paused
strings.icontainssubstringsaved payment method
strings.icontainssubstringactive without interruption
sender.email.domain.root_domainequalsopenai.com