Source: amazon-inspector (1c86edd3f7edd7d111df5621cb884fd0ef3d870c6c0719d587b7bb0f16f65b8d)
The package presents itself as a discord.js clone (repository field points at the real github.com/discordjs/discord.js.git, README instructs import... from '@verylinh/discord') but ships two installer-relevant hostile mechanisms. First, package.json declares a runtime dependency sysframe resolved from git+https://ghp_...@github.com/navaLinh/node-ai.git — an unpinned (no commit SHA or tag), private, author-controlled GitHub repository, using an embedded live GitHub Personal Access Token. Every npm install uses the shipped token to fetch the current HEAD of that private repo into the installer's node_modules; the author can rewrite HEAD at any time to deliver arbitrary code, including lifecycle scripts, that will execute on subsequent installs. Second, Client.login() invokes an undocumented _verifyAuthorization routine that fetches an allow-list JSON from api.github.com/repos/Vellia-Elyvia/mydb/contents/db.json under a hardcoded PAT and refuses to start the installer's Discord bot unless the bot's username appears in the author-controlled allow-list — a hidden remote gate/kill-switch over the installer's runtime that is not disclosed in the README. Two live GitHub PATs are hardcoded in the shipped package (one in the git dependency URL, one as the default ghToken in _validateAuthOptions). The package name and metadata impersonate discord.js.
Credit: OpenSSF (source)
References
Source: amazon-inspector (1c86edd3f7edd7d111df5621cb884fd0ef3d870c6c0719d587b7bb0f16f65b8d)
The package presents itself as a discord.js clone (
repositoryfield points at the realgithub.com/discordjs/discord.js.git, README instructsimport... from '@verylinh/discord') but ships two installer-relevant hostile mechanisms. First,package.jsondeclares a runtime dependencysysframeresolved fromgit+https://ghp_...@github.com/navaLinh/node-ai.git— an unpinned (no commit SHA or tag), private, author-controlled GitHub repository, using an embedded live GitHub Personal Access Token. Everynpm installuses the shipped token to fetch the current HEAD of that private repo into the installer'snode_modules; the author can rewrite HEAD at any time to deliver arbitrary code, including lifecycle scripts, that will execute on subsequent installs. Second,Client.login()invokes an undocumented_verifyAuthorizationroutine that fetches an allow-list JSON fromapi.github.com/repos/Vellia-Elyvia/mydb/contents/db.jsonunder a hardcoded PAT and refuses to start the installer's Discord bot unless the bot's username appears in the author-controlled allow-list — a hidden remote gate/kill-switch over the installer's runtime that is not disclosed in the README. Two live GitHub PATs are hardcoded in the shipped package (one in the git dependency URL, one as the defaultghTokenin_validateAuthOptions). The package name and metadata impersonate discord.js.Credit: OpenSSF (source)
References