Case Study

Operation RoundPress

Between 2023 and 2025, a campaign that ESET named Operation RoundPress used cross-site scripting in webmail software to steal credentials, contacts and messages from government and defence targets. ESET attributes it, with medium confidence, to the Russia-aligned group Sednit.

It is on this page next to a ransomware crew and a vulnerability disclosure for a reason. Same mechanism, entirely different motive — and two unrelated kinds of attacker converging on one technique is a better argument than either on its own.

The payload never lands anywhere

The delivery was a spearphishing email, but the email was not carrying malware. It carried an XSS payload, and when the target opened the message in their browser the payload injected JavaScript directly into the webmail page they were already logged into.

From there it read what that session could read. Credentials, contacts, messages. In the MDaemon case the tooling ESET calls SpyPress.MDAEMON went further and set up a bypass of two-factor authentication.

There is no file for endpoint tooling to find, no process to flag, and nothing written to disk. The attack exists as script running in a page for as long as that page is open. This is the cleanest illustration available of an injection that lives entirely in the browser layer, which is exactly the place most security tooling cannot see.

Second factors protect the moment you log in. This arrives afterwards, inside the session that logging in produced.

- Why the 2FA bypass matters

Most of the bugs already had fixes

The campaign started against Roundcube in 2023 and expanded in 2024 to Horde, MDaemon and Zimbra. One of the four, CVE-2024-11182 in MDaemon, was a zero-day at the time and has since been patched — ESET considers it most likely that Sednit found it themselves.

The other three were already known and already patched. The victims simply had not applied the fixes.

That is not an argument against patching, and it is not a criticism of the vendors, three of whom had shipped the fix. It is an observation about the window. There is always a gap between a fix existing and it being applied across an estate, and a control that works during that gap has to be one that does not care which bug produced the injection. A policy that refuses to execute unsigned inline script does not need to know the CVE number.

A nonce-based policy is what breaks this chain. With script-src 'self' 'nonce-{random}' and no 'unsafe-inline', an injected script carries no nonce, so the browser refuses to run it — and the session it was reaching for is never taken. It does not matter which field the payload arrived in or which bug let it through.

No victim organisations were named and no volume of stolen mail is public, so there is no figure to quote here. The mechanism is the finding.

How we can help

The policy is the mitigation and the reporting is the detection, and it is the second half almost nobody switches on. Run CSP in report-only across the internal tools where untrusted content gets rendered, and an injected inline script announces itself the first time it fires — from the real session it fired in, with the page it fired on.

One line of code or config to deploy, and nothing is blocked while you learn what the policy would have caught. Reach out to sales@report-uri.com for a demo or a trial with no commitment.

Get Started

Nothing touched disk. See what executes in your users' browsers.

One header. No code. Your script inventory starts populating from the first visitor.

30-day free trial  ·  One header  ·  No code  ·  Cancel anytime

Script Watch

Script Watch will monitor all JavaScript dependencies across your entire site and immediately notify you of any changes. A new JavaScript dependency could be the start of a Magecart attack.

Because Script Watch leverages the browser native Content Security Policy, there is no code or agent to deploy and running in the browser means we analyse your site in real-time as your users are browsing. We don't have the same limitations as external scanning services such as authentication or pay walls, geo-sensitive content or an attacker potentially serving safe content to the crawler.

Read More

Data Watch

Data Watch will monitor all of the locations that your webpages are sending data to. If your website starts sending data to a new location, it could be the start of a Magecart attack.

With Script Watch and Data Watch combined, you can monitor for clear indicators that your site has been compromised. Attackers will always want to inject their hostile JavaScript, and they'll always want to exfiltrate their stolen data.

Read More

The CSP Wizard

We often find that creating a CSP is the first difficult step that organisations face. Having a complete list of all resource dependencies across your entire site like images, scripts or styles, from both 1st-party and 3rd-party locations, is tough to achieve.

The CSP Wizard was created to solve this problem, and in seven days or less, it can give you a complete list of all resources used across your entire site.

With the list of all resources you use on your site, and our easy-to-use tool, creating a viable Content Security Policy is easier than ever with just a few clicks.

Documentation

The CSP Builder

All Content Security Policies will need to be tweaked at some point. New resources may be added to the site or old resources removed, and the policy needs to be updated to reflect those changes and kept up to date.

You can import your existing policy into the CSP Builder and use our fully featured tool to make any changes that you require right there in the UI. When you're done, hit Generate, and the CSP Builder will provide you with your new, updated policy.

CSP Builder

Content Security Policy

Script Watch and Data Watch will allow you to rapidly detect and respond to a Magecart attack and combined, that capability puts you ahead of the field. If you want to take it a step further, Content Security Policy can mitigate a Magecart attack and stop it from even happening.

Deploying an effective Content Security Policy can be difficult, but our CSP Reporting allows you to gather feedback and safely test a policy before deployment. Once deployed, an effective Content Security Policy will block a Magecart attack and stop the hostile JavaScript from even running.

Read More

Threat Intelligence

We subscribe to various feeds of Threat Intelligence data, along with managing our own internally generated feeds, to keep apprised of the latest threats that exist online.

Using this Threat Intelligence Data, we can better analyse the sources of JavaScript on your website and detect malicious activity sooner.

Read More