Malicious code in xapi-lib (npm)
xapi-lib@88.2.3, 88.2.5, 90.2.1, and 90.3.1 describes itself as a package for getting IP location and metadata. Its preinstall hook runs `node index.js` on npm install and requests `https://realwbx.com/ip.php?ip=8.8.8.8` with the hardcoded Authorization value `fa79878bc2cfb48bd5127ae26fb661b1`, which is the same in all four versions and differs from the value in each of the account's other packages. The npm account conx3993 published xapi-lib on 2026-10-15, one of 9 packages from that account between 2026-09-30 and 2026-10-15 whose preinstall hook calls realwbx.com. --- _-= Per source details. Do not edit below this line.=-_ ## Source: amazon-inspector (beac62be73c115f383ea095cc364879294d6c105817d3c0eb6bfb30ce7bcf46c) xapi-lib@88.2.3 declares `preinstall: node index.js` in package.json, and index.js performs an unconditional top-level HTTPS GET to realwbx.com/ip.php (passing `8.8.8.8` and a hardcoded Authorization header) on load. The call fires automatically during `npm install`, sending the installer's source IP to a hardcoded non-publisher endpoint unrelated to any advertised functionality. The package itself is a one-file stub with no library content, so dependency resolution plus the preinstall beacon is the entire effect of installing it. The destination realwbx.com is not a publisher-aligned domain, the request is not caller-configurable, and no documentation discloses the outbound call.
- Products
- xapi-lib
- Affected versions
- 88.2.3, 88.2.5, 90.2.1, 90.3.1
- Fixed versions
- Not specified
- CVEs
- Not specified
- Confirmed fixed CVEs
- Not specified
- Updated in this feed
- 30 Oct 2026, 19:46 UTC · Revision 1
Source evidence
xapi-lib@88.2.3, 88.2.5, 90.2.1, and 90.3.1 describes itself as a package for getting IP location and metadata. Its preinstall hook runs `node index.js` on npm install and requests `https://realwbx.com/ip.php?ip=8.8.8.8` with the hardcoded Authorization value `fa79878bc2cfb48bd5127ae26fb661b1`, which is the same in all four versions and differs from the value in each of the account's other packages. The npm account conx3993 published xapi-lib on 2026-10-15, one of 9 packages from that account between 2026-09-30 and 2026-10-15 whose preinstall hook calls realwbx.com. --- _-= Per source details. Do not edit below this line.=-_ ## Source: amazon-inspector (beac62be73c115f383ea095cc364879294d6c105817d3c0eb6bfb30ce7bcf46c) xapi-lib@88.2.3 declares `preinstall: node index.js` in package.json, and index.js performs an unconditional top-level HTTPS GET to realwbx.com/ip.php (passing `8.8.8.8` and a hardcoded Authorization header) on load. The call fires automatically during `npm install`, sending the installer's source IP to a hardcoded non-publisher endpoint unrelated to any advertised functionality. The package itself is a one-file stub with no library content, so dependency resolution plus the preinstall beacon is the entire effect of installing it. The destination realwbx.com is not a publisher-aligned domain, the request is not caller-configurable, and no documentation discloses the outbound call.
osv:MAL-2026-17896
xapi-lib
Fixed versions: Not specified
Complete source record
{
"id": "7e70029ab0e71fa7067779c8a14165ef7483841f845c646f0d70dd86177cf60e",
"url": "https://osv.dev/vulnerability/MAL-2026-17896",
"method": "structured",
"payload": {
"kind": "advisory",
"title": "Malicious code in xapi-lib (npm)",
"summary": "xapi-lib@88.2.3, 88.2.5, 90.2.1, and 90.3.1 describes itself as a package for getting IP location and metadata. Its preinstall hook runs `node index.js` on npm install and requests `https://realwbx.com/ip.php?ip=8.8.8.8` with the hardcoded Authorization value `fa79878bc2cfb48bd5127ae26fb661b1`, which is the same in all four versions and differs from the value in each of the account's other packages. The npm account conx3993 published xapi-lib on 2026-10-15, one of 9 packages from that account between 2026-09-30 and 2026-10-15 whose preinstall hook calls realwbx.com. --- _-= Per source details. Do not edit below this line.=-_ ## Source: amazon-inspector (beac62be73c115f383ea095cc364879294d6c105817d3c0eb6bfb30ce7bcf46c) xapi-lib@88.2.3 declares `preinstall: node index.js` in package.json, and index.js performs an unconditional top-level HTTPS GET to realwbx.com/ip.php (passing `8.8.8.8` and a hardcoded Authorization header) on load. The call fires automatically during `npm install`, sending the installer's source IP to a hardcoded non-publisher endpoint unrelated to any advertised functionality. The package itself is a one-file stub with no library content, so dependency resolution plus the preinstall beacon is the entire effect of installing it. The destination realwbx.com is not a publisher-aligned domain, the request is not caller-configurable, and no documentation discloses the outbound call.",
"evidence": "osv:MAL-2026-17896",
"products": [
{
"name": {
"value": "xapi-lib",
"evidence": "/affected/0/package/name"
},
"prerequisites": [],
"fixed_versions": [],
"affected_versions": [
{
"value": "88.2.5",
"evidence": "/affected/0/versions"
},
{
"value": "88.2.3",
"evidence": "/affected/0/versions"
},
{
"value": "90.2.1",
"evidence": "/affected/0/versions"
},
{
"value": "90.3.1",
"evidence": "/affected/0/versions"
}
]
}
],
"severity": "unknown",
"structured": {
"id": "MAL-2026-17896",
"aliases": [
"MAL-2026-17896"
],
"affected": [
{
"package": {
"name": "xapi-lib",
"purl": "pkg:npm/xapi-lib",
"ecosystem": "npm"
},
"versions": [
"88.2.5",
"88.2.3",
"90.2.1",
"90.3.1"
],
"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."
}
],
"source": "https://github.com/ossf/malicious-packages/blob/main/osv/malicious/npm/xapi-lib/MAL-2026-17896.json",
"indicators": {
"evidence_files": [
{
"path": "index.js",
"tlsh": "7821ebaa5bf9112107f3fa8d860790072023e05f240eee157a0d53a11f8223d93936f8",
"sha256": "99a601e9bf8688f9f8650528f1da84b349de36f98444bcec2cf4a9012ea2339d"
}
],
"package_integrity": [
{
"hashes": {
"sha1": "32ed607955bc6ec72e8bfcf2b27da5fcca103b09",
"sha512_sri": "sha512-Bf3uldyd5rjG5xrNBaz57wyjchQq9o0RUhkXN0IPIzW3AlG5/GQDMAoAWnDTubX7M6TO8Uyj9h0eG1+M0zsVEQ=="
},
"filename": "xapi-lib-88.2.5.tgz"
}
]
}
}
}
],
"modified": "2026-10-16T07:30:04.930070627Z",
"provider": "osv",
"references": [
"https://www.npmjs.com/package/xapi-lib",
"https://www.npmjs.com/package/xapi-lib/v/88.2.5",
"https://www.npmjs.com/package/xapi-lib/v/88.2.3",
"https://www.npmjs.com/package/xapi-lib/v/90.3.1",
"https://www.npmjs.com/package/xapi-lib/v/90.2.1"
],
"provider_metadata": {
"iocs": {
"urls": [
"https://realwbx.com/ip.php"
],
"files": [
{
"note": "preinstall script: node index.js",
"paths": [
"package.json"
],
"source": "PACKAGE_ARCHIVE",
"digests": {
"sha256": "6b2fcfa860c46ed88f188cc1fab187d43b8a0278691b1711822925f8245c8d19"
}
},
{
"note": "Executed by the preinstall script of xapi-lib@88.2.5.",
"paths": [
"index.js"
],
"source": "PACKAGE_ARCHIVE",
"digests": {
"sha256": "99a601e9bf8688f9f8650528f1da84b349de36f98444bcec2cf4a9012ea2339d"
}
},
{
"note": "preinstall script: node index.js",
"paths": [
"package.json"
],
"source": "PACKAGE_ARCHIVE",
"digests": {
"sha256": "f844ce26df73b3a8958ea7a1d06032a0092f714c3a50108b130989a986270682"
}
},
{
"note": "Executed by the preinstall script of xapi-lib@88.2.3.",
"paths": [
"index.js"
],
"source": "PACKAGE_ARCHIVE",
"digests": {
"sha256": "defcc41c3e9e5d7047e9d57db37086833e9b65319a98fb324f69e87817c103f7"
}
},
{
"note": "preinstall script: node index.js",
"paths": [
"package.json"
],
"source": "PACKAGE_ARCHIVE",
"digests": {
"sha256": "3a74e42c644363219b7e056a212aa44f80417e6112ec0c0172fb53aabefd2ce4"
}
},
{
"note": "Executed by the preinstall script of xapi-lib@90.2.1.",
"paths": [
"index.js"
],
"source": "PACKAGE_ARCHIVE",
"digests": {
"sha256": "e571cff8c883aa4aed6b6319ff72bfc8401575126118df716b848052631383fe"
}
},
{
"note": "preinstall script: node index.js",
"paths": [
"package.json"
],
"source": "PACKAGE_ARCHIVE",
"digests": {
"sha256": "f736035d37903edb04ff8f987ceb364e39d5a5de2897ba3e56e777b4e1eae332"
}
},
{
"note": "Executed by the preinstall script of xapi-lib@90.3.1.",
"paths": [
"index.js"
],
"source": "PACKAGE_ARCHIVE",
"digests": {
"sha256": "58a9969194fd80f080da6082fab45e77fa348b3046ae923a4cb500e0df3b96b2"
}
}
]
},
"malicious-packages-origins": [
{
"id": "IN-MAL-2026-021504",
"sha256": "08fefb7bcc7ef9e212432c91ec73a326965240fdbcb7782e3d2fb61155fe6d45",
"source": "amazon-inspector",
"versions": [
"88.2.5"
],
"import_time": "2026-10-16T07:22:52.427697019Z",
"modified_time": "2026-10-16T06:58:06Z"
},
{
"id": "IN-MAL-2026-021505",
"sha256": "beac62be73c115f383ea095cc364879294d6c105817d3c0eb6bfb30ce7bcf46c",
"source": "amazon-inspector",
"versions": [
"88.2.3"
],
"import_time": "2026-10-16T07:22:52.475260459Z",
"modified_time": "2026-10-16T06:58:14Z"
},
{
"id": "IN-MAL-2026-021502",
"sha256": "c2cad7956f6504f2fefff4ce1a2a3309660ebcc8dd6858f41085f478ad5909ef",
"source": "amazon-inspector",
"versions": [
"90.3.1"
],
"import_time": "2026-10-16T07:22:52.34017146Z",
"modified_time": "2026-10-16T06:57:48Z"
},
{
"id": "IN-MAL-2026-021503",
"sha256": "e82133a7b4558aea71dd4629832347ac615573b581ee941960ab4b0244781779",
"source": "amazon-inspector",
"versions": [
"90.2.1"
],
"import_time": "2026-10-16T07:22:52.395931618Z",
"modified_time": "2026-10-16T06:57:59Z"
}
]
}
},
"related_cves": [],
"security_relevant": true,
"severity_evidence": null
},
"source_id": "core-osv",
"document_id": 338022,
"published_at": "2026-10-15T13:07:26+00:00"
}