top of page
perceptive_background_267k.jpg

Two Compromised joyfill npm Packages Run RAT When Imported Into Node.js

Published:

29 July 2026 at 04:20:57

Alert date:

29 July 2026 at 05:00:35

Source:

thehackernews.com

Click to open the original link from this advisory

Supply Chain & Dependencies, Ransomware & Malware, Data Breach & Exfiltration, Web Technologies

Two beta release npm packages in the @joyfill namespace have been compromised to deliver a remote access trojan (RAT) linked to the DEV#POPPER malware family. The affected packages are @joyfill/layouts@0.1.2-2773.beta.0 and @joyfill/components@4.0.0-rc24-2773-beta.4. Both packages contain an import-time JavaScript implant that resolves encrypted malicious code when imported into Node.js environments. This represents a software supply chain attack targeting developers who use these packages in their projects. The DEV#POPPER campaign has been previously associated with North Korean threat actors targeting developers through social engineering and malicious code. Developers using these specific beta versions are at risk of having their systems compromised upon package import. Users are advised to remove the affected packages immediately and audit their environments for signs of compromise.

Technical details

Two beta release versions of npm packages in the @joyfill namespace (@joyfill/layouts@0.1.2-2773.beta.0 and @joyfill/components@4.0.0-rc24-2773-beta.4) were compromised to deliver a Remote Access Trojan (RAT) associated with the DEV#POPPER malware family. The packages contain an import-time JavaScript implant that resolves encrypted code through a multi-blockchain resolver structure using Tron, Aptos, and BNB Smart Chain (BSC) transactions. Unlike other malicious packages triggered via npm lifecycle hooks, this implant runs when Node.js loads the CommonJS package entry point. The implant operates in two parallel branches: (1) an in-process branch that recovers a 77 KB JavaScript payload similar to DEV#POPPER malware family, and (2) a secondary detached Node.js process that requests a separate boot payload from IP 23.27.13[.]43, decrypts the response, and evaluates it. The blockchain-based C2 infrastructure provides operational resilience and allows payload switching without publishing new package versions. The attack chain uses blockchain resolution to retrieve a second-stage malware named 'clientCode.' The final RAT payload is heavily obfuscated and avoids execution on development/CI/sandboxed machines with hostnames: github-runner, buildbot, buildkitsandbox, and microsoft-standard-WSL2. RAT capabilities include: file upload, retrieving additional JavaScript, collecting host details, sending status check-ins, and reading clipboard data via PowerShell (Windows), pbpaste (macOS), or xclip/xsel (Linux). A Python infostealer assessed to be an iteration of OmniStealer malware is also delivered via the detached process, capable of harvesting: environment and host info, Windows Credential Manager and Linux Secret Service data, Chromium and Firefox browser data, browser extension storage for wallets and password managers, Git credentials, GitHub CLI configuration, GitHub Desktop logs, and Microsoft Visual Studio Code storage. Both malicious versions were published by the same npm identity using Node.js 18.20.0 and npm 10.5.0. This campaign is connected to ViteVenom and attributed to North Korean threat actors as part of a single ongoing operation linked to the PolinRider threat cluster and Contagious Interview.

Mitigation steps:

1. Immediately remove the affected package versions (@joyfill/layouts@0.1.2-2773.beta.0 and @joyfill/components@4.0.0-rc24-2773-beta.4) from lockfiles, caches, internal mirrors, build images, and deployment artifacts. 2. Pin dependencies to a verified, known-good version of the @joyfill packages. 3. Rotate all credentials that may have been exposed through the affected Node.js process, including Git credentials, GitHub CLI tokens, browser-stored credentials, and any secrets accessible via Windows Credential Manager or Linux Secret Service. 4. Audit CI/CD pipelines, developer workstations, and build environments that may have loaded the compromised packages for signs of compromise. 5. Block network communication to the malicious IP address 23.27.13[.]43. 6. Monitor for anomalous blockchain-based outbound network activity to Tron, Aptos, and BNB Smart Chain endpoints. 7. Review and audit npm publishing credentials and source repositories for signs of unauthorized access. 8. Treat any environment that loaded @joyfill/layouts or @joyfill/components beta versions as potentially compromised and perform full incident response including credential rotation and environment rebuild. 9. Implement controls to detect and block import-time execution of unexpected code in npm packages. 10. Monitor for the OmniStealer Python infostealer indicators on affected hosts.

Affected products:

@joyfill/layouts@0.1.2-2773.beta.0 (npm package)
@joyfill/components@4.0.0-rc24-2773-beta.4 (npm package)
Node.js (CommonJS environments loading affected packages)

Related links:

Related CVE's:

Related threat actors:

IOC's:

23.27.13[.]43 (malicious IP address / C2 server), @joyfill/layouts@0.1.2-2773.beta.0 (malicious npm package), @joyfill/components@4.0.0-rc24-2773-beta.4 (malicious npm package), Tron blockchain address used for BSC transaction hash resolution (hard-coded), Aptos account used as fallback blockchain resolver, BNB Smart Chain (BSC) transactions used for payload delivery, Malware name: clientCode (second-stage Node.js RAT), Malware family: DEV#POPPER, Malware family: OmniStealer (Python infostealer), Sandbox evasion hostnames: github-runner, buildbot, buildkitsandbox, microsoft-standard-WSL2, Published using Node.js 18.20.0 and npm 10.5.0

This article was created with the assistance of AI technology by Perceptive.

© 2025 by Perceptive Security. All rights reserved.

email: info@perceptivesecurity.com

Disclaimer: Deze website toont informatie afkomstig van externe bronnen. Perceptive aanvaardt geen verantwoordelijkheid voor de inhoud, juistheid of volledigheid van deze informatie.

bottom of page