
What the Fuzz?
Fuzz Testing: Breaking Things on Purpose (So Hackers Can’t Do It First)
One of our recent blog posts – The 90-90 Aphorism brought up the subject of ‘fuzzing’, which led to several rabbit hole conversations with our team. Many of the non developers on staff assumed it was a made-up term, an autocorrect incorrect, a typo missed during our collaborative blog writing and editing process. As with all things nerdy here at STEP, we embrace every opportunity presented to increase our knowledge or share our expertise.
Thanks to our development team and their passionate referrals to sources like the Low Level channel on YouTube and The DarkNet Diaries podcast, a crash course on the merits of Fuzz Testing was delivered to the entire staff and why it is a critical component in the development of secure software. It seemed only prudent that this knowledge deserved its own blog post. So, let’s dive into Fuzz Testing and why breaking things on purpose is needed to ensure hackers can’t do it first.
What the Fuzz is Fuzzing?
For our less technical readers we’ll start with the basics. In software development, most testing is about proving that things work as expected. Fuzz testing — aka fuzzing, fuzz checking, or fault injection — is about proving that things work when the unexpected occurs. By feeding programs a flood of random, malformed, or unexpected data, fuzzing exposes hidden weaknesses proactively, before cybercriminals can exploit them. It may sound chaotic, but fuzz testing has become one of the most effective strategies to harden software systems against attacks.
From a Stormy Past to a Fuzzy Future
It was a dark and stormy night in1988 when fuzzing was born. Seriously, thanks to an actual thunderstorm, Professor Barton Miller of the University of Wisconsin–Madison, noticed that electrical interference during the storm caused some Unix programs to crash. Curious, he and his students undertook a series of quirky experiments bombarding applications with random inputs. To their surprise, and elation, many of these failed spectacularly showing them just how fragile the UNIX systems were at the time.
These experiments resulted in Barton publishing a report on the Reliability of UNIX Utilities which earned him the Jean-Claude Laprie Award in Dependable Computing in 2022. The research coined the term fuzz testing (because the data looked like static, or “fuzz”) and laid the foundation for testing techniques used by security minded software brains all over the planet.
Fast forward to the 2020’s and companies like Google and Microsoft now run fuzzing continuously on browsers, operating systems, and cloud platforms. Google’s OSS-Fuzz project has uncovered more than 36 000 bugs and 10 000 vulnerabilities across 1000 open-source projects. In 2023 Google started using AI to help uncover even more vulnerabilities with enhanced fuzz targets. For organizations that rely on custom software or legacy systems, fuzzing is an increasingly accessible option to ensure resilience against cyberattacks.
Why Bother Fuzzing?
From a business perspective, fuzz testing matters. It strengthens security, reduces costs, protects reputations and helps with Legacy System Migration. The adoption of Fuzz Testing is a business case the entire C-Suite should care about.

Strengthens Security
Fuzzing identifies vulnerabilities that attackers could exploit, such as buffer overflows or input validation failures. These flaws can lead to data breaches, downtime or compliance violations. For our nontechnical readers, fuzz testing is proactive preparation, it’s like stretching before a workout.

Reduces Cost of Fixes
Fixing bugs before release is significantly cheaper. According to IBM’s Cost of a Data Breach Report 2023, the global average cost of a breach is $4.45 million. In Canada the banking and energy sectors have become prime targets for cyberattack with breaches costing upwards of CA$6.94 million. Regardless of sector or geography, no sector is immune, and the cost of fuzz testing is a drop in the budgetary bucket in comparison.

Protects Reputation
Customers and partners expect reliability. Nothing erodes trust faster than buggy and/or insecure software—especially if it involves sensitive financial or personal data. Remember the Equifax scandal of 2017 where hackers gained access to 145 million Americans’ consumer records, 400,000 records of U.K. residents, and 19,000 Canadians’ records? The breach triggered multiple lawsuits, fines from the FTC and UK Commissions and reputational damage that still lingers today.

Works on Legacy Systems Too
Even when source code isn’t available, fuzzing can help stress-test legacy applications or protocols to identify weaknesses before modernization. With legacy systems straining global IT budgets, fuzz testing is a cost-effective method to ensure fiscally prudent transitions.
To Fuzz or Not to Fuzz That is the Question
Fuzzing is especially helpful in scenarios where attackers have a potential entry point like:
Internet-Facing Applications – APIs, browsers, and authentication systems, where attackers are most likely to probe with bad data.
Complex Codebases – Large, intricate systems are harder to test exhaustively by hand; fuzzing automates the hunt for weak spots.
Data-Heavy Systems – Software that processes files, user uploads, or external inputs (e.g., PDF readers, image parsers) often harbor input-handling bugs.
Legacy Modernization Projects – Fuzzing can catch hidden flaws before migrating old systems into new environments.
In software there are always edge cases and projects like the following may not need the warm and fuzzers:
Software is Isolated – If an application never handles outside input and runs in a controlled environment, fuzzing may add little value.
Early Prototypes – Running fuzz tests on software that’s not yet stable often produces noise rather than actionable findings.
Resource Constrained Projects – Fuzzing takes time and computing power; smaller efforts may only warrant the use of traditional requirements testing.
Which Fuzz When?
Just like choosing the right shoe for the right occasion, picking the correct type of fuzz testing for your software solution is important.
Black-Box Fuzzing: Treats the application as a “black box.” Random inputs are generated and fed into the system with no knowledge of the internal code.
Best for: Legacy systems, third-party software, or when source code isn’t available.
Benefit: Easy to set up and doesn’t require internal code access.
White-Box Fuzzing: Uses knowledge of the application’s internal code and logic to generate smarter inputs. It is often combined with static analysis tools.
Best for: Custom software where developers have full access to the code.
Benefit: More efficient than black-box fuzzing, as it targets weak spots in the code.
Grey-Box Fuzzing: A middle ground: the fuzzer has partial knowledge of the system (like code coverage feedback) and adapts input generation accordingly.
Best for: Modern development pipelines. This is the most widely used approach today (e.g., AFL (American Fuzzy Lop), libFuzzer).
Benefit: Balances efficiency and practicality, catching deeper issues with fewer wasted cycles.
Mutation-Based Fuzzing: Starts with valid inputs and mutates them into unexpected or malformed versions (e.g., flipping bits, inserting junk data).
Best for: File parsers, APIs, or communication protocols.
Benefit: Realistic test cases that mimic how attackers often break things.
Generation-Based Fuzzing: Builds inputs from scratch according to a specification or grammar.
Best for: Highly structured inputs (e.g., JSON, XML, or custom protocols).
Benefit: Systematic coverage of valid and edge-case inputs.
When to Call in the Fuzz Busters
Fuzz testing isn’t always plug-and-play and while open-source tools like AFL and libFuzzer are powerful, they do require expertise to configure, scale, and interpret results.
Many organizations turn to third-party vendors for:
Setup & Tooling: Choosing the correct fuzzer for your project and integrating it into the development pipeline. Seeking support from a third party to do this is the most common and cost-effective reason to do so. Existing experience means faster ramp time.
Scalability: Running tests at cloud scale to find vulnerabilities faster.
Actionable Results: Filtering out noise and prioritizing issues that truly matter. Prioritization can be integrated into existing projects or future phases but means less time is spent on determining what to do when. Time is money as they say.
Resource Scaling: One of the most common reasons for seeking third party assistance, after setup. Using a third party to handle your fuzzing needs lifts the resource strain off internal QA and development teams, leaving them with more time to focus on innovative internal project.
Wrapping It Up
Fuzzing may have gotten its start by happenstance, but it has grown into one of the most effective methods for uncovering software vulnerabilities. It’s most valuable when applied to internet-facing, complex, or legacy systems, precisely the places attacker’s target.
For many organizations, partnering with a third-party vendor ensures fuzz testing is applied effectively and at scale, with clear, actionable results without additional strain on internal teams.
The alternative, doing nothing, leaves your organization exposed to costly breaches, reputational harm, and compliance risks. In today’s threat landscape, fuzzing isn’t just an optional extra it’s a cornerstone of responsible software development and a fiscally responsible business decision.