{"id":"MAL-2026-18278","kind":"package","aliases":["MAL-2026-18278"],"related":[],"title":"Malicious code in @factoryz/apollo (npm)","description":"---\n_-= Per source details. Do not edit below this line.=-_\n\n## Source: amazon-inspector (5adaa62818c76a10cbf0b536a6854633e24a73028c803fc597c5b5ec1d78b8ad)\nThe package ships only an empty stub (`module.exports = {}`) and a manifest whose sole dependency `ltidisafe` is resolved from a hardcoded off-registry HTTPS URL (`https://ltidi.storage.googleapis.com/depenconf/ltidisafe-3.8.7.tgz`) rather than a registry version range. `npm install @factoryz/apollo` fetches whatever bytes that URL returns and installs them, executing any lifecycle scripts (preinstall/install/postinstall) contained in the fetched tarball. There is no version pin, no integrity (`sshasum`) check, and no publisher binding — the host controller can swap the tarball contents at any time. The version number `99.9.1` is implausibly high for a package whose shipped code is a one-line stub, consistent with a dependency-confusion / resolution-winning shape. The lure package itself contains no other logic; the manifest IS the payload.","summary":null,"severity":"critical","cvss":null,"epss":null,"exploited":false,"exploited_at":null,"products":[{"name":"@factoryz/apollo","fixed":[],"affected":"= 99.9.1","ecosystem":"npm"}],"ecosystems":["npm"],"tags":["malicious","package"],"not_affected_if":[],"how_to_check":null,"fix":null,"status":"open","published_at":"2026-10-25T15:05:42+00:00","first_seen_at":"2026-10-26T20:51:52+00:00","triaged_at":"2026-10-26T20:53:36+00:00","updated_at":"2026-10-26T21:05:48+00:00","category":"package","confidence":null,"triage":null,"analyst_status":null,"analyst_note":null,"search":"'-18278':8A,11A '-2026':7A,10A '/depenconf/ltidisafe-3.8.7.tgz':56C '5adaa62818c76a10cbf0b536a6854633e24a73028c803fc597c5b5ec1d78b8ad':28C '99.9.1':112C 'amazon':26C 'amazon-inspector':25C 'bind':97C 'byte':68C 'check':93C 'code':2A,121C 'confus':133C 'consist':128C 'contain':80C,142C 'content':105C 'control':100C 'depend':42C,132C 'dependency-confus':131C 'detail':17C 'edit':20C 'empti':34C 'execut':75C 'factoryz/apollo':4A,12A,65C 'fetch':66C,83C 'hardcod':48C 'high':115C 'host':99C 'https':52C 'implaus':114C 'inspector':27C 'instal':64C,73C 'integr':91C 'lifecycl':77C 'line':23C,126C 'logic':145C 'ltidi.storage.googleapis.com':55C 'ltidi.storage.googleapis.com/depenconf/ltidisafe-3.8.7.tgz':54C 'ltidisaf':43C 'lure':139C 'mal':6A,9A 'malici':1A,13B 'manifest':39C,147C 'module.exports':36C 'npm':5A,63C 'number':111C 'off-registri':49C 'one':125C 'one-lin':124C 'packag':14B,30C,118C,140C 'payload':150C 'per':15C 'pin':89C 'preinstall/install/postinstall':79C 'publish':96C 'rang':62C 'rather':57C 'registri':51C,60C 'resolut':135C 'resolution-win':134C 'resolv':45C 'return':71C 'script':78C 'shape':137C 'ship':31C,120C 'sole':41C 'sourc':16C,24C 'sshasum':92C 'stub':35C,127C 'swap':102C 'tarbal':84C,104C 'time':108C 'url':53C,70C 'version':61C,88C,110C 'whatev':67C 'whose':40C,119C 'win':136C","nicknames":[],"mitigations":[],"who_affected":null,"tier":"B","verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-25T15:05:42+00:00","kev":null,"cvss_vector":null,"cvss_by":null,"poc_count":0,"sources":[{"source":"osv-malicious","external_id":"MAL-2026-18278","url":"https://osv.dev/vulnerability/MAL-2026-18278","severity":"critical","published_at":"2026-10-25T15:05:42+00:00","modified_at":"2026-10-25T15:30:05+00:00","first_seen_at":"2026-10-26T20:51:52+00:00","fetched_at":"2026-10-26T20:51:52+00:00","note":null}],"documents":[],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}