← Latest papers
💻 computer science

From TinyGo to gc Compiler: Extending Zorya's Concolic Framework to Real-World Go Binaries

This paper presents an extension of the Zorya concolic execution framework to support multi-threaded Go binaries compiled with the standard gc compiler, enabling the detection of real-world vulnerabilities in production projects like Kubernetes and Go-Ethereum by restoring thread states, neutralizing runtime preemption, and employing overlay path analysis.

Original authors: Karolina Gorna, Nicolas Iooss, Yannick Seurin, Rida Khatoun, Keith Makan

Published 2026-05-06
📖 5 min read🧠 Deep dive

Original authors: Karolina Gorna, Nicolas Iooss, Yannick Seurin, Rida Khatoun, Keith Makan

Original paper licensed under CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). This is an AI-generated explanation of the paper below. It is not written or endorsed by the authors. For technical accuracy, refer to the original paper. Read full disclaimer

Imagine you are a security inspector trying to find hidden traps in a massive, complex factory. This factory is a piece of software written in the Go programming language.

For a long time, security inspectors had a special tool called Zorya that was great at inspecting small, simple factories (called "TinyGo" binaries). But the real-world factories used by big companies like Kubernetes and Ethereum are huge, chaotic, and run on many workers (threads) at the same time. The old Zorya tool couldn't handle these big factories; it would get confused by the noise and complexity.

This paper is about upgrading Zorya so it can finally inspect these real-world, multi-worker Go factories. Here is how they did it, explained simply:

1. The Problem: The "Busy Factory"

The standard Go compiler (called gc) builds software that starts up a whole team of invisible workers (OS threads) just to manage the work. It also has a "traffic cop" (the runtime) that can stop any worker at any moment to let someone else go first.

  • The Old Tool: Zorya was used to inspect quiet, single-worker factories. When it tried to look at the busy, multi-worker factories, it couldn't figure out who was doing what or where the workers were standing.
  • The Goal: Make Zorya smart enough to pause the chaos, take a snapshot of every worker, and then carefully inspect the work without getting lost.

2. The Solution: Three New Superpowers

The authors gave Zorya three new tricks to handle the big factories:

  • The "Time-Travel Snapshot" (Restoring Thread States):
    Imagine the factory is running at full speed. Instead of trying to watch the workers move in real-time (which is too fast and confusing), the new Zorya hits "pause," takes a high-definition photo of every single worker's hands, tools, and location, and saves it. When it starts its inspection, it loads these photos back in so it knows exactly where everyone was before it started. This lets it ignore the chaos of the "traffic cop" and focus on the actual code.

  • The "What-If" Mirror (Overlay Path Analysis):
    Usually, when a worker reaches a fork in the road, they pick one path and walk it. The other path is ignored.

    • The Old Way: Zorya would only check the path the worker actually took.
    • The New Way: Zorya creates a "ghost mirror" of the factory. When the worker picks the left path, Zorya sends a "ghost worker" down the right path for just a few steps. It checks if that path has a trap (like a hole in the floor or a broken tool) without actually walking it. If the ghost finds a trap, Zorya sounds the alarm. This is called Copy-on-Write: it only copies the parts of the factory the ghost touches, saving a huge amount of energy.
  • The "Silent Trap" Detector:
    Some traps don't make a loud noise (like a crash or a panic). For example, a number might get so big it "wraps around" and becomes small again, silently breaking the math. Other tools miss these because they only look for loud crashes. Zorya uses a super-smart math brain (called an SMT solver) to do the math in its head. It can say, "Hey, if this number gets bigger, it will silently break the math," even if the program doesn't crash.

3. The Test: Finding Real Bugs

The team tested this upgraded Zorya on 11 real-world security holes found in famous software like Kubernetes, Go-Ethereum, and CoreDNS. They compared Zorya against other tools like static checkers (which read code like a grammar checker), fuzzers (which throw random data at the software), and other security scanners.

The Results:

  • Zorya found 7 out of 11 bugs.
  • The "Silent" Win: One of the bugs Zorya found was a "silent integer overflow." It was a math error that didn't crash the program and didn't trigger an alarm. No other tool found this bug unless someone had manually told them exactly what to look for. Zorya found it automatically.
  • The Trade-off: Zorya is slower than the "throw random data" tools (fuzzers). While a fuzzer might find a crash in seconds, Zorya takes about 16 minutes to find a bug. However, Zorya doesn't need a human to write a specific test script for every single function; it just analyzes the binary file directly.

4. The Bottom Line

This paper shows that we can now use advanced "ghost worker" inspections to find deep, hidden security holes in complex, multi-threaded Go software. While it takes a bit longer than other methods, it can find "silent" bugs that other tools completely miss, making our digital infrastructure safer.

In short: They taught a security robot how to pause a chaotic factory, take a snapshot of the workers, and check the paths nobody else is walking, successfully finding hidden traps that were previously invisible.

Drowning in papers in your field?

Get daily digests of the most novel papers matching your research keywords — with technical summaries, in your language.

Try Digest →