TRON, Aptos and BSC in One Infection Chain: JavaScript Loader Linked to ChainVeil Campaign

Researchers at Checkmarx examined the ChainVeil campaign that used npm packages to distribute multi-stage JavaScript loaders. A newly discovered sample appeared in a GitHub repository recommended by an AI agent, where the file navigation.js contained an obfuscated loader that matched the campaign's techniques. The loader retrieves encrypted payloads from TRON, falls back to Aptos, and then uses the extracted data as a BSC transaction identifier to fetch the next stage. C2 infrastructure and final RAT functionality aligned exactly with previously published indicators, except for the campaign identifier A9-0554-3 instead of the A6-* markers seen in npm samples. Git history showed the malicious code was inserted via a merge commit on 29 March 2026, months before the first known npm packages appeared in May. The findings indicate that npm was never the only distribution channel for ChainVeil and that the campaign's blockchain-based delivery mechanism has been active since at least early 2025.

HabrTranslated from Russian

Read at source

Researchers from Checkmarx have published an in-depth analysis of the ChainVeil campaign, which abused npm packages to deliver multi-stage JavaScript loaders. A previously unknown sample of the same family recently surfaced in a GitHub repository that an AI coding assistant recommended to a developer.

The malicious code was discovered inside the file navigation.js of the inbox-ai project. Initial inspection revealed an obfuscated one-liner appended after a large block of whitespace. The loader begins by declaring the global identifier A9-0554-3, differing from the A6-* markers documented by Checkmarx for the npm samples.

The sample employs the same three-blockchain delivery chain described in the Checkmarx report: it first queries the latest outgoing TRON transaction, falls back to Aptos if necessary, and then uses the decoded value as the transaction hash on BSC to retrieve the next-stage payload. Extracted strings and C2 addresses matched the infrastructure previously attributed to the campaign.

Git history shows the clean version of navigation.js was added in November 2025. The malicious block appeared during a merge commit on 29 March 2026. The same technique was later used to infect calendar-rail.js. The code remained in the repository for more than five months.

Blockchain analysis revealed that the campaign's payload-update cadence averaged two to three days, with occasional bursts of rapid updates. A BSC transaction from February 2025 already contained data consistent with the observed loader chain, pushing the suspected start of activity earlier than previously reported.

The final stage delivered by the loader is a remote-access trojan whose capabilities match those detailed by Checkmarx. Researchers note that the repository compromise predates the first publicly documented npm packages by nearly two months, suggesting that ChainVeil operators have used multiple distribution vectors beyond the npm ecosystem.

Meridian digestThe week's most consequential security stories, distilled into one briefing.See the digest

More in Malware & Botnets

Yoba Campaign Uses Signed ChatGPT and Claude Binaries for DLL Sideloading and XMRig Deployment
uCreator Spyware Infiltrates Modified Telegram, WeChat and GCash Builds on Android
Researchers Deploy Cowrie Honeypot Disguised as NVIDIA H100 Server to Study SSH Botnet Tactics