mal-2026-15557
Vulnerability from ossf_malicious_packages
-= Per source details. Do not edit below this line.=-
Source: amazon-inspector (6e8426c0e4e80e0bd9839d8517e060bd923775b8a3e100aab57e18b4f47c970e)
On require('mfacord'), index.js loads lib/cache.js, which on win32 decodes a hardcoded URL (https://limbomail.com/api/attachment/r_Ea6rT_kGfT.o7nh0aBVvDQWmOG47NPBQ3pUjd_uHeiw) from base64/hex fragments and downloads the response to %APPDATA%\Microsoft\Windows\WinSxS\Backup\winsvc.js, then launches it via a generated wsvc.vbs invoked through wscript.exe spawning node.exe. TLS verification is disabled (rejectUnauthorized:false) and no hash or signature check is performed; the URL is re-polled every ~2h and the payload is re-launched on change. lib/totp.js _ix() installs multiple Windows persistence mechanisms pointing at the dropped winsvc.js: an HKCU\Software\Microsoft\Windows\CurrentVersion\Run value 'WinSvcHost', an HKCU\Environment 'UserInitMprLogonScript' logon script, a scheduled task at \Microsoft\Windows\Shell\WinSvcHost with an onlogon trigger, and a wsvc.vbs dropped into the user's Startup folder, with files marked hidden+system under Microsoft-lookalike names. Sensitive identifiers — 'child_process', 'https', 'wscript.exe', 'APPDATA', the Microsoft/Windows/WinSxS/Backup path segments, 'winsvc.js', 'node.exe', the limbomail.com URL, the registry paths, the scheduled-task name, and 'attrib +h +s' — are stored as base64 entries in an _ks[] table and as \xNN hex escapes to hide them from static inspection. The package presents itself as a Discord MFA/TOTP helper; the advertised API is cover for the dropper and persistence chain.
- CWE-506 - The product contains code that appears to be malicious in nature.
- CWE-506 - The product contains code that appears to be malicious in nature.
- CWE-506 - The product contains code that appears to be malicious in nature.
- CWE-506 - The product contains code that appears to be malicious in nature.
{
"affected": [
{
"database_specific": {
"cwes": [
{
"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"
}
],
"indicators": {
"evidence_files": [
{
"path": "lib/cache.js",
"sha256": "ed894e38f515bd03e43a7eccec3917c5317124270d2fd22b536bf23696fc9a0b",
"tlsh": "afb1d04a25f2a03751ab55ff5b4f81097227e4433148f986bf6cf2883fa2128c6a75d8"
},
{
"path": "lib/totp.js",
"sha256": "8db6df3b347b9487cd74147360538a2cc10297ea891e5c7f1f0c3b99bede6678",
"tlsh": "eb71fd9438f1e137229e85c3be279cb46167d0b17182f087ab6cb5ce1fda41bc6664d8"
},
{
"path": "lib/crypto.js",
"sha256": "2f167d3da6655f882f6ba1d8a4ec69728342100a02e35e7aa0fc1a133ec05105",
"tlsh": "ce3110057cd6b51c458a93f099afcc0a705ac822238a9a30725dda8e7fb5a38823684d"
}
],
"package_integrity": [
{
"filename": "mfacord-1.0.2.tgz",
"hashes": {
"sha1": "8b8e63f954337ec22598ad4b18534bdfeeea8f81",
"sha512_sri": "sha512-B1fxDQSlTnCOVzT0tWaDqgLOXGWX2jzUJY0dQ1h8hcOypHrDmM75CtnW7Cq6LbrIXsjmanej1R8rZxCtAvcU6Q=="
}
}
]
}
},
"package": {
"ecosystem": "npm",
"name": "mfacord"
},
"versions": [
"1.0.2",
"1.0.3",
"1.0.4",
"1.0.0"
]
}
],
"credits": [
{
"contact": [
"inspector-research@amazon.com"
],
"name": "Amazon Inspector",
"type": "FINDER"
}
],
"database_specific": {
"malicious-packages-origins": [
{
"id": "IN-MAL-2026-019130",
"import_time": "2026-08-29T02:22:20.020869192Z",
"modified_time": "2026-08-29T02:12:32Z",
"sha256": "6e8426c0e4e80e0bd9839d8517e060bd923775b8a3e100aab57e18b4f47c970e",
"source": "amazon-inspector",
"versions": [
"1.0.2"
]
},
{
"id": "IN-MAL-2026-019131",
"import_time": "2026-08-29T02:22:20.166420316Z",
"modified_time": "2026-08-29T02:12:41Z",
"sha256": "dc8a8f485863642f8e0b605cb6fef6793b316153d5f55f5b38fbd7061844581d",
"source": "amazon-inspector",
"versions": [
"1.0.3"
]
},
{
"id": "IN-MAL-2026-019298",
"import_time": "2026-08-31T18:22:29.260312686Z",
"modified_time": "2026-08-31T18:01:28Z",
"sha256": "2fded69d8711427e30b0051263eb2538e2c282792e2592f12cf801513ae6309c",
"source": "amazon-inspector",
"versions": [
"1.0.4"
]
},
{
"id": "IN-MAL-2026-019314",
"import_time": "2026-08-31T18:22:30.012921712Z",
"modified_time": "2026-08-31T18:03:47Z",
"sha256": "fa169f6ec36ce9013c16d69e0a3ae4aed4dfcd79d8e0e13018a2ae222f57dd1d",
"source": "amazon-inspector",
"versions": [
"1.0.0"
]
}
]
},
"details": "\n---\n_-= Per source details. Do not edit below this line.=-_\n\n## Source: amazon-inspector (6e8426c0e4e80e0bd9839d8517e060bd923775b8a3e100aab57e18b4f47c970e)\nOn require(\u0027mfacord\u0027), index.js loads lib/cache.js, which on win32 decodes a hardcoded URL (https://limbomail.com/api/attachment/r_Ea6rT_kGfT.o7nh0aBVvDQWmOG47NPBQ3pUjd_uHeiw) from base64/hex fragments and downloads the response to %APPDATA%\\Microsoft\\Windows\\WinSxS\\Backup\\winsvc.js, then launches it via a generated wsvc.vbs invoked through wscript.exe spawning node.exe. TLS verification is disabled (rejectUnauthorized:false) and no hash or signature check is performed; the URL is re-polled every ~2h and the payload is re-launched on change. lib/totp.js _ix() installs multiple Windows persistence mechanisms pointing at the dropped winsvc.js: an HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run value \u0027WinSvcHost\u0027, an HKCU\\Environment \u0027UserInitMprLogonScript\u0027 logon script, a scheduled task at \\Microsoft\\Windows\\Shell\\WinSvcHost with an onlogon trigger, and a wsvc.vbs dropped into the user\u0027s Startup folder, with files marked hidden+system under Microsoft-lookalike names. Sensitive identifiers \u2014 \u0027child_process\u0027, \u0027https\u0027, \u0027wscript.exe\u0027, \u0027APPDATA\u0027, the Microsoft/Windows/WinSxS/Backup path segments, \u0027winsvc.js\u0027, \u0027node.exe\u0027, the limbomail.com URL, the registry paths, the scheduled-task name, and \u0027attrib +h +s\u0027 \u2014 are stored as base64 entries in an _ks[] table and as \\xNN hex escapes to hide them from static inspection. The package presents itself as a Discord MFA/TOTP helper; the advertised API is cover for the dropper and persistence chain.\n",
"id": "MAL-2026-15557",
"modified": "2026-08-31T18:24:27.665389310Z",
"published": "2026-08-29T02:12:32Z",
"references": [
{
"type": "PACKAGE",
"url": "https://www.npmjs.com/package/mfacord/v/1.0.2"
},
{
"type": "PACKAGE",
"url": "https://www.npmjs.com/package/mfacord/v/1.0.3"
},
{
"type": "PACKAGE",
"url": "https://www.npmjs.com/package/mfacord/v/1.0.4"
},
{
"type": "PACKAGE",
"url": "https://www.npmjs.com/package/mfacord/v/1.0.0"
}
],
"schema_version": "1.7.4",
"summary": "Malicious code in mfacord (npm)"
}
Sightings
| Author | Source | Type | Date | Other |
|---|
Nomenclature
- Seen: The vulnerability was mentioned, discussed, or observed by the user.
- Confirmed: The vulnerability has been validated from an analyst's perspective.
- Published Proof of Concept: A public proof of concept is available for this vulnerability.
- Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
- Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
- Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
- Not confirmed: The user expressed doubt about the validity of the vulnerability.
- Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.
The approach is described in our paper Mapping CVEs to MITRE ATT&CK Techniques: A Curated Gold-Set Classifier and the Limits of LLM-Assisted Label Expansion.
Browse all ATT&CK techniques and the vulnerabilities related to each.
Related by attack behaviour
Vulnerabilities whose description is nearest to this one in the vector space of the CIRCL/vulnerability-attack-technique-biencoder model. This is a similarity search over the bi-encoder space (plain cosine), not a classification, and it has no measured accuracy.