Skip to content

$ cat in-depth-version-numbers-are-vanity-labels.md

In Depth: Version Numbers Are Vanity Labels

A deep dive into tag hijacking, explaining why version numbers are mutable labels rather than fixed references and how that flaw enabled recent supply chain attacks on GitHub Actions and Composer packages.

Securing Laravel08 Jun 2026 · 5 min read · summary
Read on securinglaravel.com ↗
The author follows on from a previous security tip about Laravel Moat by explaining how supply chain attacks exploit mutable version tags. Friendly version numbers like v1.2.3 are convenient, but a tag is only a label that can be moved from one commit to another, so anyone with repository access can swap in malicious code without changing the version the consumer asks for. The piece walks through two real incidents. In the tj-actions/changed-files case, a stolen token for a maintenance bot let an attacker push a malicious commit to a fork and repoint the action's tags at it, leaking CI secrets into public build logs across more than 23,000 repositories. The Laravel-Lang compromise followed a similar pattern, with a leaked token used to redirect release tags and inject a payload autoloaded through composer.json, affecting around 700 versions across four packages. The article also notes that an existing composer.lock pinning commit hashes would have blocked the Laravel-Lang attack, while installs without a lockfile were exposed. It closes by asking how a version number like v2.1 can end up handing over credentials, setting up a closer look at Git tags.

source

This is a summary of an article first published by Securing Laravel. The full piece is on their site.

Open original