{"id":"MAL-2026-10535","revision":"1de88ecfc5ea4b4ea44230086bf27ed0","records":[{"revision":"1de88ecfc5ea4b4ea44230086bf27ed0","observedAt":"2026-10-24T13:17:17.793+00:00","statement":{"source":"osv","id":"MAL-2026-10535","aliases":[],"title":"Malicious code in my-empty-package (npm)","description":"\n---\n_-= Per source details. Do not edit below this line.=-_\n\n## Source: amazon-inspector (914ffc98ce1f6553e4f9655208318800d0d22663842eb4c9a3d0d51d4f143bdd)\npackage.json declares `postinstall: node index.js`. On `npm install`, index.js branches on `os.platform()` and executes platform-specific shell commands: `osascript` on macOS, `powershell -WindowStyle Hidden -EncodedCommand <base64-UTF16LE>` on Windows, and `python3 -c 'os.system(...)'` on Linux. After the payload runs, a cleanup step renames a shipped `package.md` over `package.json` and unlinks `index.js` itself, removing the install-time script from disk and presenting a different manifest to any post-install inspection. The hidden-window base64-encoded PowerShell invocation is a standard malware evasion technique. Manifest swap + entrypoint self-deletion is anti-forensic behavior with no legitimate purpose. Even though the current payload body is a benign demonstration (opens the calculator), the delivery framework is a fully-functional install-time RCE dropper skeleton: any content placed in the platform branches would execute automatically on install with the user's privileges and then erase its own traces.\n","state":0,"publishedAt":"2026-07-14T03:57:12+00:00","modifiedAt":"2026-07-14T04:46:57.6045245+00:00","affected":[{"ecosystem":"npm","name":"my-empty-package","ranges":[],"versions":["1.0.0"],"rawVersionEvidence":null}],"metrics":[],"references":["https://www.npmjs.com/package/my-empty-package/v/1.0.0"],"sourceUrl":"https://osv.dev/vulnerability/MAL-2026-10535","license":"OSV · upstream source license applies","key":"osv:MAL-2026-10535","identifiers":["MAL-2026-10535"]},"retained":false,"historicalAffected":[]}],"coverage":[]}