Skip to content

Response, New York. Noah Park: Check Point Patches Actively Exploited Management Server Path Traversal. Detection, Dallas. Ava Okello: Report Finds Nearly Half of Deployed Detections Need Attention Before SOCs Can Trust Them.

SOCtember

Always First. Fast SOC News.

StepSecurity's cover graphic for its OVHcloud CLI analysis, reading OVHcloud CLI Compromised via GitHub Release Swap, with tags for ovh/ovhcloud-cli, GitHub Releases, Credential Stealer, GlassWorm and Solana Dead Drop, and figures for 5 releases swapped, 94 minutes live, about 250 downloads and 4 seconds from install to exfiltration.
Image: StepSecurity, cover graphic for "OVHcloud CLI Compromised via GitHub Release Swap," Oct. 2026 (fair use).

Response

OVHcloud Says a Color Picker Extension a Developer Installed a Year Earlier Led to Its Official CLI Being Swapped for a Credential Stealer, Caught Only When a Customer's Pinned Hash Failed

For about an hour and a half on Oct. 19, five past releases of OVHcloud's command-line tool served recompiled binaries that harvested cloud keys, SSH keys and AI agent credential stores. OVHcloud traces the break-in to a GlassWorm-linked VS Code extension and a repository that did not enforce release immutability. A StepSecurity replay adds a one-command tell.

Noah Park, ResponseNew York6 min read

ROUBAIX - The attacker who planted a credential stealer in OVHcloud's official command-line tool on Monday did not need to break into the company's build systems. According to OVHcloud, the way in was a color picker.

In a GitHub security advisory published Oct. 20, the French cloud provider said a compromised developer account was used on Oct. 19 to replace the downloadable binaries on five existing releases of ovhcloud-cli, versions 0.11.0 through 0.15.0, with recompiled copies carrying malicious Go code. The swapped files were available from 14:47 to 16:21 Central European Summer Time, or 12:47 to 14:21 UTC, a span OVHcloud puts at 1 hour 33 minutes, and were downloaded about 250 times. OVHcloud says its source code and build chain were not affected, and that no other repositories were touched.

The company traced the account compromise back a full year. On Oct. 20, 2025, the developer installed a VS Code extension called color-picker-universal, version 2.8.91, on a personal MacBook. The extension used a Solana wallet that OVHcloud says is known to belong to the GlassWorm threat actor, and it registered a persistent NodeJS service that talked to 162[.]33[.]177[.]177. In March 2026, several of the developer's personal repositories were compromised using the same wallet. OVHcloud says the release swap was carried out with stolen keys rather than from the MacBook, and that as far as it knows the developer's OVHcloud laptop was not compromised.

The deeper failure, in OVHcloud's words, was that the repository "was not appropriately configured to ensure release immutability," which let an account with write access replace assets on months-old releases at the same URLs.

Screenshot of OVHcloud's GitHub security advisory GHSA-862f-55f5-vmvw, "ovhcloud-cli security incident - October 19th, 2026," rated High, showing the abstract, the timeline of events from the first hijacked binary at 14:47 UTC+2 to the clean v0.16.0 release at 19:16 UTC+2, and key figures of 1h33 availability and about 250 downloads.
Screenshot: OVHcloud, GitHub security advisory GHSA-862f-55f5-vmvw, Oct. 20, 2026 (fair use).OVHcloud lists times in UTC+2.

A customer's pinned hash raised the alarm

The swap was spotted by a customer, credited in the advisory as alink-tothepast, who opened a GitHub issue about an hour after the first file was replaced. StepSecurity, which published a detailed reconstruction, says the customer's continuous integration pipeline pinned the SHA-256 hash of the Linux arm64 archive, so the build failed when the file changed.

That check mattered because the attacker also replaced checksums.txt on the newest releases so the published hashes matched the malicious files. StepSecurity says the project's install.sh script performs no checksum verification at all, while the Homebrew cask pins its own per-architecture hashes and would have refused the swapped downloads. By StepSecurity's account, Homebrew, go install, source builds and the Docker image were never exposure paths.

OVHcloud removed the malicious files at 16:21 its time, suspended the developer account, switched releases to immutable mode across its GitHub organization and published a clean v0.16.0 with a signed tag. Its production CI/CD runs on internal systems not hosted on GitHub, which it says were not compromised.

What the stealer took

The advisory lists what the recompiled binaries collected: SQLite databases from VS Code, Cursor, the Continue extension and Sourcegraph Cody; the local OpenCode database; sessions and history from the Hermes agent; the Claude agent's configuration directory; AWS, Google Cloud and Azure credentials; Docker, Kubernetes, npm, DigitalOcean and Terraform configuration; SSH keys; .netrc; and the global Git config.

On each run the stealer copies files into a temporary folder named envchecker followed by nine or ten digits, archives it and sends it out using Solana RPC calls and an upload endpoint at hxxps://45[.]32[.]148[.]174/upload. OVHcloud says the folder is never deleted, which gives responders a simple check. The advisory credits malware analysis to Ivan Kwiatkowski and the VirLabs.ai platform.

StepSecurity rebuilt the attacker's binary from the same source commit with the same build flags inside an isolated network. In its replay, the stealer read 18 secret paths and completed exfiltration four seconds after installation began, and every later run stole again.

Screenshot of StepSecurity's replay showing install.sh fetching v0.15.0 with no checksum verification, then the swapped binary answering the ovhcloud version command with version undefined, last_commit 5ead8ef9b43d354dfb5caadff803b11afc8c5c58 and last_commit_time 2026-10-13T08:35:05Z.
Screenshot: StepSecurity, "OVHcloud CLI Compromised via GitHub Release Swap," Oct. 2026 (fair use).A genuine release reports a version number; the swapped build reported "undefined" and the attacker's build commit.

StepSecurity also found a quick tell. Because the attacker built the tool locally without the release pipeline's version flag, running ovhcloud version on a swapped binary prints "undefined" alongside commit 5ead8ef and its Oct. 13 timestamp, and ovhcloud upgrade refuses to run, calling itself a development build. OVHcloud's own analysis of the binary shows the same commit in its build metadata.

Screenshot of OVHcloud's advisory section Targeted resources, with the output of file and go version -m run against a malicious ovhcloud binary, showing a stripped Go 1.27.1 build with -ldflags="-s -w", module version v0.15.1-0.20261013083505-5ead8ef9b43d+dirty and vcs.revision 5ead8ef9b43d354dfb5caadff803b11afc8c5c58.
Screenshot: OVHcloud, GitHub security advisory GHSA-862f-55f5-vmvw, Oct. 20, 2026 (fair use).The build metadata of a swapped binary.

The GlassWorm loader is still out there

StepSecurity says the developer's four loader repositories were force-pushed again on Oct. 21 to roll back their history, but it recovered the loader from an orphaned commit and detonated it. The loader polls nine public Solana RPC providers for a wallet whose transaction memos carry the next-stage link. StepSecurity says the dead drop is cold today, consistent with a CrowdStrike-coordinated takedown of GlassWorm's channels on May 26, but that an infected machine keeps polling and the operator could re-arm it. If no RPC endpoint is reachable, the loader crashes with a visible error in Node logs rather than failing quietly.

What responders should do

  • Find any host or CI job that downloaded or ran ovhcloud-cli v0.11.0 through v0.15.0 from GitHub releases between 12:47 and 14:21 UTC on Oct. 19. Compare binaries against the MD5 hashes in the advisory rather than running them, and look for envchecker folders in temp directories.
  • Treat any machine that ran a swapped binary as compromised. From a different machine, rotate OVH API keys, cloud keys, kubeconfigs, registry and npm tokens, SSH keys, Git credentials and the AI agent stores the stealer targets. Reinstalling the CLI revokes nothing.
  • Reinstall v0.16.0 and verify it with gh release verify-asset.
  • Check developer machines for the color-picker-universal extension, persistent NodeJS services and Solana RPC traffic from developer tools.
  • For your own projects, enable release immutability and pin hashes for third-party tools from a source the publisher cannot rewrite in the same step.

Sources:


Noah Park covers incident response, containment, and blue-team operations for SOCtember from New York.

Related stories

Response desk