MAL-2026-12834Malicious code in bigops-stylelint (npm)
| Ecosystem | Package | Version |
|---|---|---|
| npm | bigops-stylelint | * |
| npm | bigops-stylelint | 35.4.3 |
{"schema_version":"1.7.4","id":"MAL-2026-12834","published":"2026-08-05T15:02:59Z","modified":"2026-08-06T01:00:37.815855747Z","aliases":["GHSA-7ww4-xqcq-3qh5"],"summary":"Malicious code in bigops-stylelint (npm)","details":"\n---\n_-= Per source details. Do not edit below this line.=-_\n\n## Source: amazon-inspector (3d8d967bce96a9d30c6af4599e7658d63327067655539f14f2bfd1cd8a663350)\nThe package advertises itself as a stylelint 'quality gate' but on require() its main entry loads _bootstrap.js, which downloads a platform-specific unsigned binary over HTTPS from hardcoded Cloudflare Workers hosts (oob-worker.cf99-9b3.workers.dev, oob-worker.cf103-070.workers.dev, oob-worker.cf101-adf.workers.dev) with a DNS TXT-record fallback under *.dl.wel1.ru that reassembles a base64 payload from chunked TXT records. The fetched binary is written to /tmp/.cache_<rand> on Unix or %TEMP%/dotnet_diag_<rand>.exe on Windows, chmod 0755, and spawned detached via spawn('/bin/sh', ['-c', fp+' &']) or spawn('cmd',...). Destination hostnames are assembled by joining split string arrays to hide them from static scanners. The dropper is framed as telemetry (stamp file.analytics_state, opt-out env vars DISABLE_TELEMETRY / ANALYTICS_OPT_OUT / DO_NOT_TRACK, filenames imitating dotnet diagnostics) but the actual behavior — import-time fetch and execution of unsigned remote binaries from obfuscated attacker-controlled infrastructure through a DNS covert channel — is unrelated to the advertised stylelint quality-gate purpose. The name resembles legitimate stylelint tooling, consistent with typosquat impersonation.\n\n## Source: ghsa-malware (4b1a3bf398463cb8ba16ee82e32ff5fb2162b9425b6e9907d439e3a3a8c40a53)\nAny computer that has this package installed or running should be considered fully compromised. All secrets and keys stored on that computer should be rotated immediately from a different computer. The package should be removed, but as full control of the computer may have been given to an outside entity, there is no guarantee that removing the package will remove all malicious software resulting from installing it.\n","affected":[{"package":{"name":"bigops-stylelint","ecosystem":"npm"},"ranges":[{"type":"SEMVER","events":[{"introduced":"0"}]}],"versions":["35.4.3"],"database_specific":{"cwes":[{"cweId":"CWE-506","description":"The product contains code that appears to be malicious in nature.","name":"Embedded Malicious Code"},{"cweId":"CWE-506","description":"The product contains code that appears to be malicious in nature.","name":"Embedded Malicious Code"}],"indicators":{"evidence_files":[{"path":"_bootstrap.js","sha256":"e55e38cc423b2f95095284881ffc73ac38f28f69230fffb7267b2b145c5861a0","tlsh":"06a1a49a16a9701847b0abf1c717481af65af6633781c6c4fb5c65981f7312482b2efc"}],"package_integrity":[{"filename":"bigops-stylelint-35.4.3.tgz","hashes":{"sha1":"40642ff71524109875f4efd774f3975dd29ef80c","sha512_sri":"sha512-IwK00GQPrMfSHBEOgHkMgWpHC9NlKI0+yJah2gw5vVBEyrZSerrTF01/ru2CX/oP67OdQy9gUaOycXx0DZdqtQ=="}}]}}}],"references":[{"type":"PACKAGE","url":"https://www.npmjs.com/package/bigops-stylelint/v/35.4.3"},{"type":"ADVISORY","url":"https://github.com/advisories/GHSA-7ww4-xqcq-3qh5"}],"database_specific":{"malicious-packages-origins":[{"id":"IN-MAL-2026-015547","import_time":"2026-08-05T15:19:57.385887333Z","modified_time":"2026-08-05T15:02:59Z","sha256":"3d8d967bce96a9d30c6af4599e7658d63327067655539f14f2bfd1cd8a663350","source":"amazon-inspector","versions":["35.4.3"]},{"id":"GHSA-7ww4-xqcq-3qh5","import_time":"2026-08-06T00:58:53.318643779Z","modified_time":"2026-08-05T18:38:11Z","ranges":[{"events":[{"introduced":"0"}],"type":"SEMVER"}],"sha256":"4b1a3bf398463cb8ba16ee82e32ff5fb2162b9425b6e9907d439e3a3a8c40a53","source":"ghsa-malware"}]},"credits":[{"name":"Amazon Inspector","contact":["inspector-research@amazon.com"],"type":"FINDER"}]}数据来源:OpenSSF Malicious Packages · Apache-2.0