Malicious Baileys and libsignal-node npm forks force WhatsApp Channel follows from installers' accounts
SafeDep reports a growing npm campaign in which forks of Baileys, the WhatsApp Web library for Node.js, abuse the installer's authenticated WhatsApp session to silently follow attacker-controlled channels. Confirmed malicious packages total 82 Baileys-based package names (375 versions) and 15 libsignal-node impersonators (38 versions), out of 4,250 Baileys-named and 112 libsignal-node-named packages monitored. The activity is non-consensual social abuse and advertising, not credential theft. Evidence points to independent operators reusing the same forced-follow technique, with only one overlapping channel between mamz-baileys and the removed diezyyasha-baileys. The confirmed count is a lower bound and the campaign continues to grow.
Technical Details
- @neykoor/baileys follows a hardcoded newsletter (120363401404146384@newsletter) on every
connection.updateopen event, using a fire-and-forget WMex query and an empty catch to hide errors. - lupy4u fetches a follow list from a public GitHub file (LevviCodeID/Levi4than, levvleys.json), follows each channel, then mutes it to hide the subscription. The operator can change targets without republishing.
- mamz-baileys follows a fixed channel and injects an advertising URL (hxxps://fiora[.]nixel[.]my[.]id/), built via
String.fromCharCodeto evade text search, assourceUrlinto every image and video sent. - @cikikomo/baileys forges
forwardedNewsletterMessageInfochannel attribution on outgoing messages and setsnoSelfSync: trueso the sent message is not synced to the victim's own devices. - @prototypevip/baileys hides a base64-obfuscated authorisation gate in lib/Store/prototype-store.js; if the key does not match the author's (
gintoki), it sends a message from the victim's account and throws a "Blocked" error to halt message handling. - Publishers: prototype1006, cikikomo, neykoor, mamzhandsome, lupy4u, diezyyasha. Operator site: levvicode[.]cloud. npm removed @diezyyasha/libsignal-node before analysis.
Remediation
- Audit dependencies for Baileys forks and libsignal-node look-alikes; treat packages outside the confirmed list as unverified, not safe.
- Prefer the upstream Baileys library and verified publishers.
- Review WhatsApp accounts used by bots for unexpected channel follows or sent messages, and block the listed publishers, URLs and newsletter IDs.
Linha do tempo
-
Malicious Baileys and libsignal-node npm forks force WhatsApp Channel follows from installers' accounts
ler a análise desta fonte ocultar
SafeDep reports a growing npm campaign in which forks of Baileys, the WhatsApp Web library for Node.js, abuse the installer's authenticated WhatsApp session to silently follow attacker-controlled channels. Confirmed malicious packages total 82 Baileys-based package names (375 versions) and 15 libsignal-node impersonators (38 versions), out of 4,250 Baileys-named and 112 libsignal-node-named packages monitored. The activity is non-consensual social abuse and advertising, not credential theft. Evidence points to independent operators reusing the same forced-follow technique, with only one overlapping channel between mamz-baileys and the removed diezyyasha-baileys. The confirmed count is a lower bound and the campaign continues to grow.
Technical Details
- @neykoor/baileys follows a hardcoded newsletter (120363401404146384@newsletter) on every
connection.updateopen event, using a fire-and-forget WMex query and an empty catch to hide errors. - lupy4u fetches a follow list from a public GitHub file (LevviCodeID/Levi4than, levvleys.json), follows each channel, then mutes it to hide the subscription. The operator can change targets without republishing.
- mamz-baileys follows a fixed channel and injects an advertising URL (hxxps://fiora[.]nixel[.]my[.]id/), built via
String.fromCharCodeto evade text search, assourceUrlinto every image and video sent. - @cikikomo/baileys forges
forwardedNewsletterMessageInfochannel attribution on outgoing messages and setsnoSelfSync: trueso the sent message is not synced to the victim's own devices. - @prototypevip/baileys hides a base64-obfuscated authorisation gate in lib/Store/prototype-store.js; if the key does not match the author's (
gintoki), it sends a message from the victim's account and throws a "Blocked" error to halt message handling. - Publishers: prototype1006, cikikomo, neykoor, mamzhandsome, lupy4u, diezyyasha. Operator site: levvicode[.]cloud. npm removed @diezyyasha/libsignal-node before analysis.
Remediation
- Audit dependencies for Baileys forks and libsignal-node look-alikes; treat packages outside the confirmed list as unverified, not safe.
- Prefer the upstream Baileys library and verified publishers.
- Review WhatsApp accounts used by bots for unexpected channel follows or sent messages, and block the listed publishers, URLs and newsletter IDs.
- @neykoor/baileys follows a hardcoded newsletter (120363401404146384@newsletter) on every