Your RSA-2048 keys break in 2030. Find every one of them before attackers do.
Malicious package

class-synthnpm

Malicious code in class-synth (npm) Remove it immediately and rotate any exposed credentials.

MAL-2026-5730
Immediate action
Remove the package, then rotate any secrets the build/runtime could reach.
npm uninstall class-synth

What this malware does

class-synth is advertised as a small class/style/date utility library, but its main entry (dist/index.js) contains a hidden top-level async IIFE (__init) that fires whenever the package is required or imported. The IIFE dynamically imports node:fs, node:path, node:child_process, node:crypto, and node:https using base64-encoded module names joined at runtime to evade string scanners, and acquires process indirectly via new Function('return typeof process!== "undefined"? process: null;'). It then recursively walks process.cwd() looking for any .css file containing an @sri-hash: marker, base64-decodes that marker, and AES-256-CBC-decrypts it with a hardcoded key (split across an array of hex chunks ['a7b80b01','7e76fb52','fa527621','f76027d2','19014dfc','a59b49ae','3db97ff3','ab4a72fa']) to recover an attacker-controlled URL. The decrypted URL is fetched over HTTPS and the response body is piped directly into child_process.spawn('node', ['-'], {windowsHide: true, stdio: ['pipe','ignore','ignore'], detached: true}), so attacker-supplied JavaScript executes in the developer/CI Node process with no on-disk artifact, suppressed stdio, and a detached/unref'd child. The bundle is padded with ~750 decoy near-duplicate exports (isWithinBoundary1..200, applyPreset1..150, createSequenceStep1..250, mapOperation1..250, checkConstraint1..250) to bury the dropper near the end of the file. The C2 URL is delivered out-of-band via a planted.css file, which defeats URL-based scanning of the package itself. The combination of base64-hidden Node built-ins, split/encrypted C2 location, indirect process access, detached stdin-piped code execution, and large-scale decoy padding leaves no plausible benign reading.

Malicious versions

8 flagged
1.0.21.0.31.0.41.0.51.0.61.0.71.0.81.0.9

Indicators of compromise (SHA-256)

1aa63407d7400b4819d0739dedad0a32d9ae29b18509693c2e8763cf30275271
cddea7ee0ae2ce582b944e02750fe4ef3628ffb98035f2c09f55add30b22c127
d3739061aa7c97593fe816a49960580ab7029e83063d6d64039c1e5a8e8184af
3fe05a486e4cce2e9eb36558714ff75d3a7ff7db300c46095087db274451ed7d
5208740230d7c6e9e8e5f32d1ebab45afc0154359e84d4942ecdb6e46f0f9288
6ea0e042a314a56ca71b97cf1c7a89d077248da659a89d33f4bc8799eda73b06
64df17fa107b8703f469a612dfdc6c03dbdea562847569034c97ae29ed4f636e
92df67dd5d501d62afce26625625d6b62f34cf568f40ae0d8f0c3bd070cfe7e5
211ba697cc519cd1336ef57b17fddf0406cb1f574f96f9bde936b0a49c789aa7
d5cff2f39d67bd1b289dd662764985194331c02ac680a57a69df36343fd6cc1a
db93faf02c8e1d82ad4e6016c8bdff19e3d6373e2dea7b121f0475783fccbbf8
efebe9567f48ade64190acee35e050f62a1c604c4077861d248ed214bf723d02
4aba4e1c5927ad7b034a6fefab706397fd40df248bffb3fe43c2f4f3421bd89b
60238ce3fd8e5b43c795ab1c8305423e42c8e382d1a20bd470b34525034362de
9fabcad393dcfe529708719bf7be0104fe2060900d55055eac9d2e676c1f6a40
abb17afb17a74e6749e7e40905ad4963813c98bd5d4badf0a5f42ab44367f7a4

Frequently asked questions

No. class-synth on npm has been identified as a malicious package (versions 1.0.2, 1.0.3, 1.0.4, 1.0.5, 1.0.6, 1.0.7, 1.0.8, 1.0.9 flagged). It should be removed immediately — do not install or keep it in your dependency tree.

Campaign

IN-MAL-2026-006325IN-MAL-2026-006335IN-MAL-2026-006324IN-MAL-2026-006333IN-MAL-2026-006337IN-MAL-2026-006338IN-MAL-2026-006328IN-MAL-2026-006336IN-MAL-2026-006332IN-MAL-2026-006334IN-MAL-2026-006323IN-MAL-2026-006329IN-MAL-2026-006330IN-MAL-2026-006327IN-MAL-2026-006331IN-MAL-2026-006326

References

Credits

  • Amazon Inspector · finder

Scan your dependencies

O3 Security blocks malicious packages like this at install time and in CI.

Supply-chain protection
class-synth (npm) malicious package — MAL-2026-5730 | O3 Security