Scavenger Malware Compromises Popular npm Packages to Target Developers

Scavenger Malware Compromises Popular npm Packages to Target Developers

The well-known npm package eslint-config-prettier was released without authorization, according to several GitHub users, even though its repository did not contain any corresponding code changes.

The maintainer later confirmed via social media that their npm account was compromised through a phishing email, affecting several packages including eslint-config-prettier versions 8.10.1, 9.1.1, 10.1.6, and 10.1.7; eslint-plugin-prettier versions 4.2.2 and 4.2.3; snyckit version 0.11.9; @pkgr/core version 0.2.8; and napi-postinstall version 0.3.1.

Compromise Details

This supply-chain attack distributed a novel malware dubbed “Scavenger” due to recurring strings like “SCVNGR” in its variants.

String decryption routine

The infection vector targets Windows systems via an install.js script in the compromised packages, which executes a function called logDiskSpace.

This function checks for the win32 platform and spawns a child process using rundll32.exe to load a malicious DLL named node-gyp.dll, hashed as c68e42f416f482d43653f36cd14384270b54b68d6496a8e34ce887687de5b441.

Compiled on the same day as the package distribution, this DLL acts as a loader, initiating a separate thread for its core operations.

The phishing campaign itself, involving device code techniques, was detailed separately by security researcher Rad in a writeup on npm supply-chain attacks, highlighting how attackers gained initial access.

npm Packages
phishing email

Malware Analysis

Scavenger’s loader, written in Visual Studio C++, employs sophisticated anti-analysis measures to evade detection.

According to the Report, it performs anti-VM checks by querying the raw SMBIOS firmware table via GetSystemFirmwareTable, scanning for signatures like “VMware”, “qemu”, or “QEMU”.

Additional defenses include enumerating process modules for antivirus-related DLLs such as snxhk.dll (Avast), SbieDll.dll (Sandboxie), and cmdvrt32.dll (Comodo), as well as tools like vehdebug-x86_64.dll (CheatEngine).

It verifies system attributes, ensuring more than three processors via NtQuerySystemInformation and confirming non-console execution with WriteConsoleW. If any check fails, it induces a null-pointer crash.

The malware dynamically resolves functions using a CRC32 hashing routine on loaded modules from the Process Environment Block (PEB), converting Unicode DLL names to ASCII and computing hashes without caching for added obfuscation.

It unhooks APIs like NtSetInformationThread and NtQuerySystemInformation via indirect syscalls, patching instructions to bypass EDR hooks. Strings are encrypted with XOR keys like 0x39541b2f8f3ef92d and decrypted on-the-fly.

Communications with command-and-control (C2) servers use libcurl and XXTEA encryption (identifiable by DELTA 0x9e3779b9), sending base64-encoded payloads to endpoints like /c/k2 for campaign IDs and /c/v for integrity checks.

The second-stage stealer mirrors these techniques, targeting Chromium artifacts such as Extensions, ServiceWorkerCache, DawnWebGPUCache, and Visited Links for data exfiltration, potentially harvesting authentication tokens, session data, or browsing history.

Variants link to prior campaigns, including a BeamNG executable infection, with slip-ups like exposed PDB paths (C:UsersuserDesktopXscavengerscavenger-mainscavenger-clientx64Releasedropper-cmd.pdb) confirming the “Scavenger” name and sloppy WinExec calls executing curl commands to fetch additional payloads.

Indicators of Compromise

Category IOCs
URLs https://ac7b2eda6f1.datahog.su, https://datahog.su, https://datacrab-analytics.com,
https://datalytica.su,
https://smartscreen-api.com, https://dieorsuffer.com,
https://firebase.su, https://fileservice.gtainside.com/fileservice/downloads/ftpk/1743451692_Visual%20Car%20Spawner%20v3.4.zip
Hashes 877f40dda3d7998abda1f65364f50efb3b3aebef9020685f57f1ce292914feae, 9ec86514d5993782d455a4c9717ec4f06d0dfcd556e8de6cf0f8346b8b8629d4, 0254abb7ce025ac844429589e0fec98a84ccefae38e8e9807203438e2f387950, dd4c4ee21009701b4a29b9f25634f3eb0f3b7f4cc1f00b98fc55d784815ef35b, c4504c579025dcd492611f3a175632e22c2d3b881fda403174499acd6ec39708, 1aeab6b568c22d11258fb002ff230f439908ec376eb87ed8e24d102252c83a6e, c3536b736c26cd5464c6f53ce8343d3fe540eb699abd05f496dcd3b8b47c5134, 90291a2c53970e3d89bacce7b79d5fa540511ae920dd4447fc6182224bbe05c5, 8c8965147d5b39cad109b578ddb4bfca50b66838779e6d3890eefc4818c79590, 75c0aa897075a7bfa64d8a55be636a6984e2d1a5a05a54f0f01b0eb4653e9c7a, 30295311d6289310f234bfff3d5c7c16fd5766ceb49dcb0be8bc33c8426f6dc4, c68e42f416f482d43653f36cd14384270b54b68d6496a8e34ce887687de5b441, 80c1e732c745a12ff6623cbf51a002aa4630312e5d590cd60e621e6d714e06de, d845688c4631da982cb2e2163929fe78a1d87d8e4b2fe39d2a27c582cfed3e15

Get Free Ultimate SOC Requirements Checklist Before you build, buy, or switch your SOC for 2025 - Download Now


Source link