{"dataType":"CVE_RECORD","dataVersion":"1.0","cveMetadata":{"cveId":"GCVE-110-OSM-2026-14570","assignerOrgId":"","assignerShortName":"Vulnetix","state":"PUBLISHED","datePublished":"2026-11-03T05:50:14Z","dateUpdated":"2026-11-04T12:08:03Z","dateReserved":""},"containers":{"cna":{"providerMetadata":null,"title":"","descriptions":[{"lang":"en","value":"On require(), the package's top-level state.initialize() writes shell integration files into ~/.config/workspace-context (init.zsh,.zshrc, session-runtime.js, presentation.js, channel.json) and spawns a detached, unref'd Node worker that launches `/bin/zsh -i` with ZDOTDIR pointed at that directory. The injected init.zsh installs a zsh precmd hook that re-executes a sibling script on every prompt, giving a persistent shell foothold triggered by merely importing the module. session.js fetches http://150.136.8.159:8080/workspace/profile over plaintext HTTP from a hardcoded bare IP, appending?username=\u003cUSER\u003e read from env.USER/LOGNAME, writes the response to session-profile.json, and presentation.js injects fields from that remote JSON directly into the user's live zsh PROMPT via %F{tone}text%f substitution — remote attacker-controlled content is rendered through zsh prompt expansion on every command. Sensitive API names are reassembled at runtime from string fragments to defeat static analysis: ['bin','ding'].join(''), ['sp','awn','_','sync'].join(''), ['sp','awn'].join(''), ['child','_process'].join(''), ['fe','tch'].join(''), and the env-var name ['WORKSPACE','_CONTEXT','_CHANNEL'].join(''). Access to child_process/fetch is funneled through Reflect.get/Reflect.apply with no plain literal references anywhere. refreshShellIntegration obtains the internal process.binding('spawn_sync') handle to execute `node lib/sync.js`, bypassing the public child_process module. The package has no legitimate need, consistent with its stated purpose, to spawn an interactive shell at import time, hook zsh precmd, or fetch remote content from a bare IP over cleartext HTTP.\n\nENTRY\n  index.js (main: index.js)\n\nPERSISTENCE\n  - Startup Persistence in index.js: \".profile\"\n  - Startup Persistence in lib/session-worker.js: \".profile\"\n  - Startup Persistence in lib/state.js: \".bashrc\"\n  - Startup Persistence in lib/sync.js: \".profile\"\n\nEXFIL\n  - Data Encoding for Exfiltration in lib/state.js: \"encodeURIComponent(identity)}` : source\"\n\nADDITIONAL FINDINGS\n  - Silent Process Execution in lib/state.js: \"stdio: 'ignore'\"\n  - Publisher Has Other Malicious Packages\n  - Publisher Shows Burner-Account Pattern\n\nPAYLOAD FILES\n  lib/state.js","supportingMedia":null}],"references":[{"url":"https://opensourcemalware.com/threats/176956f4-2b49-45b6-b56c-3fff6569758a","name":"Malicious npm package: @atedone/workspace-context","tags":["advisory"]},{"url":"https://osv.dev/vulnerability/MAL-2026-18517","name":"","tags":["advisory"]},{"url":"https://registry.npmjs.org/@atedone/workspace-context","name":"","tags":["vendor"]}],"metrics":[{"format":"CVSS_V3","scenarios":null,"cvssV2_0":null,"cvssV3_0":null,"cvssV3_1":{"version":"3.1","vectorString":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H","baseScore":8.8,"baseSeverity":"HIGH"},"cvssV4_0":null,"other":null}],"problemTypes":[{"descriptions":[{"lang":"en","description":"Embedded Malicious Code","cweId":"CWE-506","type":"CWE"}]}],"affected":[{"vendor":"unknown","product":"@atedone/workspace-context","collectionURL":"https://registry.npmjs.org","packageName":"@atedone/workspace-context","repo":"","defaultStatus":"affected","versions":[{"version":"all","status":"affected","versionType":"","lessThan":"","lessThanOrEqual":"","changes":null}],"cpes":null,"modules":null,"programFiles":null,"platforms":null}],"cpeApplicability":null,"rejectedReasons":null,"replacedBy":null,"x_vulnetix_aliases":{"direct":["MAL-2026-18517"]}},"adp":null}}