Secure your SilverStripe site: Your guide to fixing CVE-2024-47605 cross-site scripting vulnerability

Fujitsu / June 17, 2025

The constant threat of website security

Website security is a constant battle, and content management systems (CMS) are often a prime target to cyber-attacks.

While performing a website penetration test for a client that was using the SilverStripe CMS, Fujitsu Cyber discovered a security flaw that allowed attackers to inject dangerous JavaScript code simply by embedding content from a malicious website.

This vulnerability, now patched and registered as CVE-2024-47605, had the potential to compromise both editors and site visitors.

This post explains our discovery, the vulnerability’s mechanics, and the steps taken to mitigate the threat.

Proof of Concept

Unveiling the vulnerability: How malicious code bypassed security

SilverStripe CMS lets users add content from external sources by pasting in a link, or URL, of third-party content.

This uses a feature called “oEmbed”, which is a commonly used format to instruct other websites on how to display the inserted content. This allows people to embed videos, images, and other content from third-party websites into their webpages.

The problem was that SilverStripe wasn't properly checking content from third-party sites. A malicious link disguised as a valid media source could inject harmful code directly onto the webpage, bypassing any security filters.

That’s a textbook example of a security issue called Cross-Site Scripting (XSS).

Attack Diagram

Exposing the flaw: Our step-by-step discovery process

To demonstrate the vulnerability, we set up a basic server that responded with a fake oEmbed response.

Instead of valid media content, it returned a small piece of JavaScript code that would show a popup saying, “hello world.”

Walkthrough:
  1. 1. Set up a SilverStripe CMS site (version 5.2).
  2. 2. Logged in as a user with editing permissions.
  3. 3. Clicked “Insert Media via URL” in the page editor.
  4. 4. Pasted in a link to our test “hacker” server, which returned the malicious data.
  5. 5. Saved the page.

At that point, the script we injected would run every time someone viewed the page in both the editing area, and the public website.

Our test “hacker” server hosted a page with the following HTML code, linking to the malicious oEmbed JSON file:

Loading component...

The malicious oEmbed JSON file contained the following information:

Loading component...

Then, we inserted the content into our SilverStripe test server:

Loading component...

Loading component...

Loading component...

Loading component...

Loading component...

Loading component...

Loading component...

Loading component...

Loading component...