Detection rules › Sublime MQL

Brand impersonation: Greenvelope

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

Detects messages impersonating Greenvelope invitations not originating from legitimate Greenvelope domain.

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
// Looking for greenvelope phrasing or indicators in HTML
and (
  strings.icontains(body.html.inner_text, "Powered by greenvelope")

  // Look for alt text in HTML for standardized greenvelope formatting if string is not avail.
  or strings.icontains(body.html.raw, 'alt="Greenvelope"')
  or strings.icontains(body.html.raw,
                       'https://www.greenvelope.com/viewer/envelope.ashx'
  )
  or strings.icontains(body.current_thread.text, '© 2025 Greenvelope, LLC')
  or strings.icontains(body.current_thread.text,
                       '8 The Green #8901, Dover, DE 19901'
  )
)

// no links going to greenvlope cards/"admin" links
and length(filter(body.links,
                  .href_url.domain.root_domain == "greenvelope.com"
                  and (
                    // card links
                    strings.istarts_with(.href_url.path, '/card/')
                    // user links are links for the person that created the card
                    or strings.istarts_with(.href_url.path, '/user/')
                  )
           )
) == 0

// Legitimate sender will be from greenvelope, negating known non-associated domains.
and not (
  (
    sender.email.domain.root_domain in (
      "greenvelope.com",
      'greenvelope-email.com'
    )
    and headers.auth_summary.spf.pass
  )
  or headers.return_path.domain.root_domain in (
    "greenvelope.com",
    'greenvelope-email.com'
  )
)

// avoid fwd/replies
and not (
  subject.is_forward 
  or subject.is_reply
  or length(headers.references) != 0 
  or headers.in_reply_to is not null
  or length(body.previous_threads) > 0
)

// Capping length to limit FP's
and length(body.current_thread.text) < 1500

Detection logic

Scope: inbound message.

Detects messages impersonating Greenvelope invitations not originating from legitimate Greenvelope domain.

  1. inbound message
  2. any of:
    • body.html.inner_text contains 'Powered by greenvelope'
    • body.html.raw contains 'alt="Greenvelope"'
    • body.html.raw contains 'https://www.greenvelope.com/viewer/envelope.ashx'
    • body.current_thread.text contains '© 2025 Greenvelope, LLC'
    • body.current_thread.text contains '8 The Green #8901, Dover, DE 19901'
  3. length(filter(body.links, .href_url.domain.root_domain == 'greenvelope.com' and strings.istarts_with(.href_url.path, '/card/') or strings.istarts_with(.href_url.path, '/user/'))) is 0
  4. none of:
    • all of:
      • sender.email.domain.root_domain in ('greenvelope.com', 'greenvelope-email.com')
      • headers.auth_summary.spf.pass
    • headers.return_path.domain.root_domain in ('greenvelope.com', 'greenvelope-email.com')
  5. none of:
    • subject.is_forward
    • subject.is_reply
    • length(headers.references) is not 0
    • headers.in_reply_to is set
    • length(body.previous_threads) > 0
  6. length(body.current_thread.text) < 1500

Inspects: body.current_thread.text, body.html.inner_text, body.html.raw, body.links, body.links[].href_url.domain.root_domain, body.links[].href_url.path, body.previous_threads, headers.auth_summary.spf.pass, headers.in_reply_to, headers.references, headers.return_path.domain.root_domain, sender.email.domain.root_domain, subject.is_forward, subject.is_reply, type.inbound. Sensors: strings.icontains, strings.istarts_with.

Indicators matched (12)

FieldMatchValue
strings.icontainssubstringPowered by greenvelope
strings.icontainssubstringalt="Greenvelope"
strings.icontainssubstringhttps://www.greenvelope.com/viewer/envelope.ashx
strings.icontainssubstring© 2025 Greenvelope, LLC
strings.icontainssubstring8 The Green #8901, Dover, DE 19901
body.links[].href_url.domain.root_domainequalsgreenvelope.com
strings.istarts_withprefix/card/
strings.istarts_withprefix/user/
sender.email.domain.root_domainmembergreenvelope.com
sender.email.domain.root_domainmembergreenvelope-email.com
headers.return_path.domain.root_domainmembergreenvelope.com
headers.return_path.domain.root_domainmembergreenvelope-email.com