Flash Player 2026
From the RiskyPlugins AI security review of the observed evidence.
Analysis record
- Analysed
- 7 months ago
- Version
- v1.9.3
- Source
- Findings (non-IoC)
Evidence ledger
Ranked by severity · findings with a source location link to the code viewer
YARA Rule Matches
11 rules| Severity | Rule | Hits | Files | Metadata |
|---|---|---|---|---|
| HIGH | UntrustedContentShouldNotBeIncluded Including content in your site from an untrusted source can expose your users to attackers and even compromise your own site. For that reason, this rule raises an issue for each non-relative URL. For more information checkout the OWASP A1:2017 (https://owasp.org/www-project-top-ten/2017/A1_2017-Injection.html) advisory. | 1 | ruffle/ruffle.js | FP 20% |
| HIGH | postinstall crypto operations Cryptographic operations detected | 8 | ruffle/ruffle.jsruffle/3011bcc495d95ccdb484.wasmruffle/81d63abfb638f19f765a.wasm +5 more | Risky Plugins Authors FP 30% |
| HIGH | DebuggerStatementsShouldNotBeUsed The debugger statement can be placed anywhere in procedures to suspend execution. Using the debugger statement is similar to setting a breakpoint in the code. By definition such statement must absolutely be removed from the source code to prevent any unexpected behavior or added vulnerability to attacks in production. For more information checkout the CWE-489 (https://cwe.mitre.org/data/definitions/489.html) advisory. | 2 | ruffle/3011bcc495d95ccdb484.wasmruffle/81d63abfb638f19f765a.wasm | FP 10% |
| HIGH | postinstall system command System command execution detected | 6 | ruffle/3011bcc495d95ccdb484.wasmbg.jsruffle/core.ruffle.42e9812376a772a5def7.js +3 more | Risky Plugins Authors FP 10% |
| HIGH | postinstall file manipulation File system manipulation detected | 9 | ruffle/core.ruffle.e69ba15208200a5d72ea.jscs.jsruffle/core.ruffle.42e9812376a772a5def7.js +6 more | Risky Plugins Authors FP 20% |
| HIGH | postinstall network communication Network communication detected | 16 | ruffle/core.ruffle.42e9812376a772a5def7.jsmv3-upgrade.jsbg.js +13 more | Risky Plugins Authors FP 30% |
| HIGH | postinstall persistence mechanism Persistence mechanism detected | 2 | ruffle/3011bcc495d95ccdb484.wasmruffle/81d63abfb638f19f765a.wasm | Risky Plugins Authors FP 20% |
| HIGH | LocalStorageShouldNotBeUsed Session storage and local storage are HTML 5 features which allow developers to easily store megabytes of data client-side, as opposed to the 4Kb cookies can accommodate. While useful to speed applications up on the client side, it can be dangerous to store sensitive information this way because the data is not encrypted by default and any script on the page may access it. This rule raises an issue when the localStorage and sessionStorage API's are used. For more information checkout the OWSAP A3:2017 (https://owasp.org/www-project-top-ten/2017/A3_2017-Sensitive_Data_Exposure.html) advisory. | 1 | ruffle/ruffle.js | FP 5% |
| HIGH | postinstall obfuscation Code obfuscation techniques detected | 9 | bg.jsruffle/ruffle.jsruffle/core.ruffle.e69ba15208200a5d72ea.js +6 more | Risky Plugins Authors FP 20% |
| HIGH | postinstall registry modification Windows registry modification detected | 4 | ruffle/core.ruffle.42e9812376a772a5def7.jsruffle/core.ruffle.e69ba15208200a5d72ea.jsruffle/81d63abfb638f19f765a.wasm +1 more | Risky Plugins Authors FP 30% |
| HIGH | postinstall file download File download activity detected | 9 | player-embed.jscs.jsplayer.js +6 more | Risky Plugins Authors FP 30% |
Network Indicators
Concrete URLs, domains, IPs, emails, and hashes extracted from the analyzed artifact.
Loading network indicators
IoC detail rows are loaded outside the initial page render.
Publisher Evidence
Limited evidenceModernKit.one
Publisher identity, store signals, distribution reach, and warning signals used for context. Treat this as supporting evidence, not a clean bill of health.
Edge does not expose the same publisher verification data as IDE stores, so this score is deliberately conservative.
12 evidence rows available.
Finding Categories
YARA Rules Matched
11 rules(67 hits)AI Security Report
AI Security Review
Evidence context: threat category supply chain; evidence quality strong.
Architectural red flags in a working Flash emulator
This extension bundles the real Ruffle WASM Flash emulator and it does correctly play .swf files. The problem is not the Flash emulation — it's the infrastructure wrapped around it.
Remote-controlled content script injection
On a 1-hour alarm, bg.js calls https://api.modernkit.one/ext-activations/get-features with a device-unique UUID and receives a response field called alternateDetectionConfigv2. Each entry in that list contains a base64-encoded hostname. The extension decodes those hosts at runtime (atob(alternateConfig.host)) and calls chrome.scripting.registerContentScripts() to inject detection-alternate.js into every matching site, in the MAIN world, at document_start.
This means the publisher — not the store, not the user, not a code audit — decides at runtime which websites this extension injects code into. No extension update is required to re-target. The base64 encoding of the target list in the API response is consistent with deliberately obscuring the target set from static review.
XHR interception on the server-chosen targets
The injected detection-alternate.js overrides XMLHttpRequest.prototype.open and inspects every response body matching a server-provided regex:
var mk1CheckPath = atob(mk1AlternateConfig.path);
var mk1CheckBody = atob(mk1AlternateConfig.body);
// ...
window.XMLHttpRequest.prototype.open = function (method, url, isAsync) {
if (url.indexOf(mk1CheckPath) > -1) {
this.addEventListener('load', () => {
// walks response body, extracts fields by server-provided key paths
});
}
return mk1OriginalXHROpen.apply(this, arguments);
};
The fields that get stripped before data leaves the page are also controlled by the server, via an excludeKeys list. If the server returns an empty exclude list, the full response body flows out through an invisible <iframe id='mk1PageBridge'>.
Privileges far in excess of stated purpose
The manifest requests:
<all_urls>host permissionsdeclarativeNetRequestWithHostAccess— can rewrite network requestsscripting— can inject arbitrary scripts at runtime- Content scripts at
document_startin the MAIN world on every HTTP(S) page
A Flash emulator only needs to replace <object type="application/x-shockwave-flash"> elements where Flash is actually embedded. It does not need to modify network requests, dynamically register content scripts, or run at document_start on every site.
The exclude list is security theater
The manifest exclude_matches carves out banking and auth sites (authentication.td.com, sso.godaddy.com, duosecurity.com) from the static content scripts, which looks compliant on audit. But the dynamically-registered scripts from registerContentScripts() do not inherit this exclude list. Whatever hosts modernkit.one pushes into alternateDetectionConfigv2 get the injection, regardless of what the static manifest promises.
Telemetry and attribution
- Device-unique UUID stored in
chrome.storageand sent with every API call - Install, post-install, and uninstall URLs include UTM parameters that identify the extension and the installation channel
/statsendpoint called on multiple lifecycle events/ext-activations/check-utmendpoint sends tracking data back on a 1-hour schedule
Assessment
Even if the current server-side target list is benign — say, extracting Flash content from specific video sharing sites — the architecture itself is a remote-controlled backdoor. The publisher reserves the right to inject arbitrary JavaScript into any website of their choosing, intercept XHR responses there, and exfiltrate fields of their choosing, all without any extension update or user consent after install.
This is not a “false positive YARA rule” case. The malicious capability is intentional, documented in code, and gated only by whatever modernkit.one decides to do with their admin panel. A future update to the API response could retarget this to banking sites, crypto exchanges, or auth portals.
Do not install. If you already have it installed, uninstall it. If you run an enterprise environment, block the extension ID fgenmmklgkdemhpgdppmldmkemplbcko and the domain modernkit.one.
Key Reasons
- Dynamically registers MAIN-world content scripts on a remote-provided, base64-encoded target list
- Overrides XMLHttpRequest.prototype.open on server-chosen sites to sniff response bodies
- Manifest exclude_matches is bypassed by runtime-registered scripts
- Privileges (all_urls, scripting, declarativeNetRequest) vastly exceed what a Flash emulator needs
- Device fingerprinting and UTM attribution telemetry unrelated to Flash playback
Reviewed 2026-04-14; recommended action: takedown request; model confidence 90%.
Source Code Not Available
Source code is not available for this version of the extension.
Frequently Asked Questions
Similar Extensions
Related extensions from the same publisher or marketplace