Stealer Extensions in VS Code: Wallets and Keys Leave via a Telegram Bot

10.08.2026 7 min 5

A pair of malicious VS Code extensions calling themselves Solidity Pro spent months looking like ordinary developer tooling before turning into credential stealers. Yeeth Security published the analysis on 6 August 2026, and the detail that matters is not the payload but the patience: the malicious code waits between twelve and seventy-two hours after installation before it runs. By then the marketplace scanner has finished, and the developer has decided the extension is useful.

What the Solidity Pro Extensions Actually Did

The extensions shipped under several publisher identities, among them helper-beeps.solidity-pro and web3devtoolsx.solidity-pro, on Open VSX and the VS Code Marketplace. They posed as tooling for Solidity, the language used to write Ethereum smart contracts, which puts the target audience in a useful position for an attacker: people who keep wallet keys on their working machine.

The behaviour changed with the version number. Releases 1.0.0 through 2.4.x acted as a dropper, beaconing to Cloudflare Workers endpoints, pulling down an AES-GCM encrypted Python payload and running it through child_process.spawn. Versions 2.4.7 and 2.4.8 kept the same skeleton with heavier obfuscation. From 3.0.0 onward the extension carried a full crypto wallet stealer, and the newest versions dropped the Cloudflare stage entirely in favour of uploading straight to a Telegram bot. Publisher web3devtoolsx also shipped clean, harmless builds numbered 1.0.0 and 4.0.0, which is how a package earns a plausible history.

What the Crypto Wallet Stealer Takes

The harvest list reads like an inventory of a developer's entire working life. On the credential side: GitHub tokens in both ghp_ and github_pat_ forms, GitLab glpat- tokens, AWS keys and session tokens, Cloudflare tokens, OpenAI and Anthropic API keys, and Telegram bot tokens. On the cryptographic side: SSH private keys, Bitcoin WIF and xprv keys, mnemonic seed phrases, and the wallet vaults of MetaMask, Phantom, Rabby, Coinbase, Trust and Keplr. It also collects credentials embedded in URLs and 1Password MFA tokens.

Important: a seed phrase is not a password. There is no reset, no support line and no reversal. If one was ever stored, typed or pasted on a machine that ran a compromised version, the correct assumption is that the funds behind it are already gone, and the only useful action is moving them to a wallet whose keys that machine has never seen.

How It Got Past Review: Twelve to Seventy-Two Hours of Patience

The delay is configured as a random interval between twelve and seventy-two hours after installation. Before activating, the payload checks environment variables that give away an automated environment, including CI, GITHUB_ACTIONS, JENKINS_HOME and GITPOD_WORKSPACE_ID, and stays dormant if it finds them. A scanner that installs a package, watches it for a few minutes and moves on will see a Solidity helper doing nothing unusual, because at that moment it genuinely is doing nothing unusual.

The rest is craft rather than novelty: endpoint addresses stored as hex fragments and reassembled at runtime, strings split across immediately-invoked function tables, base64 blobs passed through eval(), and method names rotated between releases so that a signature written for one version does not match the next. Early versions even made a decoy request to a public CoinGecko price endpoint, which is exactly what a genuine crypto development tool would do.

The WhiteCobra Playbook and Fake Download Counts

Yeeth links this campaign to WhiteCobra, a cluster that has been flooding extension marketplaces since 2025, while noting the artefacts differ enough that the attribution is a behavioural match rather than a byte-for-byte one. The comparison is worth making because the group's own planning document leaked. In September 2025, Koi Security published a file titled "DEPLOYMENT PLAN: Operation Solidity Pro", recovered from a campaign of 24 malicious extensions across the VS Code Marketplace and Open VSX.

It is written like a product launch. Five phases: package, deploy, promote, inflate, exfiltrate. The promotion stage covers social media templates and bot engagement. The inflation stage instructs operators to run a script until the extension shows 50,000 downloads, in the plan's own words to "provide social proof for developers discovering the extension". The revenue estimate runs from $10,000 to $500,000 per hour depending on whose wallet gets caught. The practical lesson is blunt: the download counter is a number the attacker controls, so it cannot be the thing that convinces you.

What to Do Now

  • Check what is installed, not what you remember installing: both Solidity Pro extensions are gone from Open VSX, but removal from a marketplace does not uninstall anything already on a machine.
  • Treat a hit as a full credential compromise: rotate GitHub, GitLab, AWS, Cloudflare and API keys, regenerate SSH keys, and move crypto to a wallet created on a clean device. Rotating one token is not enough when the stealer took the whole set.
  • Judge the publisher, not the download count: the counter is inflated on purpose. An unfamiliar publisher with impressive numbers and a short history is the exact profile the plan describes.
  • Keep seed phrases off the development machine: a hardware wallet keeps the signing keys away from anything an editor extension can reach.
  • Audit extensions on a schedule: remove what you no longer use. Every installed extension runs with your permissions and updates itself quietly.
  • Watch for what an editor should never do: an extension spawning powershell, cmd, mshta, cscript or curl is worth an alert in any endpoint tooling you already run.

Why This Matters Beyond Developers

A developer machine is a skeleton key. The keys sitting on it open the pipelines that build software other people install, which is why this kind of theft rarely stops at the first victim. The same logic ran through the VS Code flaw where a single click handed over GitHub repositories and through the coding agents that let a GitHub issue reach CI secrets. It is also where network privacy tools stop being relevant, and saying so plainly is more useful than a sales pitch: a VPN encrypts the connection an extension makes, it does not decide whether that extension should be making it. Blocking known command-and-control domains at the DNS layer is a real, partial defence for the dropper stage, but code you installed yourself and gave your own permissions is not a network problem.

Conclusion

Conclusion: nothing here required a vulnerability. The extensions were installed on purpose, by people who wanted the feature they advertised, and the only clever part was waiting long enough for everyone to stop looking. Marketplaces will keep hosting this because the trust signals they expose, download counts and star ratings, are cheaper to fake than to earn. Until publisher verification means something, the useful habit is smaller than it sounds: install fewer extensions, know who publishes them, and keep the keys that matter on a device your editor has never touched.

vs codemicrosoftsolidity prowhitecobrayeeth securitykoi securityopen vsxgithubgitlabawscloudflaretelegrammetamaskphantomcoinbasetrust wallet1passwordethereumcryptocurrencymalwaresupply chaincybersecuritysecurityprivacyvpn

Read also