registry  /  nottuff3  /  2.0.0

nottuff3@2.0.0

Republished package

AI Security Review

scanned 3h ago · by lpm-firewall-ai

Opening the package's HTML entrypoint runs a remote third-party script and installs a service worker. The worker routes browser traffic through a remote WebSocket-backed proxy runtime.

Static reason
One or more suspicious static signals were detected.
Trigger
User opens `index.html` or renders the packaged SVG/HTML content in a browser.
Impact
Remote operator-controlled code can run in the browser context and proxied browsing traffic can persist through the installed service worker.
Mechanism
Remote script execution plus persistent service-worker proxy routing.
Attack narrative
This npm package presents itself as `nottuff3` but ships a browser proxy application. On opening its HTML entrypoint, it executes an external script from `c.vipersfutbol.com`, boots a WebSocket proxy to `21baseballacademy.com`, and registers a service worker that intercepts routed fetches. The remote script is not pinned or included in the package, so its operator can alter browser-executed behavior after publication; the service worker extends that control beyond a single request.
Rationale
The package contains a concrete remote-code loader and automatic persistent browser traffic-routing mechanism unrelated to its declared package identity. Although it has no npm install hook, the runtime behavior is malicious enough to block.
Evidence
package.jsonindex.htmlassets/boot-CVPGRFHh.jsj6k3y8.jsbfjdx/757lr8.jsassets/ChatPage-zoA8Z6RX.jsct1tl/jmqwjq.jsct1tl/pap3do.jsct1tl/csbzam.jsbfjdx/w7m632.wasmlogo.svgindex.svg
Network endpoints2
c.vipersfutbol.com/script.jswss://21baseballacademy.com/fairs/

Decision evidence

public snapshot
AI called this Malicious at 97.0% confidence as Malware with low false-positive risk.
Evidence for block
  • `index.html` automatically loads remote code from `https://c.vipersfutbol.com/script.js`.
  • `assets/boot-CVPGRFHh.js` registers `j6k3y8.js` as a service worker at runtime.
  • `j6k3y8.js` intercepts qualifying browser fetches and routes them through bundled proxy code.
  • `assets/boot-CVPGRFHh.js` configures a WebSocket proxy at `wss://21baseballacademy.com/fairs/`.
  • `bfjdx/757lr8.js` and `bfjdx/w7m632.wasm` provide a bundled WASM-backed proxy/network runtime.
  • `assets/ChatPage-zoA8Z6RX.js` is heavily obfuscated, concealing runtime behavior.
Evidence against
  • `package.json` has no preinstall, install, postinstall, or other lifecycle scripts.
  • No Node filesystem, shell, credential-harvesting, or AI-agent configuration writes were found.
  • The package payload activates when its browser entrypoint is opened, not during npm installation.
Behavioral surface
Source
ChildProcessDynamicRequireFilesystemNetworkWebSocket
Supply chain
HighEntropyStringsMinifiedObfuscatedProtestwareUrlStrings
Manifest
NoLicense
scanned 24 file(s), 7.27 MB of source, external domains: 127.0.0.1, aomediacodec.github.io, cdn.jsdelivr.net, cloud-api.livekit.io, curl.se, emscripten.org, fingerprint.com, github.com, m1.openfpcdn.io, react.dev, sj-cache.invalid, twemoji.maxcdn.com, www.w3.org, www.zlib.net

Source & flagged code

7 flagged · loading source
assets/proxy-runtime-1NyFshf9.jsView file
1patternName = aws_access_key severity = critical line = 1 matchedText = var OQ=O...B+=`
Critical
Critical Secret

Package contains a critical-looking secret pattern.

assets/proxy-runtime-1NyFshf9.jsView on unpkg · L1
1patternName = aws_access_key severity = critical line = 1 matchedText = var OQ=O...B+=`
Critical
Secret Pattern

AWS access key ID in assets/proxy-runtime-1NyFshf9.js

assets/proxy-runtime-1NyFshf9.jsView on unpkg · L1
bfjdx/757lr8.jsView file
17L18: //# sourceURL=${A}`)();n=c,o=l}else n=g.z$,o=g.Mt;r.construct&&(l.construct=function(e,t,i){let n,s=!1,a={fn:e,this:null,args:t,newTarget:i,return:e=>{s=!0,n=e},call:()=>(s=!0,n=o(... L19: //# sourceURL=${r.url.href}`),n}return o.body;case"style":return(0,i.sM)(await o.text(),e.context,r.meta);case"sharedworker":case"worker":return(0,i.iP)(new Uint8Array(await o.arra...
Medium
Dynamic Require

Package source references dynamic require/import behavior.

bfjdx/757lr8.jsView on unpkg · L17
assets/ChatPage-zoA8Z6RX.jsView file
1(function(_0x31bba3,_0x379132){const _0x159e7b={_0x26fc34:0x358,_0x56fc24:0x70c,_0x216b69:0x578,_0x22d6fc:0x60b,_0x33af41:0x2a6,_0x514b56:0x7f9,_0x4ccc4c:0x9d1,_0x35dd24:0xfdf,_0x1...
High
Obfuscated Payload Loader

Source contains an obfuscator-style string-array loader that reconstructs and executes hidden code.

assets/ChatPage-zoA8Z6RX.jsView on unpkg · L1
bfjdx/w7m632.wasmView file
path = bfjdx/w7m632.wasm kind = wasm_module sizeBytes = 586279 magicHex = [redacted]
Medium
Ships Wasm Module

Package ships WebAssembly modules.

bfjdx/w7m632.wasmView on unpkg
assets/KaTeX_Script-Regular-D3wIWfF6.woff2View file
path = assets/KaTeX_Script-Regular-D3wIWfF6.woff2 kind = high_entropy_blob sizeBytes = 9644 magicHex = [redacted]
High
Ships High Entropy Blob

Package ships high-entropy non-source blobs.

assets/KaTeX_Script-Regular-D3wIWfF6.woff2View on unpkg
assets/livekit-C0E_jLSz.jsView file
13patternName = generic_password severity = medium line = 13 matchedText = `},e.par...+`\r
Medium
Secret Pattern

Hardcoded password in assets/livekit-C0E_jLSz.js

assets/livekit-C0E_jLSz.jsView on unpkg · L13

Findings

2 Critical3 High6 Medium4 Low
CriticalCritical Secretassets/proxy-runtime-1NyFshf9.js
CriticalSecret Patternassets/proxy-runtime-1NyFshf9.js
HighObfuscated Payload Loaderassets/ChatPage-zoA8Z6RX.js
HighObfuscated
HighShips High Entropy Blobassets/KaTeX_Script-Regular-D3wIWfF6.woff2
MediumDynamic Requirebfjdx/757lr8.js
MediumNetwork
MediumProtestware
MediumShips Wasm Modulebfjdx/w7m632.wasm
MediumStructural Risk Force Deep Review
MediumSecret Patternassets/livekit-C0E_jLSz.js
LowFilesystem
LowHigh Entropy Strings
LowUrl Strings
LowNo License