Skip to content
Rush Commerce
Software & Dev3 min read

GitLab RCE PoC lands 6 weeks after a fix labeled a bug

A working GitLab RCE exploit lets any user who can push run commands as git. The fix shipped in June — filed as a bug, not a security advisory. Patch to 18.11.5 or 19.0.2.

Your patch process almost certainly keys off the vendor's security advisory table. That's the failure mode here. GitLab shipped a fix on June 10 that it classified as a bug, so it never appeared in the security release notes — and on July 24 a researcher published a working GitLab RCE exploit for the versions that fix covers. If you run self-hosted GitLab and you only patch when the advisory says "security," you've been sitting on this for six weeks.

What actually happened

Yuhang Wu at depthfirst published a proof-of-concept that executes commands as the git user on an unpatched self-managed GitLab 18.11.3 server, as reported by The Hacker News on July 25. The path in is unglamorous, which is what makes it bad: an ordinary authenticated user commits two crafted Jupyter notebooks and asks for the diff.

GitLab's notebook renderer — an in-tree gem called ipynbdiff — hands repository-controlled .ipynb JSON to Oj::Parser, and two memory-corruption bugs in Oj (a Ruby JSON parser written largely in native C) make the chain work. The first notebook leaks a heap pointer through the commit diff; repeat it and an automated probe locates the libraries in memory; the second corrupts the parser into running commands. No admin rights. No CI runner access. No access to anyone else's project. No victim interaction.

Affected ranges are CE and EE 15.2.0–18.10.7, 18.11.0–18.11.4, and 19.0.0–19.0.1. First fixed releases: 18.10.8, 18.11.5, 19.0.2, all from June 10. The Oj bugs themselves were reported May 21 and patched May 27. There is no CVE assigned, which is the other half of why this slipped past people — if your tooling watches CVE feeds, there was nothing to watch.

Why this matters for your business

Self-hosted GitLab is one of the highest-value boxes a small company owns. It holds every repo, every deploy key, every CI secret. Running commands as git there is functionally the same as owning your production pipeline. And the entry requirement — "can push to a project" — includes every contractor, every intern, and anyone who has ever compromised one developer's credentials.

The operational lesson is broader than GitLab. Vendor severity labels are a vendor's risk model, not yours. A parser bug that reads as a stability nit inside a large engineering org reads very differently when the affected box is the single system holding all of your source code. We've watched teams build careful patch discipline that is nonetheless load-bearing on someone else's triage decision, and this is what that costs.

Two concrete changes. First, for the handful of systems where compromise means game over — your Git host, your CI, your identity provider — track upstream releases, not just security advisories. Patch minor versions on a schedule regardless of label. Second, check who can actually push. Most self-hosted GitLab instances we look at have a dozen accounts with more access than anyone remembers granting.

If you're behind: update to 18.10.8, 18.11.5, or 19.0.2, then review your instance's audit events for unexpected .ipynb commits and diff requests.

Key takeaways

  • A working GitLab RCE PoC published July 24 runs commands as git for any authenticated user who can push to a project
  • The chain abuses GitLab's Jupyter notebook diff renderer feeding repo-controlled JSON to two memory-corruption bugs in the Oj Ruby parser
  • Fixed June 10 in 18.10.8, 18.11.5, and 19.0.2 — but classified as a bug, not a security release, and no CVE was assigned
  • Affected: CE/EE 15.2.0–18.10.7, 18.11.0–18.11.4, 19.0.0–19.0.1 — a range going back years
  • For crown-jewel systems, track upstream releases rather than relying on the vendor's security-advisory table to tell you when to patch

Running your own GitLab, CI, or identity server? We put update cadence, access review, and audit logging on a schedule that doesn't depend on someone else labeling a fix correctly. See how we manage self-hosted infrastructure or get your instance reviewed.

Sources: The Hacker News, GitLab releases.

  • #gitlab
  • #rce
  • #patching
  • #self-hosted
  • #security
TR

Tommy Rush — Founder, Rush Commerce

Operator turned builder. 15+ years running operations — now shipping the systems businesses run on. More

Get The Rush Report weekly — one email, zero fluff.