Malicious code in @dransay/feature-flags (npm)
@dransay/feature-flags@99.0.0 is a dependency-confusion probe claiming the internal `@dransay/*` namespace, not an identified public package. Its `preinstall` hook runs on npm install as `node beacon.js` and sends a DNS lookup and an HTTPS GET to `db3klhbi6i9hark1kegg174t38h33b6wt.oast.site`, using the package name in the request; npm account `0xamino_hunter` published it on 2026-10-08. --- _-= Per source details. Do not edit below this line.=-_ ## Source: amazon-inspector (cc545bbb96903ee25218d8cab1a7d116d2ceb1ba64a3c929c79e56a6fc8e0585) @dransay/feature-flags@99.0.0 publishes a scoped name on the public npm registry at an inflated version (99.0.0) designed to win semver resolution against any private internal @dransay/* copy. package.json declares a preinstall hook `node beacon.js`; beacon.js unconditionally performs a DNS lookup and HTTPS GET to the hardcoded interactsh callback host db3klhbi6i9hark1kegg174t38h33b6wt.oast.site on every `npm install`, leaking the installer's public source IP, a timestamp, and confirmation that the scoped name resolved from the public registry to a third-party out-of-band interaction collector. The README self-describes the artifact as a probe of DrAnsay build infrastructure; author self-labeling as research does not change the install-time behavior for any environment whose npm resolves @dransay/* publicly.
- Products
- @dransay/feature-flags
- Affected versions
- 99.0.0
- Fixed versions
- Not specified
- CVEs
- Not specified
- Confirmed fixed CVEs
- Not specified
- Updated in this feed
- 30 Oct 2026, 06:02 UTC · Revision 1
Source evidence
Malicious code in @dransay/feature-flags (npm)
core-osv · Original sourcePublished 8 Oct 2026, 07:58 UTC
@dransay/feature-flags@99.0.0 is a dependency-confusion probe claiming the internal `@dransay/*` namespace, not an identified public package. Its `preinstall` hook runs on npm install as `node beacon.js` and sends a DNS lookup and an HTTPS GET to `db3klhbi6i9hark1kegg174t38h33b6wt.oast.site`, using the package name in the request; npm account `0xamino_hunter` published it on 2026-10-08. --- _-= Per source details. Do not edit below this line.=-_ ## Source: amazon-inspector (cc545bbb96903ee25218d8cab1a7d116d2ceb1ba64a3c929c79e56a6fc8e0585) @dransay/feature-flags@99.0.0 publishes a scoped name on the public npm registry at an inflated version (99.0.0) designed to win semver resolution against any private internal @dransay/* copy. package.json declares a preinstall hook `node beacon.js`; beacon.js unconditionally performs a DNS lookup and HTTPS GET to the hardcoded interactsh callback host db3klhbi6i9hark1kegg174t38h33b6wt.oast.site on every `npm install`, leaking the installer's public source IP, a timestamp, and confirmation that the scoped name resolved from the public registry to a third-party out-of-band interaction collector. The README self-describes the artifact as a probe of DrAnsay build infrastructure; author self-labeling as research does not change the install-time behavior for any environment whose npm resolves @dransay/* publicly.
osv:MAL-2026-17696
@dransay/feature-flags
Fixed versions: Not specified
Complete source record
{
"id": "de7950743952711736e32dd2c937104caab2a3171a23e0648e5857a17135335a",
"url": "https://osv.dev/vulnerability/MAL-2026-17696",
"method": "structured",
"payload": {
"kind": "advisory",
"title": "Malicious code in @dransay/feature-flags (npm)",
"summary": "@dransay/feature-flags@99.0.0 is a dependency-confusion probe claiming the internal `@dransay/*` namespace, not an identified public package. Its `preinstall` hook runs on npm install as `node beacon.js` and sends a DNS lookup and an HTTPS GET to `db3klhbi6i9hark1kegg174t38h33b6wt.oast.site`, using the package name in the request; npm account `0xamino_hunter` published it on 2026-10-08. --- _-= Per source details. Do not edit below this line.=-_ ## Source: amazon-inspector (cc545bbb96903ee25218d8cab1a7d116d2ceb1ba64a3c929c79e56a6fc8e0585) @dransay/feature-flags@99.0.0 publishes a scoped name on the public npm registry at an inflated version (99.0.0) designed to win semver resolution against any private internal @dransay/* copy. package.json declares a preinstall hook `node beacon.js`; beacon.js unconditionally performs a DNS lookup and HTTPS GET to the hardcoded interactsh callback host db3klhbi6i9hark1kegg174t38h33b6wt.oast.site on every `npm install`, leaking the installer's public source IP, a timestamp, and confirmation that the scoped name resolved from the public registry to a third-party out-of-band interaction collector. The README self-describes the artifact as a probe of DrAnsay build infrastructure; author self-labeling as research does not change the install-time behavior for any environment whose npm resolves @dransay/* publicly.",
"evidence": "osv:MAL-2026-17696",
"products": [
{
"name": {
"value": "@dransay/feature-flags",
"evidence": "/affected/0/package/name"
},
"prerequisites": [],
"fixed_versions": [],
"affected_versions": [
{
"value": "99.0.0",
"evidence": "/affected/0/versions"
}
]
}
],
"severity": "unknown",
"structured": {
"id": "MAL-2026-17696",
"aliases": [
"MAL-2026-17696"
],
"affected": [
{
"package": {
"name": "@dransay/feature-flags",
"purl": "pkg:npm/%40dransay/feature-flags",
"ecosystem": "npm"
},
"versions": [
"99.0.0"
],
"database_specific": {
"cwes": [
{
"name": "Embedded Malicious Code",
"cweId": "CWE-506",
"description": "The product contains code that appears to be malicious in nature."
},
{
"name": "Embedded Malicious Code",
"cweId": "CWE-506",
"description": "The product contains code that appears to be malicious in nature."
}
],
"source": "https://github.com/ossf/malicious-packages/blob/main/osv/malicious/npm/@dransay/feature-flags/MAL-2026-17696.json",
"indicators": {
"evidence_files": [
{
"path": "beacon.js",
"tlsh": "541165ad4ae42b00b1e9f4a8988e01e94f73d1a8844946c0f1cec3ab5e9347c17674fb",
"sha256": "5ba13afc2e6d6acf3876a0d06bf8e0e81046d1174bbe4c23ca147c313da3df53"
},
{
"path": "package.json",
"tlsh": "7be0f1546f402e3300cd14f11d2c919752f39c6e531c2d4851cb030f536d53553bb19c",
"sha256": "f3a916de7c5f5312d3f7f3668fc348be0594f74cb74942df7b88af81b61a9056"
}
],
"package_integrity": [
{
"hashes": {
"sha1": "fcebaa3f8c486545a35613aa3d4489f11ef3484a",
"sha512_sri": "sha512-42rlCO5zyc1wEX+A5hlFsMwnAbN0YpRFEcWGF3SSvGdZ8YZV7ucO0L7XGv/FORTAV1U1lzyzWlWNF7BkNWUD3A=="
},
"filename": "feature-flags-99.0.0.tgz"
}
]
}
}
}
],
"modified": "2026-10-12T04:45:05.837867768Z",
"provider": "osv",
"references": [
"https://www.npmjs.com/package/@dransay/feature-flags/v/99.0.0",
"https://www.npmjs.com/package/@dransay/feature-flags"
],
"provider_metadata": {
"iocs": {
"urls": [
"https://db3klhbi6i9hark1kegg174t38h33b6wt.oast.site/feature-flags"
],
"files": [
{
"note": "preinstall script: node beacon.js",
"paths": [
"package.json"
],
"source": "PACKAGE_ARCHIVE",
"digests": {
"sha256": "f3a916de7c5f5312d3f7f3668fc348be0594f74cb74942df7b88af81b61a9056"
}
},
{
"note": "Executed by the preinstall script of @dransay/feature-flags@99.0.0.",
"paths": [
"beacon.js"
],
"source": "PACKAGE_ARCHIVE",
"digests": {
"sha256": "5ba13afc2e6d6acf3876a0d06bf8e0e81046d1174bbe4c23ca147c313da3df53"
}
}
],
"domains": [
"db3klhbi6i9hark1kegg174t38h33b6wt.oast.site"
]
},
"malicious-packages-origins": [
{
"id": "IN-MAL-2026-021215",
"sha256": "cc545bbb96903ee25218d8cab1a7d116d2ceb1ba64a3c929c79e56a6fc8e0585",
"source": "amazon-inspector",
"versions": [
"99.0.0"
],
"import_time": "2026-10-08T17:17:19.429819003Z",
"modified_time": "2026-10-08T16:54:29Z"
}
]
}
},
"related_cves": [],
"security_relevant": true,
"severity_evidence": null
},
"source_id": "core-osv",
"document_id": 298560,
"published_at": "2026-10-08T07:58:52+00:00"
}