CVE-2026-24826

Zombie Vorbis: Resurrecting 2019 Exploits in 2026 via Turso3D

Alon Barad
Alon Barad
Software Engineer

Jan 28, 2026·5 min read·2 visits

Executive Summary (TL;DR)

Turso3D bundled an ancient version of `stb_vorbis` containing seven known critical vulnerabilities. Attackers can achieve RCE by providing a malicious `.ogg` file. Fix involves updating the header library.

A critical dependency lag vulnerability in the Turso3D engine resurrects a ghostly squad of seven distinct security flaws from 2019. By failing to update the bundled `stb_vorbis.h` library, the engine exposes users to a CVSS 10.0 cocktail of Remote Code Execution (RCE), Heap Overflows, and Stack Smashing via malicious Ogg Vorbis audio files.

The Hook: Audio Libraries are Permanent

There is a golden rule in C/C++ development: if you copy-paste a single-header library into your project, you have effectively married it. You are now responsible for its feed, its care, and—most importantly—its security patches. Unfortunately, the developers of turso3d (a legacy-style 3D engine) seemingly missed the memo on the 'care' part.

CVE-2026-24826 isn't a new discovery in the wild; it is a shameful resurrection of the past. It represents a massive dependency lag where the engine was using a version of stb_vorbis.h so old it predates the pandemic. We aren't talking about one bug here. We are talking about a "Best Hits" compilation of seven different critical vulnerabilities (CVE-2019-13217 through CVE-2019-13223) that were fixed upstream years ago but left rotting in Turso3D's codebase.

This is the digital equivalent of locking your front door with a biometric scanner while leaving the back window open because you forgot you even had a back window. The result? A perfect 10.0 CVSS score and a trivial path to Remote Code Execution for anyone who can convince the engine to play a sound file.

The Flaw: The Magnificent Seven

Because this CVE is an aggregate of seven upstream failures, the attack surface is comically wide. stb_vorbis is a drag-and-drop Ogg Vorbis decoder. It parses complex binary data structures (codebooks, floors, residues) directly from untrusted files. When you parse complex data in C without paranoia, you get memory corruption.

The specific vulnerabilities resurrected here include:

  1. Stack Buffer Overflow (CVE-2019-13218): Located in compute_codewords(). The code failed to validate the range of codeword lengths, allowing an attacker to write past the stack frame. This is the holy grail for exploitation—direct control over the return address.
  2. Heap Buffer Overflow (CVE-2019-13217): Found in start_decoder(). A classic malloc-too-small scenario during setup.
  3. Out-of-Bounds Read (CVE-2019-13220): In draw_line(), untrusted indices from the file act as array offsets. It's an arbitrary read waiting to happen.

The root cause isn't just "bad code"—it's the failure to propagate upstream fixes. The stb project fixed these issues in 2019 following an audit by ForAllSecure. Turso3D simply didn't pull the changes.

The Code: Anatomy of a Fix

Let's look at the diffs. These changes are simple one-liners, which makes their absence for 7 years even more painful. Below are the critical patches applied in PR #11 to stop the bleeding.

First, the Out-of-Bounds Read in draw_line. The fix is a crude but effective bitmask to force the index y into a safe 0-255 range.

// The Fix for CVE-2019-13220
- LINE_OP(output[x], inverse_db_table[y]);
+ LINE_OP(output[x], inverse_db_table[y&255]);

Next, the NULL Pointer Dereference in vorbis_finish_frame. The original code assumed get_window always returned a valid pointer. Spoilers: it doesn't.

// The Fix for CVE-2019-13222
  float *w = get_window(f, n);
+ if (w == NULL) return 0; // Don't crash if window is gone

And finally, a check to prevent the Heap Overflow in start_decoder. The code previously trusted current_length implicitly.

// The Fix for CVE-2019-13217
+ if (current_length >= 32) return error(f, VORBIS_invalid_setup);

These aren't complex architectural changes. They are basic sanity checks that should have been there from day one.

The Exploit: Dropping the Beat (and the Shell)

How does a hacker weaponize this? In a game engine context, the vector is almost always asset loading. A game engine like Turso3D likely loads assets (textures, models, audio) from a specific directory or a packed file format.

The Attack Chain:

  1. Preparation: The attacker crafts a malicious .ogg file. They don't need to fuzz it from scratch; Proof-of-Concept exploits for the 2019 stb_vorbis CVEs are widely available on GitHub.
  2. Delivery: The attacker packages this audio file into a custom map, a mod, or a resource pack for a game built on Turso3D.
  3. Execution: When the user loads the level, the engine calls stb_vorbis_decode_filename() (or similar). The decoder begins parsing the Vorbis headers.
  4. Detonation: The parser hits the compute_codewords() function. The malicious header claims a codeword length that exceeds the stack buffer. The stack is smashed, the return address is overwritten with a ROP chain or a jump to shellcode located in the heap (sprayed earlier via large textures).

The result? The game freezes for a split second, and then Calculator pops. Or worse, a reverse shell connects back to the attacker.

The Mitigation: Just Update It

The fix here is embarrassingly simple: stop using code from 2018. The stb libraries are single-header files designed for easy integration. Remediation is literally a copy-paste job.

For Developers: If you are using stb_vorbis.h, check the header. If it doesn't contain the fixes for CVE-2019-13217, you are vulnerable. You should immediately pull the latest version from the nothings/stb repository. Do not rely on your package manager's "bundled" versions if you are vendoring code directly in your source tree.

For Users: If you are playing games built on older versions of Turso3D, be extremely wary of downloading custom maps or mods from untrusted sources. That catchy background music might just be a remote access trojan singing to you.

Fix Analysis (1)

Technical Appendix

CVSS Score
10.0/ 10
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H
EPSS Probability
0.04%
Top 87% most exploited

Affected Systems

Turso3D Game EngineGames built with Turso3D < PR #11

Affected Versions Detail

Product
Affected Versions
Fixed Version
turso3d
cadaver
< PR #11PR #11
AttributeDetail
Attack VectorLocal / Network (via File)
CVSS v4.010.0 (Critical)
ImpactRCE, DoS, Info Leak
Main CWECWE-787 (Out-of-bounds Write)
Fix ComplexityLow (Library Update)
Exploit StatusPoC Available (Historic)
CWE-787
Out-of-bounds Write

Multiple memory safety errors including stack/heap buffer overflows and out-of-bounds reads.

Vulnerability Timeline

Original vulnerabilities discovered in stb_vorbis upstream
2019-07-01
CVE-2026-24826 Published for Turso3D
2026-01-27
PR #11 Merged in Turso3D
2026-01-27

Subscribe to updates

Get the latest CVE analysis reports delivered to your inbox.