Flash Player for Web

ID: lkhhagecaghfakddbncibijbjmgfhfdm

Could be malicious

Supported Languages

🇬🇧British English
🇪🇸Catalan
🇨🇳Chinese (Simplified)
🇨🇿Czech
🇩🇰Danish
🇳🇱Dutch
🇺🇸English
🇫🇷French
🇩🇪German
🇮🇹Italian
🇯🇵Japanese
🇰🇷Korean
🇵🇱Polish
🇵🇹Portuguese
🇷🇺Russian
🇪🇸Spanish
🇸🇪Swedish
🇹🇷Turkish

Extension Info & Metadata

Status
Removed
Version
1.2.6
Size
1.84 MB
Rating
4.0/5
Reviews
286
Users
800,000
Type
Extension
Updated
Jan 22, 2025
Category
Productivity Workflow
Price
Free
Featured
Yes
Visibility
Listed
Mature
No
By Google
No
Trusted
Yes

Publisher Contextual Analysis

Trusted
Author
https://flashesweb.comView Profile
MX records exist
Yes
Domain exists
Yes
Is disposable
No
Is role-based
No
Mailbox exists
Yes
Website
Visit
Total Extensions
1
Active
0
Obsolete
1
Listed
1
Unlisted
0
Total Users
800,000

Flash Player emulator that runs any flash content (SWF files) using an Ruffle. Play favorite flash games online! Game emulator.

Flash Player for Web is an emulator that utilizes Ruffle to run flash content in browsers. This includes flash games, videos, and other files that are converted into an alternate format for compatibility with web browsers. With a Chrome Extension, you can easily add any SWF file to the app's playlist and access it with a simple click. Original flash player is nowadays disabled in the browser. Don't worry, just install this simple flash player. This tool is free and supports all formats and HD flash files. If you've encountered the "Adobe Flash Player is no longer supported" error and are unable to play a flash game on your favorite gaming website, this Chrome tool can help. To use it, go to a site with flash content, click on the extension logo, enable the Flash Player, reload the page, and click the Play button to enjoy your flash content. If you are bored you should definitely add this app to your Chrome. Play the games such as classic games, retro games, latest games, pacman, sonic, street fighter and other amazing games. Warning: Flash Player is a helper tool for Google Chrome users. Flash Player is not officially affiliated with products Adobe Flash Player or any others Adobe products. Our extension is in a partnership with admitad. We use this service only for link affilication. We don't save any of your search queries nor are we making any rewards from your search queries. Now you no longer need to download additional applications or utility, use old versions of extension. All in one extension Flash Player - emulator.

Item
Type
Severity
Description
*://*/*
Permission
Critical
This permission grants access to all websites without restriction. Rated High because it can access any web content, monitor all web activity, and potentially steal sensitive data across all sites.
Contextual Risk Factors
Risk Factor
High
The following context increases the overall risk:• 10% increase: Early script execution enables pre-emptive content manipulation• 15% increase: Older manifest version lacks modern security controls• 10% increase: About:blank access enables potential sandbox escape vectors
storage
Permission
Medium
This permission allows storing data locally in the browser. Rated Medium because it can persist sensitive user data, track user activities over time, and potentially store malicious payloads.
activeTab
Permission
Medium
This permission grants temporary access to the current tab. Rated Medium because it can access current page content when invoked, though limited to user-initiated actions.
Early Content Script Execution
Risk Factor
Medium
This extension runs content scripts at document_start.
About:blank Access
Risk Factor
Medium
This extension can run content scripts in about:blank pages.
Older Manifest Version
Risk Factor
Medium
This extension uses Manifest Version 2
contextMenus
Permission
Low
This permission adds items to browser context menus. Rated Medium because it only modifies right-click menus without access to page content.
notifications
Permission
Low
This permission displays system notifications. Rated Low because it can only show user-visible notifications without accessing system data.

The `index.js` outer frame listens for `message` events without validating the sender's origin (`e.origin` is never checked), then issues a `fetch()` to any `href` included in the message and forwards the response body back to the iframe via `postMessage` with a wildcard `"*"` origin. This is an open SSRF-like proxy: any page that can send a `postMessage` to this extension window can cause it to fetch arbitrary URLs using the extension's network context and receive the response. Combined with the broad `activeTab` and `*://*/*` permissions, this could be used to make the extension act as a same-origin proxy to bypass CORS restrictions on behalf of an attacker.

play/index.js (Line 1)
window.addEventListener("message", (e => {  const t = e.data;  "fetch" === t.method && fetch(t.href).then((async e => {    const t = await e.arrayBuffer();    iframe.contentWindow.postMessage({      content: t,      type: e.headers.get("Content-Type")    }, "*")  })).catch((e => iframe.contentWindow.postMessage({    error: e.message  }, "*")))}));

This content script runs at `document_start` on every page across all URLs and injects a dynamically-created script element into `document.documentElement` to globally override `navigator.plugins['Shockwave Flash']` and the `swfobject` global on every page the user visits. Spoofing browser plugin detection this universally can deceive sites into revealing Flash-specific code paths or content, and the DOM-based script injection pattern (create → append → remove) is a classic technique used to execute code before CSP policies fully apply. The misspelling in the filename (`'Flsh Player.plgin'`) suggests hastily-written deceptive code rather than a polished compatibility shim.

javascript/main.js (Line 1)
const script = document.createElement("script");script.textContent = "\n  navigator.plugins['Shockwave Flash'] = {\n    name: 'Shockwave Flash',\n    description: 'Shockwave Flash 23.0 r0',\n    filename: 'Flsh Player.plgin'\n  };\n  swfobject = {\n    embedSWF(href, id) {\n      const embed = document.createElement('embed');\n      embed.src = href;\n      embed.width = width;\n      embed.height = height;\n      const e = document.getElementById(id);\n      if (e) {\n        e.appendChild(embed);\n      }\n    },\n    hasFlashPlayerVersion() {\n      return true;\n    },\n    ua: {\n      pv: [100, 0, 0]\n    }\n  }\n", document.documentElement.appendChild(script), script.remove()

The background worker injects dynamically-constructed JavaScript code strings directly into active tabs using `chrome.tabs.executeScript` with an inline `code` property built via `String.raw` and `JSON.stringify`. This pattern creates a code-injection vector: if any SWF URL collected from the page contains adversarial content that survives `JSON.stringify`, it could escape the string context and execute arbitrary JS in the tab. Legitimate Flash-finder extensions should pass detected URLs through a fixed UI popup, not by injecting runtime-constructed `prompt()` calls into arbitrary pages.

worker.js (Line 1)
chrome.tabs.executeScript({  code: String.raw`{        const links = ${JSON.stringify(s)};        prompt('Select a Flash link to start emulation:\n\n' + links.map((s, i) => (i + 1) + ' ' + s).join('\n'), 1);      }`}, ([t]) => {  t && !1 === isNaN(t = Number(t)) && open(n[s[t - 1] || s[0]], e)})

The context-menu handler for 'inject-ruffle' uses `chrome.tabs.executeScript` with an inline code string to create a `<script>` tag and append it to the current page's `document.body`, loading the extension's `ruffle.js` emulator into any arbitrary tab on demand. This effectively gives the extension the ability to load and execute its bundled JavaScript into any page the user is browsing at any time via context menu, which is a privileged script injection capability that significantly expands the extension's attack surface if the emulator itself is compromised or replaced.

worker.js (Line 4)
"inject-ruffle" === e.menuItemId && chrome.tabs.executeScript(t.id, {  code: `{        const s = document.createElement('script');        s.src = '${chrome.runtime.getURL("/emulator/ruffle.js")}';        document.body.appendChild(s);      }`,  runAt: "document_start"})

The `web_accessible_resources` entry `"/*"` exposes every file in the extension package to any web page — not just the emulator assets. This wildcard means any external website can fetch, load, or reference any extension resource (including JS files, the WASM binary, and HTML pages) via `chrome-extension://` URLs, enabling adversarial pages to probe the extension's internal structure, fingerprint users by extension ID, or attempt to exploit the extension's sandboxed pages. Only the specific emulator resources needed for embedding should be listed here.

manifest.json (Line 53)
{  "web_accessible_resources": [    "icons/*",    "/*",    "/emulator/ruffle.js",    "/emulator/*.wasm"  ]}

The sandboxed `player.html` page completely replaces both `window.fetch` and `window.XMLHttpRequest` with custom implementations that forward all network requests to the parent frame via `top.postMessage({method:'fetch', href:t}, "*")`. Using `"*"` as the target origin means this message is not restricted to the extension's own origin — any page that embeds this player in an iframe can intercept these proxied fetch requests. This proxy architecture means all network requests made by the Flash emulator (potentially including requests to user-visited SWF content and its dependencies) are routed through the extension's parent frame rather than issued directly, creating an interception point for all emulated content's network traffic.

play/player.js (Line 1)
const f = window.fetch;window.fetch = function(...e) {  let t = e[0].url || e[0];  if (t.startsWith("js:") || t.startsWith("chrome-extension")) return f.apply(this, e);  if (!1 === t.startsWith("http")) {    const e = document.createElement("a");    e.setAttribute("href", t), t = e.href  }  return new Promise(((e, s) => {    window.onmessage = t => {      const {        content: r,        type: a,        error: n      } = t.data;      if (n) s(new Error(n));      else {        const t = new Response(r, {          status: 200,          headers: {            "Content-Type": a,            referer: base.href          }        });        e(t)      }    }, top.postMessage({      method: "fetch",      href: t    }, "*")  }))}, window.XMLHttpRequest = class {  ...}

When no SWF embeds are found via DOM element selectors, `find.js` falls back to scanning the entire `document.documentElement.innerHTML` as a raw string using a regex. This reads the complete rendered HTML of every page the user is on, including any sensitive data present in hidden form fields, inline scripts, data attributes, or page content. While ostensibly searching for `.swf` URLs, the full-page HTML read in a content script context is unnecessarily invasive and could be used to harvest page content.

javascript/find.js (Line 1)
0 === e.length && [...document.documentElement.innerHTML.matchAll(/https?:\/\/.*\.swf/g)].map((t => {  e.push({    href: t  })}))

By severity

Critical1
High4
Medium2
Low0

Versions scanned

Showing 1 of 10 scanned versions with more than one unique finding. Counts are unique findings that include each version.

Extension VersionCode Review Findings
1.2.67

Files with findings

6 distinct paths — top paths by unique finding count:

  • worker.js2
  • javascript/find.js1
  • javascript/main.js1
  • manifest.json1
  • play/index.js1
  • play/player.js1
S.No.
Category
Severity
File
Summary
Found in Version
1Network Interception
critical
play/index.js (line 1)The `index.js` outer frame listens for `message` events without validating the sender's origin (`e.origin` is never checked), then issues a `fetch()` to any `href` included in the message and forwards the response bod…
2Code Injection
high
javascript/main.js (line 1)This content script runs at `document_start` on every page across all URLs and injects a dynamically-created script element into `document.documentElement` to globally override `navigator.plugins['Shockwave Flash']` a…
3Code Injection
high
worker.js (line 1)The background worker injects dynamically-constructed JavaScript code strings directly into active tabs using `chrome.tabs.executeScript` with an inline `code` property built via `String.raw` and `JSON.stringify`. Thi…
4Code Injection
high
worker.js (line 4)The context-menu handler for 'inject-ruffle' uses `chrome.tabs.executeScript` with an inline code string to create a `<script>` tag and append it to the current page's `document.body`, loading the extension's `ruffle.…
5Other
high
manifest.json (line 53)The `web_accessible_resources` entry `"/*"` exposes every file in the extension package to any web page — not just the emulator assets. This wildcard means any external website can fetch, load, or reference any extens…
6Network Interception
medium
play/player.js (line 1)The sandboxed `player.html` page completely replaces both `window.fetch` and `window.XMLHttpRequest` with custom implementations that forward all network requests to the parent frame via `top.postMessage({method:'fetc…
7Unauthorized Data Collection
medium
javascript/find.js (line 1)When no SWF embeds are found via DOM element selectors, `find.js` falls back to scanning the entire `document.documentElement.innerHTML` as a raw string using a regex. This reads the complete rendered HTML of every pa…
URLs
23
IPv4
0
IPv6
0

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.

www.w3.org/1999/02/22-rdf-syntax-nshttp://www.w3.org/1999/02/22-rdf-syntax-ns#
ns.adobe.com/xap/1.0/http://ns.adobe.com/xap/1.0/
purl.org/dc/elements/1.1/http://purl.org/dc/elements/1.1/
ns.adobe.com/photoshop/1.0/http://ns.adobe.com/photoshop/1.0/
ns.adobe.com/xap/1.0/mm/http://ns.adobe.com/xap/1.0/mm/
ns.adobe.com/xap/1.0/sType/ResourceEventhttp://ns.adobe.com/xap/1.0/sType/ResourceEvent#
clients2.google.com/service/update2/crxhttps://clients2.google.com/service/update2/crx
ruffle.rs/AS3/impl/graphicsflash.displaySpriteDisplayObjectContainerhttps://ruffle.rs/AS3/impl/graphicsflash.displaySpriteDisplayObjectContainer
ruffle.rs/AS3/impl/graphicsflash.displayShapeDisplayObjecthttps://ruffle.rs/AS3/impl/graphicsflash.displayShapeDisplayObject
adobe.com/AS3/2006/builtinAttemptedhttp://adobe.com/AS3/2006/builtinAttempted
Showing 1 to 10 of 30 rows
Rows per page:

Gain full insight into all external connections.

Upgrade for full visibility.

No IP addresses found
Showing 1 to 10 of 10 rows
Rows per page:

Code Diff

Compare extension code between any two versions.

0 changed files (scanned top 25 shared text files)

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.