ReleaseLock learn

Can this GitHub release be swapped?

Published October 28, 2026

A checksum file on a release is not the same as swap-proof. GitHub's docs explain how to turn on immutable releases and verify assets. Incident write-ups explain what went wrong in one attack. ReleaseLock answers a narrower question: is this tool still swappable?

What "swappable" means

On GitHub, a published release can keep the same tag while someone with upload rights replaces the attached binaries, and the checksum file too. People who download later get different bytes under the same version name. Unless the release is immutable, that swap can succeed without moving the tag or touching the source code.

Checksum-only is not swap-proof

Teams often treat SHA256SUMS or checksums.txt as enough. That works when you pin a hash you already trust from somewhere else. It does not stop a release page swap: if an attacker replaces both the binary and the checksum file, a fresh download "verifies" against the poisoned sums.

Rule of thumb: checksums are necessary for pin-and-verify workflows. They are not proof that yesterday's published asset is still today's asset.

A real example: OVHcloud CLI, October 19, 2026

According to OVHcloud's security advisory GHSA-862f-55f5-vmvw, a compromised OVHcloud GitHub developer account was used on October 19, 2026 to replace existing release assets for ovh/ovhcloud-cli versions v0.11.0 through v0.15.0 with malicious binaries. The window ran from 14:47 to 16:21 UTC+2 (12:47 to 14:21 UTC). OVHcloud says source code and the build chain were not affected, and that only users who installed the CLI during that window were exposed. It estimated about 250 downloads.

The customer report in ovh/ovhcloud-cli issue #300 shows how the swap looked from the outside. The checksums.txt files on v0.13.0, v0.14.0, and v0.15.0 were replaced along with the archives, and the v0.15.0 tag still pointed to its original commit. The reporter caught it because their CI pinned the SHA-256 of one release archive from earlier, and that pin started failing.

OVHcloud's advisory names the root cause: the repository was not configured to ensure release immutability. OVHcloud removed the malicious files, corrected that setting across its repositories, and published a clean v0.16.0 with a signed tag.

Two lessons follow. A checksum file on the same release did not help, because it was swapped too. A hash pinned from earlier did help, because it lived outside the release page.

What ReleaseLock checks

ReleaseLock is a public directory and API for CLIs, GitHub Actions, and install-from-releases tools. For each tracked repo it scores the latest release: immutable, attested, signed, checksums only, or unlocked. It also hashes release assets over time and flags drift when a previously seen asset hash or tag commit changes.

Quick answers

Can a GitHub release be swapped after it is published?

Yes, if the release is not immutable. Anyone with permission to upload release assets can delete and re-upload files under the same tag, so later downloads get different bytes under the same version name.

Do checksum files stop a release swap?

Not by themselves. If the checksum file is attached to the same release, it can be replaced along with the binaries, and a fresh download will still verify against it. Checksums help when you pin a hash you obtained earlier or from a separate channel.

What actually prevents a swap?

GitHub immutable releases. Once an immutable release is published, its assets cannot be modified or deleted and its tag cannot be moved. Attestations and signatures from a builder you trust add a way to check the bytes you downloaded.

How does ReleaseLock help?

ReleaseLock tracks the latest release of popular CLIs, GitHub Actions, and install-from-releases tools and reports whether it is immutable, attested, signed, checksum-only, or unlocked. It also hashes assets over time and flags drift when a previously seen asset or tag commit changes.

Is the tool you install every day still swappable?

Look it up in the directory, or add the free scan step to your workflows.

Search the directory

Sources