MAL-2026-15917

See a problem?
Import Source
https://github.com/ossf/malicious-packages/blob/main/osv/malicious/npm/@crysnovax/baileys/MAL-2026-15917.json
JSON Data
https://api.osv.dev/v1/vulns/MAL-2026-15917
Published
2026-09-03T18:09:54Z
Modified
2026-09-04T06:15:05.341122298Z
Summary
Malicious code in @crysnovax/baileys (npm)
Details

@crysnovax/baileys is a renamed fork of the Baileys WhatsApp Web library. On every successful connection (connection.update with connection === 'open', wired in lib/Socket/socket.js) it silently makes the user's own authenticated WhatsApp account follow two channels controlled by the publisher, 120363402922206865@newsletter and 120363423670814885@newsletter, through the xwa2newsletterjoin_v2 FOLLOW query, with no opt-out and a creds.additionalData.crysnovaxFollowed once-flag. From 2.7.10 the module that performs the follow (lib/Utils/channel-policy.js) is the only file in the package run through javascript-obfuscator (declared as a devDependency with an 'obfuscate' npm script); pkgwarden re-implemented the rotated string-table decoder to recover the channel ids without executing the code. Separately, from 2.7.6, lib/Utils/integrity.js POSTs the package name and version plus a SHA-256 machine fingerprint to https://bailey.crysnovax.link/api/v1/verify on every connect (a publisher-controlled kill switch that fails open), and the update check is repointed to web.crysnovax.link. Earlier versions (1.0.3 through 2.7.5) carry the same forced follow in plaintext with a comment calling it a 'condition of use'; they are not listed here. The listed versions combine the concealed follow with the fingerprint phone-home. Reachability was confirmed by following the socket chain from makeWASocket. No credential or session-key theft was observed. All listed versions were fetched from the npm registry and read by hand on 2026-09-03; the current latest tag (2.8.3) is armed. Related family: MAL-2026-13932 and MAL-2026-15819 (Baileys-fork newsletter auto-follow campaign).

Database specific
{
    "iocs": {
        "urls": [
            "https://bailey.crysnovax.link/api/v1/verify"
        ],
        "domains": [
            "bailey.crysnovax.link"
        ],
        "files": [
            {
                "source": "PACKAGE_ARCHIVE",
                "paths": [
                    "lib/Utils/channel-policy.js"
                ],
                "note": "javascript-obfuscator-processed forced-follow module (digest from 2.8.3)",
                "digests": {
                    "sha256": "ee0dc4f66c39603e12b014cc09bee260bb80b9bbfe3d2f1428faccf95bebfec3"
                }
            },
            {
                "source": "PACKAGE_ARCHIVE",
                "paths": [
                    "lib/Utils/integrity.js"
                ],
                "note": "machine-fingerprint POST to bailey.crysnovax.link on every connect (digest from 2.8.3)",
                "digests": {
                    "sha256": "851ebe678d46a63fadc8e85def5f657e75cf1dd73e482e82f53d9ef71ac2750e"
                }
            },
            {
                "source": "PACKAGE_ARCHIVE",
                "paths": [
                    "lib/Socket/socket.js"
                ],
                "note": "connection.update hook that invokes the forced follow (digest from 2.8.3)",
                "digests": {
                    "sha256": "d6ad429de0e0723c2f19e38c197feb28f60e62526bff155a8da26d52353f66c6"
                }
            }
        ]
    }
}
References
Credits

Affected packages

npm / @crysnovax/baileys

Package

Name
@crysnovax/baileys
View open source insights on deps.dev
Purl
pkg:npm/%40crysnovax/baileys

Affected ranges

Affected versions

2.*
2.7.6
2.7.10
2.7.11
2.7.12
2.7.13
2.7.14
2.7.15
2.7.16
2.7.17
2.7.18
2.7.19
2.7.20
2.7.21
2.8.0
2.8.1
2.8.2
2.8.3

Database specific

source
"https://github.com/ossf/malicious-packages/blob/main/osv/malicious/npm/@crysnovax/baileys/MAL-2026-15917.json"