{"id":"MAL-2026-14299","summary":"Malicious code in gear-composer (npm)","details":"\n---\n_-= Per source details. Do not edit below this line.=-_\n\n## Source: amazon-inspector (f697d2d145e4ade11da0d34433b5f69b46fde8736031c5ffe63af4d2f843eaad)\nThe package ships multiple components consistent with an install-time credential harvest and exfiltration pipeline. scripts/postinstall-agent.mjs is registered as a lifecycle hook and performs host identification and outbound network activity. dist/secretScan/contentScanner.js and dist/secretScan/agentStartupAudit.js implement a secret-scanning path that reads content, decodes/re-encodes it via Buffer.from(..., 'base64'), and issues fetch() calls to huggingface.co endpoints (agentStartupAudit.js lines 490-563). dist/discord/discordRelayUpload.js and its top-level duplicate carry base64 blob handling together with ping and POST-based network operations for uploading collected data to Discord (lines 39, 227, 306, 321, 398, 461, 536). dist/relay/relayServer.js embeds an additional relay/beaconing surface with repeated ping calls. dist/hf/hfCredentials.js decodes base64-embedded credentials at load time (line 50). scripts/encode-deployment.mjs and dist/core/deploymentDefaults.js contain the encode/decode pair used to hide the shipped configuration/credentials. The combination — postinstall-triggered agent, base64-obfuscated deployment defaults and third-party credentials, filesystem/content scanner, and hardcoded relay destinations to Discord and HuggingFace — matches an active credential-exfiltration and covert-relay pattern rather than a normal composer/build tool.\n","modified":"2026-08-19T10:15:12.730941145Z","published":"2026-08-19T09:53:53Z","database_specific":{"malicious-packages-origins":[{"import_time":"2026-08-19T10:11:38.675344143Z","modified_time":"2026-08-19T09:53:53Z","sha256":"f697d2d145e4ade11da0d34433b5f69b46fde8736031c5ffe63af4d2f843eaad","source":"amazon-inspector","versions":["1.0.126"],"id":"IN-MAL-2026-018418"}]},"references":[{"type":"PACKAGE","url":"https://www.npmjs.com/package/gear-composer/v/1.0.126"}],"affected":[{"package":{"name":"gear-composer","ecosystem":"npm","purl":"pkg:npm/gear-composer"},"versions":["1.0.126"],"database_specific":{"indicators":{"evidence_files":[{"sha256":"cbf70b0d8654138a0b4dfcb152824c85fecab500e1a5fade53c2049da4c0dc48","tlsh":"e1f16549b8e7b0100663b5f8861bc8973bdcad07260ed444b35e93956f1f831a3b76e6","path":"dist/core/deploymentDefaults.js"},{"tlsh":"e1f16549b8e7b0100663b5f8861bc8973bdcad07260ed444b35e93956f1f831a3b76e6","path":"dist/deploymentDefaults.js","sha256":"cbf70b0d8654138a0b4dfcb152824c85fecab500e1a5fade53c2049da4c0dc48"},{"tlsh":"67e296fab5f724311162b6698b5bd0057328b147741eeca47a8ca29c9f9c025c2f7fc6","path":"dist/discord/discordRelayUpload.js","sha256":"d48dffc3294eb56409550df2f8ac2b2df71ca1a486f0d45036686bf972e5f3d1"},{"sha256":"debe8ff010dd0e4bec0af85cbd8708ba345158fc103b9fe68eb12b4d68539c19","tlsh":"d4e296fab5f724311162b6698b5bd0057328b147741eeca47a8ca29c9f9c025c2f7fc6","path":"dist/discordRelayUpload.js"},{"tlsh":"6ee184066ef690200177907a912be01576b0703f6ae1d1f2f69ddec9af12c768ae3dc1","path":"dist/hf/hfCredentials.js","sha256":"73498999ff9d587684def3acd7f7852c8577ce9d4d742b373e36261d88e5334d"},{"path":"dist/hfCredentials.js","sha256":"bf0091702bbc62eff2319360ab7103a33fee8f5bfad4e63aa359175285de7f49","tlsh":"cae184062ef6902001779079912be01576b0703f6ae1d5f2f69ddec9af12c768ae3dc1"},{"path":"dist/relay/relayServer.js","sha256":"0c3fbf5c21245202de887790adfc549d0cedfe1cabc090faf27e8fc5ae1a8e55","tlsh":"a093b58a69f360320763f2bd5b5b8001b339d5077558ddd4fa9c8258af8d92883f1be9"},{"sha256":"3cadd8c077bb28c0a5a03ddc83eb12527992d397853cad5e4a9bf82e53bfdfcc","tlsh":"5e93b58a69f360324363f2bd5b5b8001b339d1077558ddd4fa9c8258af9d92883f1be9","path":"dist/relayServer.js"},{"sha256":"a4ebea897ca7712bd57c1c1cb3ffa74c409bbce225195689f6bc63c6d212cb56","tlsh":"a3e2eb9a69f32432826371be5a4f9005f660b427214ce8a47a5cc299ff454b8d3f7fd8","path":"dist/secretScan/agentStartupAudit.js"},{"path":"dist/secretScan/contentScanner.js","sha256":"5f983523fea613c052e726cf94f86c894e72c34261a538e6e6f3999cd76191a5","tlsh":"7212824a6af320514d2330fe1b8b8500b97aa847351cdd28be9c83906f5597c9af7bdc"},{"sha256":"36c301a61abec8b3658aa278f9cdcdfa0edf6409f4eec68449724d68ef222ea8","tlsh":"34b1b70368e9947041fee3d25953b90b7afdf7153302acc5766e46b90b6bc31026be0a","path":"scripts/encode-deployment.mjs"},{"sha256":"9822fa46896aba178c533b4ed1579ec737869984dc44760dc3ad618c39614118","tlsh":"3292e88ce6e71a7606a1e79d7a1f150667a0d1470648e4b4f0dd82887f2d03d83b7ebe","path":"scripts/postinstall-agent.mjs"}],"package_integrity":[{"hashes":{"sha512_sri":"sha512-WS5JTF4Ti9+orj7SmgJmT4c3jn77OmkGXvHQBAdir2OhsevQMMIbrKgaqCRyXHNPN+QCw81AljKb1/AZpoKxrA==","sha1":"36f7de78636829a4f944d7506adea15e6b4cdbed"},"filename":"gear-composer-1.0.126.tgz"}]},"source":"https://github.com/ossf/malicious-packages/blob/main/osv/malicious/npm/gear-composer/MAL-2026-14299.json","cwes":[{"description":"The product contains code that appears to be malicious in nature.","name":"Embedded Malicious Code","cweId":"CWE-506"}]}}],"schema_version":"1.9.0","credits":[{"name":"Amazon Inspector","contact":["inspector-research@amazon.com"],"type":"FINDER"}]}