Malicious code in @grabcad/preferences-client (npm)
--- _-= Per source details. Do not edit below this line.=-_ ## Source: amazon-inspector (c846a3e9766d663572fb4d716588823020e219af5c1fb75793661c5c87627ba5) The package presents itself as a 'Compatibility shim' under the @grabcad scope and exports a Proxy that returns no-op functions for any property access, allowing builds that import the real @grabcad/preferences-client to succeed. The main entry invokes require('./beacon.cjs').fire() at import time, and package.json wires the same beacon into a postinstall lifecycle script. beacon.cjs POSTs a payload containing the package name, os.hostname(), the install path, process.cwd(), and the Node version to the hardcoded plain-HTTP endpoint http://185.158.107.175:8787/_ah/dc. The destination is a bare IPv4 on a non-standard port with no relationship to any legitimate publisher infrastructure; the @grabcad scope belongs to a known vendor and the public registry entry is a stub whose only functional effect is the beacon. This is the canonical dependency-confusion reconnaissance pattern: a public squat under an internal/private scope that fires on install and on require to disclose internal hostnames and build paths to an attacker-controlled collector, establishing feasibility for a follow-on payload against installers whose resolver pulls the public package instead of the internal one. ## Source: ghsa-malware (a82ed4dbc46827de73b0ea395df43cb2572eab547dc0decc3360973b848ac66e) Any computer that has this package installed or running shou
- Products
- @grabcad/preferences-client
- Affected versions
- 0.0.1, 1.0.0, 1.1.0, 2.0.0, 3.0.0
- Fixed versions
- Not specified
- CVEs
- Not specified
- Confirmed fixed CVEs
- Not specified
- Updated in this feed
- 1 Nov 2026, 10:35 UTC · Revision 1
Source evidence
Malicious code in @grabcad/preferences-client (npm)
core-osv · Original sourcePublished 23 Oct 2026, 02:05 UTC
--- _-= Per source details. Do not edit below this line.=-_ ## Source: amazon-inspector (c846a3e9766d663572fb4d716588823020e219af5c1fb75793661c5c87627ba5) The package presents itself as a 'Compatibility shim' under the @grabcad scope and exports a Proxy that returns no-op functions for any property access, allowing builds that import the real @grabcad/preferences-client to succeed. The main entry invokes require('./beacon.cjs').fire() at import time, and package.json wires the same beacon into a postinstall lifecycle script. beacon.cjs POSTs a payload containing the package name, os.hostname(), the install path, process.cwd(), and the Node version to the hardcoded plain-HTTP endpoint http://185.158.107.175:8787/_ah/dc. The destination is a bare IPv4 on a non-standard port with no relationship to any legitimate publisher infrastructure; the @grabcad scope belongs to a known vendor and the public registry entry is a stub whose only functional effect is the beacon. This is the canonical dependency-confusion reconnaissance pattern: a public squat under an internal/private scope that fires on install and on require to disclose internal hostnames and build paths to an attacker-controlled collector, establishing feasibility for a follow-on payload against installers whose resolver pulls the public package instead of the internal one. ## Source: ghsa-malware (a82ed4dbc46827de73b0ea395df43cb2572eab547dc0decc3360973b848ac66e) Any computer that has this package installed or running shou
osv:MAL-2026-18216
@grabcad/preferences-client
Fixed versions: Not specified
Complete source record
{
"id": "ba50b6fc76452a62c6f299639d302f1587327646baeb18b40142492f5e592d3f",
"url": "https://osv.dev/vulnerability/MAL-2026-18216",
"method": "structured",
"payload": {
"kind": "advisory",
"title": "Malicious code in @grabcad/preferences-client (npm)",
"summary": "--- _-= Per source details. Do not edit below this line.=-_ ## Source: amazon-inspector (c846a3e9766d663572fb4d716588823020e219af5c1fb75793661c5c87627ba5) The package presents itself as a 'Compatibility shim' under the @grabcad scope and exports a Proxy that returns no-op functions for any property access, allowing builds that import the real @grabcad/preferences-client to succeed. The main entry invokes require('./beacon.cjs').fire() at import time, and package.json wires the same beacon into a postinstall lifecycle script. beacon.cjs POSTs a payload containing the package name, os.hostname(), the install path, process.cwd(), and the Node version to the hardcoded plain-HTTP endpoint http://185.158.107.175:8787/_ah/dc. The destination is a bare IPv4 on a non-standard port with no relationship to any legitimate publisher infrastructure; the @grabcad scope belongs to a known vendor and the public registry entry is a stub whose only functional effect is the beacon. This is the canonical dependency-confusion reconnaissance pattern: a public squat under an internal/private scope that fires on install and on require to disclose internal hostnames and build paths to an attacker-controlled collector, establishing feasibility for a follow-on payload against installers whose resolver pulls the public package instead of the internal one. ## Source: ghsa-malware (a82ed4dbc46827de73b0ea395df43cb2572eab547dc0decc3360973b848ac66e) Any computer that has this package installed or running shou",
"evidence": "osv:MAL-2026-18216",
"products": [
{
"name": {
"value": "@grabcad/preferences-client",
"evidence": "/affected/0/package/name"
},
"prerequisites": [],
"fixed_versions": [],
"affected_versions": [
{
"value": "0.0.1",
"evidence": "/affected/0/versions"
},
{
"value": "3.0.0",
"evidence": "/affected/0/versions"
},
{
"value": "2.0.0",
"evidence": "/affected/0/versions"
},
{
"value": "1.1.0",
"evidence": "/affected/0/versions"
},
{
"value": "1.0.0",
"evidence": "/affected/0/versions"
}
]
}
],
"severity": "unknown",
"structured": {
"id": "MAL-2026-18216",
"aliases": [
"GHSA-mfh5-wvcp-2v6v",
"MAL-2026-18216"
],
"affected": [
{
"ranges": [
{
"type": "SEMVER",
"events": [
{
"introduced": "0"
}
]
}
],
"package": {
"name": "@grabcad/preferences-client",
"purl": "pkg:npm/%40grabcad/preferences-client",
"ecosystem": "npm"
},
"versions": [
"0.0.1",
"3.0.0",
"2.0.0",
"1.1.0",
"1.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."
},
{
"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."
},
{
"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/@grabcad/preferences-client/MAL-2026-18216.json",
"indicators": {
"evidence_files": [
{
"path": "beacon.cjs",
"tlsh": "423161eba8e1a048aaa67098c54f0509b27bf0079401ab50f95c82959f6197c33fa8dc",
"sha256": "4842aa70534949cc24f48cccc2c521670364d70fa2e3863066a1e994a6e0ff50"
},
{
"path": "index.js",
"tlsh": "2201d0d7225661b10b5221a4978f43c4a3b99d74027941d0d84a9226365108c463b8ee",
"sha256": "a86a4da763bbb34c16f361abe7aab66d5df591b66867ac8160041f932159b08d"
}
],
"package_integrity": [
{
"hashes": {
"sha1": "a7bbd9d1db282693dd2d4589f2145caa4dd08232",
"sha512_sri": "sha512-UWBdobnNLdcjmUi72pIcybkMfKzsNRTwV1LELQauNVhJ8y0jzDvwIDAd54TJeEfAJN1iwzSf9wFO5Qx1DXOM5Q=="
},
"filename": "preferences-client-0.0.1.tgz"
}
]
}
}
}
],
"modified": "2026-10-26T06:00:04.231424928Z",
"provider": "osv",
"references": [
"https://github.com/advisories/GHSA-mfh5-wvcp-2v6v",
"https://www.npmjs.com/package/@grabcad/preferences-client/v/0.0.1",
"https://www.npmjs.com/package/@grabcad/preferences-client/v/3.0.0",
"https://www.npmjs.com/package/@grabcad/preferences-client/v/2.0.0",
"https://www.npmjs.com/package/@grabcad/preferences-client/v/1.1.0",
"https://www.npmjs.com/package/@grabcad/preferences-client/v/1.0.0"
],
"provider_metadata": {
"malicious-packages-origins": [
{
"id": "GHSA-mfh5-wvcp-2v6v",
"ranges": [
{
"type": "SEMVER",
"events": [
{
"introduced": "0"
}
]
}
],
"sha256": "a82ed4dbc46827de73b0ea395df43cb2572eab547dc0decc3360973b848ac66e",
"source": "ghsa-malware",
"import_time": "2026-10-23T02:36:25.384430919Z",
"modified_time": "2026-10-23T02:05:20Z"
},
{
"id": "IN-MAL-2026-021627",
"sha256": "3c4e3941ac5d178f161937407f54a52f5121ae79b8a539b3d718974592f672b8",
"source": "amazon-inspector",
"versions": [
"0.0.1"
],
"import_time": "2026-10-23T20:18:05.521859915Z",
"modified_time": "2026-10-23T19:53:46Z"
},
{
"id": "IN-MAL-2026-021625",
"sha256": "86b1e02c12c8101b88a0c4f114297b716a3593a7a12601705d3496f6422420f0",
"source": "amazon-inspector",
"versions": [
"3.0.0"
],
"import_time": "2026-10-23T20:18:05.373682403Z",
"modified_time": "2026-10-23T19:53:32Z"
},
{
"id": "IN-MAL-2026-021624",
"sha256": "c846a3e9766d663572fb4d716588823020e219af5c1fb75793661c5c87627ba5",
"source": "amazon-inspector",
"versions": [
"2.0.0"
],
"import_time": "2026-10-23T20:18:05.322574568Z",
"modified_time": "2026-10-23T19:53:24Z"
},
{
"id": "IN-MAL-2026-021626",
"sha256": "07817714eb1aa6844db07c06e63e755446398478522bb6f9e455eea3fabcfa93",
"source": "amazon-inspector",
"versions": [
"1.1.0"
],
"import_time": "2026-10-23T20:18:05.452830441Z",
"modified_time": "2026-10-23T19:53:40Z"
},
{
"id": "IN-MAL-2026-021716",
"sha256": "9830cae60a978d6ecb1930dd60443a1b87f08a63f630aa5aaa24fa343d42ccee",
"source": "amazon-inspector",
"versions": [
"1.0.0"
],
"import_time": "2026-10-26T05:46:52.007250168Z",
"modified_time": "2026-10-26T05:30:11Z"
}
]
}
},
"related_cves": [],
"security_relevant": true,
"severity_evidence": null
},
"source_id": "core-osv",
"document_id": 446728,
"published_at": "2026-10-23T02:05:19+00:00"
}