High Severity

Body: HTML @import tag-splitting XSS — RoundPress/ZimReaper webmail exploit delivery

Description

Detects emails containing the @import tag-splitting obfuscation technique used by Russian threat actors TA458 (Operation RoundPress/SpyPress) and TA488 (Void Blizzard/ZimReaper) to deliver cross-site scripting exploits against self-hosted webmail platforms including Zimbra, Roundcube, mDaemon, SOGo, and Kerio.

The technique fragments HTML tags with CSS @import directives to bypass webmail HTML sanitizers. The sanitizer strips @import sequences; the browser reassembles the remaining characters into valid executable markup. Opening the email in a vulnerable webmail client is sufficient to trigger execution — no link click or attachment required (half-click exploit). The exploit has been delivered both in the message body and in HTML attachments.

Active campaigns targeting Ukrainian government entities, US nuclear installations, and NATO member governments were disclosed jointly by Proofpoint, NSA, and FBI on July 23, 2026.

Sublime Security
Created Nov 2nd, 2026 • Last updated Nov 2nd, 2026
Source
type.inbound
and (
  // zimreaper payload id... plain text, then the three base64 alignments of `zmb_pl_`
  // base64 is case-sensitive, so the encoded forms use contains
  strings.icontains(body.html.raw, 'zmb_pl_v')
  or strings.contains(body.html.raw, 'em1iX3BsX', 'ptYl9wbF', '6bWJfcGxf')

  // @import tag-splitting... the sanitizer strips `@import ...;` and the browser rejoins
  // the tag, so @import abuts a tag or attribute name
  // legit css @import follows `<style>`, `;`, `}` or whitespace, never a tag/attribute name
  or regex.icontains(body.html.raw,
                     '<@import[\s"'';(/]',
                     '<[a-z][^<>\s]*@import[\s"'';(/]',
                     '[\s"'']/?[a-z][a-z-]*@import[\s"'';(/]'
  )

  // unsplit payload... a hidden svg that decodes base64 on load
  // html attachments are covered by attachment_html_smuggling_eval_atob.yml
  or regex.icontains(body.html.raw,
                     '<svg[^>]{0,200}onload[^=]{0,10}=.{0,30}eval\s*\(\s*atob\s*\('
  )

  // the same markup in an html attachment... keep in sync with the body arms above
  or any(attachments,
         (
           .file_extension in~ ("html", "htm", "shtml", "dhtml")
           or .file_type == "html"
         )
         and (
           strings.icontains(file.parse_html(.).raw, 'zmb_pl_v')
           or strings.contains(file.parse_html(.).raw,
                               'em1iX3BsX',
                               'ptYl9wbF',
                               '6bWJfcGxf'
           )
           or regex.icontains(file.parse_html(.).raw,
                              '<@import[\s"'';(/]',
                              '<[a-z][^<>\s]*@import[\s"'';(/]',
                              '[\s"'']/?[a-z][a-z-]*@import[\s"'';(/]'
           )
         )
  )
)
MQL Rule Console
•Docs•Learning Labs

Playground

Test against your own EMLs or sample data.

Share

Post about this on your socials.

Get Started. Today.

Managed or self-managed. No MX changes.

Deploy and integrate a free Sublime instance in minutes.
Get Started