“IndonesianFoods” spam campaign publishes more than 86,000 malicious NPM packages
indonesian-foods-banner-86000

I’ve identified an NPM spam campaign that has published over 86,000 malicious packages to the NPM registry, affecting at least eleven NPM users.  This attack focuses on creating new packages rather than stealing credentials or engaging in other, more immediately malicious behaviours.

We are calling this a “spam campaign” rather than a worm, as this campaign focused on creating LOTS of packages, rather than self-replicating like a true worm.  This attack almost doubles the known number of malicious NPM packages.

What is the IndonesianFoods campaign?

The IndonesianFoods spam campaign is a long-term, coordinated attack targeting the NPM (Node Package Manager) ecosystem. The campaign gets its name from the bizarre internal dictionary and distinctive naming scheme used across the malicious packages. What makes this threat particularly concerning is that the attackers took the time to craft an NPM campaign involving tens of thousands of packages, rather than a singular attack.  Even worse, these threat actors have been staging this for over two years.

Because of the sheer volume of packages and data, I have created a GitHub repository that includes all the repositories and users’ data.  That repo is: https://github.com/6mile/Indonesian-Foods-Worm

The Actors Behind the Attack

Security analysis has identified 55 NPM user accounts that appear to be part of this coordinated campaign.  This number is sure to rise.
In the table below you can see the malicious NPM actor, the number of packages deployed by that actor and the file that delivers the payload in the third column:

NPM User Number of Packages Payload File
veyla 5250 auto.js
doaortu 496 auto.js
jarwok 1821 publishScript.js
noirdnv 5250 auto.js
vndra 5250 publishScript.js
voinza 5250 auto.js
yunina 5250 auto.js
sernaam.b.y 4468 ?
rudiox 435 ?
bipyruss 5250 index.js
vayza 5244 auto.js
seblakkuah 2519 auto.js
doelsumbing87 623 ?
abbeey 844 ?
mraihannaufal 31 ?
rajhsinggg 5250 ?
abbeey 844 ?
miftaikyy 1099 ?
ryliefrey 5250 ?
akunsansan0 405 ?
mizukiyakane 2925 ?
mipppp 5250 ?
mipta1 4668 ?
mipta19 4524 ?
miptaa02 3650 ?
waifurs 39 ?
sonyamiaw 5218 ?
trevorali 313 ?
miptaa02 3650 ?
jazuli 10 ?

 

Each of these accounts appears to have been created specifically to deploy these packages, and don’t appear to be legitimate accounts that have been compromised.

vndra-worm-screenshot

Key Characteristics

The IndonesianFoods campaign exhibits several distinctive features that set it apart from typical NPM supply chain attacks:

  • Long-term coordination: Unlike opportunistic attacks, this campaign shows signs of sustained, coordinated effort over an extended period
  • Consistent naming patterns: The packages share naming conventions that suggest a unified strategy
  • Bizarre internal dictionary: The malware uses an unusual set of terms and naming conventions internally, giving the campaign its distinctive identity
  • Multiple actor accounts: The use of at least seven different user accounts helps distribute the attack and makes detection and removal more difficult

What does the payload do?

There are three types of packages in this campaign.

First, the majority of the packages involved include a tea.yaml file and not much else. This is the author’s way of monetising the Tea Protocol blockchain.  This blockchain incentivises open-source projects, and by including the tea.yaml file, the authors are pretending to be legitimate open-source work.

indonesianfoods-worm-artsdao-tea-yaml

Second, the second most common file type is a package whose sole purpose is to include a package.json manifest file that includes dependencies to other packages in the spam campaign.  You can see one of those manifest files to the right.

indonesianfoods-worm-package-json-malicious-packages

The third type of file is the rarest in this campaign group and includes worm-like behaviour in that its sole purpose is to create other NPM packages in the campaign.  It does several things:

  1. Generates random package names using Indonesian names and food terms (like “andi-rendang23-breki”)
  2. Modifies package.json files to force packages to be public and assign random version numbers
  3. Publishes spam packages to NPM using the npm publish command
  4. Repeats continuously in an infinite loop, publishing a new spam package every 7 seconds

The result: This floods the NPM registry with junk packages, wastes infrastructure resources, pollutes search results, and creates supply chain risks if developers accidentally install these malicious packages. The malware disguises itself as a legitimate Next.js application to avoid detection.

Important note: While the payload doesn’t directly steal credentials or data, it weaponizes the NPM registry itself as an attack vector for widespread ecosystem pollution.

Implications for the JavaScript Ecosystem

This discovery highlights the ongoing challenges facing the NPM ecosystem and the broader JavaScript community. The coordinated nature of the attack suggests that threat actors are becoming more sophisticated in their approach to supply chain attacks.

Organizations and developers who rely on NPM packages should:

  • Regularly audit their dependencies for suspicious packages
  • Monitor for packages published by the identified malicious accounts
  • Implement automated security scanning tools in their CI/CD pipelines
  • Stay informed about emerging threats in the NPM ecosystem
  • Consider using package lock files and dependency pinning to prevent automatic updates to compromised packages

Next Steps

The OSV team is working to add these packages to the OSV.dev database.  Meanwhile, I am adding all 43,964 of these into the opensourcemalware.com database.

I’ll be updating this over the next several days.  Stay tuned and thanks for reading!

paul-circular-githax-photo

Paul McCarty

SourceCodeRed.com Security Research & Trainer

 

https://www.linkedin.com/in/mccartypaul/

Read about Software Supply Chain Red Teaming