OVHcloud CLI Releases Hijacked Through a Contributor's GitHub Account, With Swapped Binaries Live for Up to 94 Minutes
An attacker replaced download archives on five OVHcloud CLI releases on October 19; a customer's pinned SHA-256 caught it, and OVHcloud had not enabled GitHub's release immutability.
Overview
An attacker used a contributor’s GitHub account to replace the download archives on five existing releases of OVHcloud’s command-line tool on Monday, October 19, according to The Hacker News. The swapped files were live for up to 94 minutes, from 12:47 to 14:21 UTC, the outlet reports, and were a build designed to steal secrets stored on the disk of any machine that ran it.
What Happened
The first public report came from a customer. The author of issue #300 on the ovh/ovhcloud-cli repository wrote that the assets of v0.13.0, v0.14.0 and v0.15.0 were replaced on October 19, “weeks after those releases were published,” and that the team noticed because its CI pins the SHA-256 of the Linux arm64 archive and started failing. The issue lists the uploader of the replacement assets as HassenBF, an account it says is not a public member of the ovh organization. The reporter filed a public issue because, in their words, there was no private vulnerability reporting channel enabled on the repository.
The Hacker News reports that OVHcloud lists v0.11.0 through v0.15.0 as compromised and v0.10.0 as clean. On v0.15.0 the attacker replaced six files: the macOS x86_64 and arm64 archives, the Linux x86_64 and arm64 archives, the Windows x86_64 archive, and the checksums.txt file, so the published hashes matched the new binaries. The Linux i386, Windows i386, Windows arm64 and WebAssembly builds were left alone on every release, according to the same report.
In the issue thread, a maintainer posting as rbeuque74 wrote: “All binaries involved have been deleted at 16:21 GMT+2.” The same maintainer later said OVHcloud had released v0.16.0 and wrote: “This release is immutable, so the assets attached to it can be trusted.” The v0.16.0 release page is marked as an immutable release, and The Hacker News says it was published at 17:16 UTC under the company’s ovh-cds account with a signed tag.
Who Was Exposed
The Hacker News lists the paths that received a swapped file during the window: running the official install script, which it says downloads the latest release archive and has never checked a hash; downloading an archive from the release page of any of the five releases; running a CI job that fetches the archive without a pinned hash; and running the CLI’s own upgrade command from a v0.12.0, v0.13.0 or v0.14.0 install on macOS or Linux.
The same report says Homebrew installs were not affected because the cask in force during the window pinned the original SHA-256 of each archive. It also says installs via go install or from source were unaffected, as was the Docker image, whose latest tag was last pushed on September 21. The outlet notes that some early write-ups listed Homebrew among the exposed paths and says it checked the tap’s commit history before concluding otherwise.
How the Swap Was Identifiable
Per the issue, the replacement v0.15.0 Linux arm64 binary reported a module version of v0.15.1-0.20261013083505-5ead8ef9b43d+dirty, and the issue’s author concluded it was a local go build of a commit from October 13 that was not produced by the release pipeline. The v0.15.0 tag itself still points to commit 760fd72d, the issue says. The Hacker News adds that OVHcloud’s own clean v0.16.0 build also reports +dirty, so that marker alone does not identify a malicious binary.
Why It Was Possible
The Hacker News explains that anyone with write access to a GitHub repository can delete the files attached to a release and upload new ones with the same names, and the download URL does not change unless release immutability is enabled. GitHub’s documentation says that for immutable releases, all files attached to the release are protected from modification or deletion, and that creating one generates a release attestation. GitHub’s changelog, dated October 28, 2025, announced general availability and says that once the setting is enabled, all new releases are immutable. The Hacker News adds that the setting protects only releases created after it is enabled.
According to The Hacker News, which cites a post by OVHcloud founder Octave Klaba quoted by the outlet Next, OVHcloud had not enabled the option, so a user with the right permissions could modify existing releases directly on GitHub without any checks by the company’s CI/CD pipeline. The report says the option is now enabled and that the pipelines themselves were not affected.
What Remains Unknown
- How the account was taken. The Hacker News says OVHcloud has not said how the account’s credentials were taken.
- What the binary did. The outlet says OVHcloud has not said which files the binary reads, where it sends them or how many copies were downloaded, and that no copy of a swapped archive has been analyzed in public.
- Attribution. The Hacker News reports that researchers at OpenSourceMalware tie the account to GlassWorm, a malware campaign, based on earlier activity on the account’s personal repositories. Whether the same actor did both is “our inference,” the researchers wrote, and the outlet says nothing from the October binary has been tied to GlassWorm because no copy of it was preserved.
- Full account. Both The Hacker News and the issue thread say OVHcloud has promised a detailed post-mortem in the coming days.
What Affected Users Were Told
The Hacker News reports that Klaba wrote on X on Monday evening that anyone affected should change every secret stored on the disk. The outlet adds that anyone who ran a swapped build, or cannot tell, should treat every secret readable from that machine as exposed, remove the binary, and install v0.16.0.