The GitLab patch landed a week early. Alpine still got hit — because the real bug lived in Ruby, inside your container
Alpine Linux just published a post-mortem that should be required reading for anyone who runs GitLab and thinks a version number is a security policy. On October 20–21, an attacker used a freshly registered account to feed crafted CI configurations to Alpine's GitLab instance, aiming at CVE-2026-97229, a CVSS 10.0 remote code execution flaw in how GitLab evaluates regular expressions in CI config. The attacks crashed GitLab worker processes eight times. In four of them, the exploit got partway through and only failed at the next step. The attacker also downloaded Alpine's GitLab container image — likely to tune the exploit against that exact build.
Here's the part that stings: GitLab shipped the fix on October 12, a full week before the attack. Alpine had even upgraded to GitLab 19.3.6 on October 22. And the instance was still exploitable anyway. The reason is that the actual bug isn't in GitLab's own code — it's in Onigmo, the regex engine built into Ruby, which GitLab bundles inside its packages and container images. GitLab's October patch carried the Ruby fix, but Alpine's custom-built image didn't inherit it. The hole stayed open until Ruby itself shipped 3.3.13 on October 23 and Alpine rebuilt the image around it. Your vulnerability surface isn't the app version you typed into the upgrade ticket — it's the pile of dependencies the vendor baked into the artifact, some of which you can't see, let alone patch directly.
What Alpine did next is the other lesson. The logs needed to prove or disprove code execution were missing, along with any record of outbound connections. Rather than argue about probabilities, the team treated the instance as compromised: full rebuild from scratch, all passwords reset, and a public reminder that people who reused their GitLab password elsewhere should change it there too — because attackers were already trying leaked credentials from other breaches against the account base. That's a defensible posture, but it's also expensive for a volunteer-run project, and it lands on every team that self-hosts: incident response without logging is just rebuild-or-guess. If you self-host anything, the audit question writes itself: can you name the regex engine, JSON parser, or HTTP client your CI platform ships inside its container image? Most admins can't, and can't patch them independently even when they can. The good news Alpine verified is that aports, the packages, and the October 21 releases were untouched — the supply chain held this time. But an attacker already downloading your exact container image to tune an exploit against your specific build is not a hypothetical you should count on failing twice.
Sources
Comments
Post a Comment