← Latest papers
💻 computer science

Vulnerability Abundance: A formal proof of infinite vulnerabilities in code

This paper presents a formal proof that a single C program can contain a countably infinite set of distinct, CVE-assignable vulnerabilities, introducing the concept of "vulnerability abundance" to analyze the distribution of security flaws and distinguishing between the theoretical infinity of vulnerabilities and the finite set of actual exploits.

Original authors: Eireann Leverett, Jeroen van der Ham-de Vos

Published 2026-04-10
📖 6 min read🧠 Deep dive

Original authors: Eireann Leverett, Jeroen van der Ham-de Vos

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

The Big Idea: The Infinite Bug Machine

Imagine you have a magical factory. You feed it a single button, and it spits out a new, unique software program. But here's the twist: every single program it makes has a hidden trapdoor.

The authors of this paper built a real, working computer program called the "Vulnerability Factory." They proved mathematically that this factory can keep churning out new programs forever, and every single one of them contains a distinct, fixable security flaw.

Because the factory can run forever, it proves that software vulnerabilities are infinite. There is no "end" to the number of bugs we can find in code.

The Factory in Action: A Cookie Cutter Analogy

Think of the Vulnerability Factory like a high-tech cookie cutter.

  • The Dough: This is the basic code structure.
  • The Cutter: This is the "Vulnerability" part.
  • The Process: Every time the machine runs, it changes the size of the cookie slightly (maybe 16 inches, then 17, then 18).

In the world of software security, if you have a "Buffer Overflow" bug (a classic type of hole where data spills over), it usually happens because a program tries to put too much water into a cup.

  • Machine Run #1: Makes a cup that holds 16 ounces. If you pour 17, it breaks.
  • Machine Run #2: Makes a cup that holds 17 ounces. If you pour 18, it breaks.

Even though the type of mistake is the same (overflowing a cup), the specifics are different. In the real world of software security (specifically the CVE system used to track bugs), if the cup size is different, it counts as a different bug.

Since the machine can make cups of size 16, 17, 18... all the way to infinity, it creates an infinite number of distinct bugs.

The "Chemical Abundance" Analogy

The paper introduces a new concept called "Vulnerability Abundance." To understand this, imagine the universe of chemistry.

  • Hydrogen is everywhere. It's the most common element.
  • Gold is rare.
  • Oxygen is common in the Earth's crust but rare in deep space.

The authors say software is the same.

  • Memory Errors (like buffer overflows) are the "Hydrogen" of C and C++ programming. They are everywhere because those languages let you mess with memory directly.
  • Logic Errors might be the "Gold" of Python or Java. They are rarer in those languages because the languages prevent you from making memory mistakes, but you can still make logical mistakes.

Why does this matter?
Just as a chemist studies where elements are found to understand the universe, security experts should study Vulnerability Abundance to understand where the biggest risks are. If a company uses a language that is "rich" in memory errors, they have a much higher "abundance" of potential bugs than a company using a safer language.

The Catch: Infinite Bugs vs. Finite Exploits

Here is the most important part of the paper, and it's a bit of a relief.

Just because there are infinite bugs doesn't mean there are infinite hackers or infinite attacks.

Think of it like a forest with infinite trees.

  • The Bugs: Every single tree in the forest is a potential hiding spot for a tiger. There are infinite trees, so there are infinite hiding spots.
  • The Exploits: The tigers (hackers) are rare. They only hunt the trees that are close to the road (popular software) or the trees that are easy to climb.

The paper points out a harsh reality:

  1. Most bugs are never used. Only about 6% of known software bugs are ever actually exploited by hackers.
  2. Hackers are lazy (efficiently). They don't need to find every bug. They just need to find the bugs in the software that everyone uses.

If 90% of the world uses Windows, and there is one bug in Windows, that one bug is more dangerous than a million bugs in a tiny, obscure program used by five people.

The "Small Fleet" Principle

The authors use a great metaphor for this:
Imagine the world's oceans are full of islands (vulnerabilities). There are infinite islands.

  • But the pirate fleet (hackers) is small.
  • The pirates don't sail to every island. They only sail to the three biggest islands where the treasure is.

Because the "deployment" of software is concentrated (everyone uses the same few operating systems and browsers), a tiny number of exploits can threaten almost everyone. You don't need an infinite army of hackers; you just need a few good ones to hit the popular targets.

What Should We Do?

The paper concludes with a shift in strategy:

  1. Stop trying to find "all" bugs. Since there are infinite of them, you can never finish the job. It's like trying to count every grain of sand on a beach that keeps growing.
  2. Start measuring "Abundance." Instead of just counting bugs, we should ask: "What types of bugs are most common in the software we use?"
  3. Change the "Ingredients." If we know that C and C++ are "rich" in dangerous memory bugs, we should switch to languages like Rust or Go, which are "poor" in those specific bugs. This changes the chemical composition of our software, making the "Hydrogen" of danger much less abundant.

Summary

  • The Proof: We built a machine that proves there are infinite software bugs.
  • The Concept: We should measure the "abundance" of different bug types, just like chemists measure elements.
  • The Reality: Infinite bugs don't mean infinite danger. Danger comes from the combination of bugs + popular software.
  • The Solution: Don't try to patch every single hole. Instead, change the programming languages we use to make the "dangerous elements" less abundant in the first place.

The paper ends with a joke: If you like their work, you should ask the CVE database to give them a bug ID called CVE-2026-Infinity.

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 →