Open Source ·

Joyfill npm beta releases carried a DEV#POPPER RAT

Two Joyfill beta releases published on 2026-07-28 appended an obfuscated implant after the legitimate package code. It resolved its C2 through blockchain transactions, opened a Socket.IO remote access channel, and staged a Python credential stealer.

Two prerelease versions of Joyfill's npm packages shipped a remote access trojan on July 28, 2026. Joyfill sells document and form tooling, and its @joyfill/components and @joyfill/layouts packages are used for forms and layout work in web applications.

Socket, which analyzed the releases, identified @joyfill/[email protected], published at 10:54:57 UTC, and @joyfill/[email protected], published nine minutes later at 11:03:59. In both, the implant was appended after the legitimate package code and hidden under several layers of JavaScript obfuscation, including seeded character shuffling and dynamically constructed functions.

Execution happened at import time. That detail mattered more than the payload itself, because it means npm install --ignore-scripts, the mitigation most organizations adopted after two years of postinstall worms, offered nothing. The code exposed Node's require and module on the global object, then resolved its command-and-control address by querying Tron and Aptos addresses and retrieving encrypted code through BSC transactions, which it XOR-decrypted and evaluated. Using a public blockchain as the address book means the operators can rotate infrastructure without shipping a new package.

What arrived was a 77 KB remote access trojan associated with the DEV#POPPER family, supporting JavaScript evaluation, shell execution, file management, and clipboard theft, followed by an 82,457-byte Python credential harvester that collected browser data, wallet extensions, and Git credentials. The malware also injected itself into developer tooling, including VS Code and npm, to survive removal of the package. Socket advised treating affected machines as compromised rather than merely at risk, and pinning back to @joyfill/layouts 0.1.1 and @joyfill/components 4.0.0-rc24.

Notes

  • Both malicious releases are prereleases. Consumers pinning to a stable range would not have received them, but anyone tracking beta or release-candidate channels would. Both were removed from npm and now return 404, so no sample exists.
  • Execution occurs at module import, so npm install --ignore-scripts does not prevent it. The implant is appended after the legitimate package code rather than replacing it.
  • Socket reported the RAT stage at 77 KB and the Python credential stealer at 82,457 bytes. SafeDep tracks the blockchain dead-drop loader carried in the production bundles as PolinRider.
  • npm records four further prereleases that day that no source classifies: layouts 0.1.2-2773.beta.1 and beta.2, components 4.0.0-rc24-2773-beta.5 and beta.6. Socket named only beta.0 and beta.4, so these are left unrecorded.

Appendix · Affected releases

@joyfill/layouts npm fixed 0.1.1
  • Published 2026-07-28 at 10:54:57 UTC.
  • Socket identifies this SHA-256 as the complete npm archive for @joyfill/[email protected].
4.0.0-rc24-2773-beta.4 no sample yet
  • Published 2026-07-28 at 11:03:59 UTC.
  • Socket identifies this SHA-256 as the complete npm archive for @joyfill/[email protected].
  • OSSF MAL-2026-11160 maps the SHA-1 and SHA-512 checksums to the complete components-4.0.0-rc24-2773-beta.4.tgz npm archive.
  • The components archive remains unavailable; the samples directory retains a shared report-derived blockchain-loader fragment for both Joyfill beta releases as payload-only evidence, without reconstructing the encrypted clientCode payload.

Indicators

  • malware_familyDEV#POPPER

References

  1. Two Joyfill npm Beta Releases Compromised to Deliver DEV#POPPER Remote Access Trojan - Socketsocket.dev
  2. Compromised npm Packages: @joyfill/components and @joyfill/layouts Ship an Obfuscated Remote Access Trojan - StepSecuritystepsecurity.io
  3. Two Compromised joyfill npm Packages Run RAT When Imported Into Node.js - The Hacker Newsthehackernews.com
  4. Joyfill npm Packages Compromised with Blockchain C2 Loader - SafeDepsafedep.io
  5. OSSF MAL-2026-11160 package-integrity record for @joyfill/componentsraw.githubusercontent.com

Source record: oss/attacks/joyfill/meta.yaml