Security Alert: Confirmed Malware
Subway Surfers
ID: oolehmnnaggcbnlplpccgholfbdlpbel
Supported Languages
Extension Info & Metadata
Publisher Contextual Analysis
- Author
- Premium GamesView Profile
- Privacy
- Privacy Policy
- MX records exist
- Yes
- Domain exists
- Yes
- Is disposable
- No
- Is role-based
- No
- Mailbox exists
- Yes
Email Change History
Subway Surfers World Tour: San Francisco. Play Subway Surfers endless runner game
Subway Surfers is an exhilarating and fast-paced endless runner game that has captivated players worldwide on mobile devices. Now, with "Subway Surfers World Tour: San Francisco" available for desktop browsers, the excitement and fun are taken to a whole new level. Here's why you'll enjoy playing this thrilling game on your desktop: - Bigger Screen, More Detail: Playing Subway Surfers on your desktop provides a larger screen experience, allowing you to appreciate the game's vibrant graphics and intricate details even more. - Precise Controls: Desktop browsers offer precise control through keyboard inputs, making it easier to navigate your character through the intricate subway landscapes of San Francisco. - Endless Running Thrills: Just like in the mobile version, you'll be challenged to run, jump, and surf across subway tracks and rooftops endlessly. The game's simple yet addictive mechanics will keep you engaged for hours. - Collectibles and Power-Ups: Collect coins and power-ups to boost your performance and score. Unlock new characters and hoverboards as you progress, adding variety and excitement to the gameplay. - San Francisco Adventure: Explore the iconic city of San Francisco as your backdrop. Dodge oncoming trains, dash through cable cars, and leap across the famous Golden Gate Bridge as you immerse yourself in this thrilling urban adventure. - Compete with Friends: Challenge your friends and fellow players to beat your high score. Subway Surfers fosters a competitive spirit, and achieving the highest score is always rewarding. In "Subway Surfers World Tour: San Francisco," you'll experience the rush of urban parkour, vibrant visuals, and heart-pounding action, all on the convenience of your desktop browser. It's the perfect way to enjoy the game's fun and challenge in a larger format. So, jump on your virtual skateboard and start running through the iconic streets of San Francisco in this thrilling endless runner adventure!
The parent-side `setupParent()` persists intercepted cookie and localStorage data to `chrome.storage.local` (durable extension storage) and continuously re-broadcasts it to the iframe every 1000ms via `postMessage` with a wildcard target origin (`"*"`). The `message` event listeners on both sides accept messages from any origin without validation, allowing a malicious third-party page to inject fake cookie/storage data or receive exfiltrated cookie payloads if it can load the extension's game page in a cross-origin iframe.
window.addEventListener("message", async function(event) { if (!event.data) return; if (!event.data.indexOf("cookies:")) { COOKIE = (event.data + "") .substring("cookies:".length); source = event.source; } if (!event.data.indexOf("local:")) { const storageStr = (event.data + "") .substring("local:".length); source = event.source; if (storageStr) { const json = JSON.parse(storageStr); if (typeof json === "object") { storage = json; } } } READY = true;});}function setupParent() { const sandbox = document.getElementsByTagName("iframe")[0]; const reportChild = () => { chrome.storage.local.get(["cookies", "local"], (e) => { const c = e.cookies ? e.cookies : ""; sandbox.contentWindow.postMessage("cookies:" + c, "*"); const l = e.local ? e.local : ""; sandbox.contentWindow.postMessage("local:" + l, "*"); }); }; window.addEventListener("message", async function(event) { if (!event.data) return; if (!event.data.indexOf("set:")) { COOKIE = (event.data + "") .substring("set:".length); chrome.storage.local.set({ cookies: COOKIE }); } if (!event.data.indexOf("setLocal:")) { const storageStr = (event.data + "") .substring("setLocal:".length); chrome.storage.local.set({ local: storageStr }); } }); setInterval(reportChild, 1e3); reportChild();}The extension declares a content script (img.js) that runs on every HTTPS page the user visits (`https://*/*`) at `document_start`, the earliest possible execution point. This is entirely unnecessary for a game extension and grants covert DOM access and script execution capability across every website. No corresponding `host_permissions` entry is declared, yet MV3 content_scripts matches effectively function as host grants approved silently at install time.
{ "content_scripts": [ { "matches": [ "https://*/*" ], "js": [ "img.js" ], "run_at": "document_start" } ]}This file is injected as a content script into every HTTPS page at document_start, yet it contains a banner-ad injection framework: it fetches an ad payload (URL + image) from response object `r` and injects a fixed-position 728×90px clickable ad that navigates to an externally controlled URL. While currently gated on `r` being defined (preventing immediate execution in typical content-script context), the entire adware delivery mechanism is present and can be activated by any co-loaded script that defines `r` — including a future silent update.
if (document.location.hostname === chrome.runtime.id) { function applyCss(d, styles) { for (const [key, value] of Object.entries(styles)) d.style[key] = value; } setTimeout(async () => { if (typeof r === "undefined") { return; } const data = await r.json(); if (data && data.url && data.img) { const img = document.createElement("IMG"); img.addEventListener("load", () => { const a = document.body.appendChild(document.createElement("a")); a.setAttribute("href", data.url); a.style.backgroundImage = 'url("' + data.img + '")'; a.setAttribute("target", "_blank"); applyCss(a, { position: "fixed", bottom: "0", left: "0", width: "728px", height: "90px", }); a.classList.add("promo"); }); } });}The script overrides the native `document.cookie` property via `Object.defineProperty`, intercepting all cookie reads and writes within the sandboxed page. Any cookie value longer than 100 characters is captured and immediately broadcast via `postMessage` to the parent frame using a wildcard origin (`"*"`), meaning any page that has embedded this extension page in an iframe could receive the cookie payload.
var COOKIE = "";var source = null;function setupSandbox() { Object.defineProperty(document, "cookie", { get: function() { return COOKIE; }, set: function(value) { if (value && value.length > 100) { COOKIE = value; source && source.window.postMessage("set:" + COOKIE, "*"); } }, });The sandbox CSP allows `'unsafe-eval'` and `'unsafe-inline'` across every directive (script-src, object-src, child-src, worker-src, script-src-elem). This permits arbitrary dynamic code generation via `eval()`, `new Function()`, and inline `<script>` blocks within the sandboxed page, eliminating the primary XSS mitigations that CSP is meant to provide.
{ "content_security_policy": { "sandbox": "sandbox allow-scripts allow-pointer-lock; script-src 'self' 'unsafe-eval' blob: 'unsafe-inline'; object-src 'self' 'unsafe-eval' blob: 'unsafe-inline';child-src 'self' 'unsafe-eval' blob: 'unsafe-inline' ; worker-src 'self' 'unsafe-eval' blob: 'unsafe-inline'; script-src-elem 'self' 'unsafe-eval' blob: 'unsafe-inline'" }}By severity
Versions scanned
Showing 1 of 4 scanned versions with more than one unique finding. Counts are unique findings that include each version.
| Extension Version | Code Review Findings |
|---|---|
| 1.0.2 | 5 |
Files with findings
3 distinct paths — top paths by unique finding count:
- manifest.json2
- storage.js2
- img.js1
URLs
View the external URLs this extension communicates with to understand its network activity and data interactions.
Gain full insight into all external connections.
Upgrade for full visibility.
Gain full insight into all external connections.
Upgrade for full visibility.
Code Diff
Compare extension code between any two versions.
No comparable text files found between these versions.
Browse and explore files within this extension package
Gain full insight into all external connections.
Upgrade for full visibility.