{"items":[{"id":"NVI-00011007","kind":"supply_chain_event","title":"Malicious code in @inpeek/odata (npm)","revision":1,"unknowns":["Customer inventory, deployment, reachability and exploitation have not been inspected."],"lifecycle":"active","identifiers":["GHSA-wffh-h964-cp5q"],"plain_summary":"GitHub lists this malware advisory for @inpeek/odata, @inpeek/odata, @inpeek/odata, @inpeek/odata. Published version ranges and source prerequisites are shown below; this is not an inspection of a visitor’s application.","review_status":"source_listed","control_topics":[],"public_actions":[{"summary":"Identify the exact component and deployed version, examine the linked publisher’s conditions, and retain evidence of any mitigation.","source_ids":["sr-8c122c8fd163a1152160ed649574994a"],"action_type":"investigate","limitations":"Confirm current vendor support, compatibility and deployment evidence. This report has not tested a fix in your system.","current_supported_target":null}],"schema_version":"1.1.0","source_metrics":[],"why_it_matters":"Published affected context helps an owner decide what evidence to gather. This report has not examined your application.","related_sources":[{"id":"sr-8c122c8fd163a1152160ed649574994a","url":"https://github.com/advisories/GHSA-wffh-h964-cp5q","basis":"vendor_advisory","notes":"GitHub Advisory Database; CC-BY-4.0. Each advisory links its original attribution. Null normalizes fields.","title":"GHSA-wffh-h964-cp5q","publisher":"GitHub Advisory Database","observed_at":"2026-10-31T23:13:05.881Z"}],"affected_context":[{"certainty":"source_listed","source_ids":["sr-8c122c8fd163a1152160ed649574994a"],"technology":"@inpeek/odata","known_exclusions":[],"conditions_summary":"## Source: amazon-inspector (dad085b4b3e089d6a6d4e6812c66a8b45f10d40bc4ab39ea7bd0ce850d17ed4b)\n@inpeek/odata@99.99.100 is a dependency-confusion placeholder published to the public npm registry on the unregistered @inpeek scope with an inflated version (99.99.100) designed to outrank any internal release of the same name. The package.json declares a postinstall lifecycle hook that executes ping.js on `npm install`. ping.js performs an unconditional HTTPS GET to the hardcoded collector URL https://webhook.site/bec9d4b2-8f49-451e-84be-2681cb91ebf2, passing the installer's hostname (os.hostname()), platform (os.platform()), and Node.js version (process.version) as query parameters. index.js throws on require, so any accidental consumer breaks loudly after the postinstall beacon has already fired. The package self-labels as a bug-bounty research placeholder, but the install-time dataflow — automatic transmission of installer host identifiers to a third-party collector the installer did not opt into — is the dependency-confusion exploitation shape and reaches any installer whose tooling resolves @inpeek/* from the public registry.\n\n---\n\nCredit: [OpenSSF](https://github.com/ossf/maliciou","public_affected_ranges":["= 99.99.102"]},{"certainty":"source_listed","source_ids":["sr-8c122c8fd163a1152160ed649574994a"],"technology":"@inpeek/odata","known_exclusions":[],"conditions_summary":"## Source: amazon-inspector (dad085b4b3e089d6a6d4e6812c66a8b45f10d40bc4ab39ea7bd0ce850d17ed4b)\n@inpeek/odata@99.99.100 is a dependency-confusion placeholder published to the public npm registry on the unregistered @inpeek scope with an inflated version (99.99.100) designed to outrank any internal release of the same name. The package.json declares a postinstall lifecycle hook that executes ping.js on `npm install`. ping.js performs an unconditional HTTPS GET to the hardcoded collector URL https://webhook.site/bec9d4b2-8f49-451e-84be-2681cb91ebf2, passing the installer's hostname (os.hostname()), platform (os.platform()), and Node.js version (process.version) as query parameters. index.js throws on require, so any accidental consumer breaks loudly after the postinstall beacon has already fired. The package self-labels as a bug-bounty research placeholder, but the install-time dataflow — automatic transmission of installer host identifiers to a third-party collector the installer did not opt into — is the dependency-confusion exploitation shape and reaches any installer whose tooling resolves @inpeek/* from the public registry.\n\n---\n\nCredit: [OpenSSF](https://github.com/ossf/maliciou","public_affected_ranges":["= 99.99.100"]},{"certainty":"source_listed","source_ids":["sr-8c122c8fd163a1152160ed649574994a"],"technology":"@inpeek/odata","known_exclusions":[],"conditions_summary":"## Source: amazon-inspector (dad085b4b3e089d6a6d4e6812c66a8b45f10d40bc4ab39ea7bd0ce850d17ed4b)\n@inpeek/odata@99.99.100 is a dependency-confusion placeholder published to the public npm registry on the unregistered @inpeek scope with an inflated version (99.99.100) designed to outrank any internal release of the same name. The package.json declares a postinstall lifecycle hook that executes ping.js on `npm install`. ping.js performs an unconditional HTTPS GET to the hardcoded collector URL https://webhook.site/bec9d4b2-8f49-451e-84be-2681cb91ebf2, passing the installer's hostname (os.hostname()), platform (os.platform()), and Node.js version (process.version) as query parameters. index.js throws on require, so any accidental consumer breaks loudly after the postinstall beacon has already fired. The package self-labels as a bug-bounty research placeholder, but the install-time dataflow — automatic transmission of installer host identifiers to a third-party collector the installer did not opt into — is the dependency-confusion exploitation shape and reaches any installer whose tooling resolves @inpeek/* from the public registry.\n\n---\n\nCredit: [OpenSSF](https://github.com/ossf/maliciou","public_affected_ranges":["= 99.99.99"]},{"certainty":"source_listed","source_ids":["sr-8c122c8fd163a1152160ed649574994a"],"technology":"@inpeek/odata","known_exclusions":[],"conditions_summary":"## Source: amazon-inspector (dad085b4b3e089d6a6d4e6812c66a8b45f10d40bc4ab39ea7bd0ce850d17ed4b)\n@inpeek/odata@99.99.100 is a dependency-confusion placeholder published to the public npm registry on the unregistered @inpeek scope with an inflated version (99.99.100) designed to outrank any internal release of the same name. The package.json declares a postinstall lifecycle hook that executes ping.js on `npm install`. ping.js performs an unconditional HTTPS GET to the hardcoded collector URL https://webhook.site/bec9d4b2-8f49-451e-84be-2681cb91ebf2, passing the installer's hostname (os.hostname()), platform (os.platform()), and Node.js version (process.version) as query parameters. index.js throws on require, so any accidental consumer breaks loudly after the postinstall beacon has already fired. The package self-labels as a bug-bounty research placeholder, but the install-time dataflow — automatic transmission of installer host identifiers to a third-party collector the installer did not opt into — is the dependency-confusion exploitation shape and reaches any installer whose tooling resolves @inpeek/* from the public registry.\n\n---\n\nCredit: [OpenSSF](https://github.com/ossf/maliciou","public_affected_ranges":["= 99.99.101"]}],"null_published_at":"2026-10-31T23:18:22.422Z","source_updated_at":"2026-10-05T06:30:32.000Z","source_disclosed_at":"2026-10-05T06:30:29.000Z","is_synthetic_fixture":false,"null_last_reviewed_at":null,"public_change_summary":"First indexed by Null; source disclosure date is shown separately.","null_first_observed_at":"2026-10-31T23:13:05.881Z"}],"next_cursor":null,"snapshot_revision":"40769"}