scanrub
Memory Corruption - Genericmedium prioritynot yet scanned

Memory Corruption - Generic

2 min read 195 reports analyzed ScanRub Research
Share

Summary

This is the umbrella CWE bucket for native-code memory-safety bugs - out-of-bounds reads/writes, use-after-free, double-free, and related classes - grouped here because the disclosed report either spanned more than one specific pattern or didn't specify precisely enough to sort into a narrower category. All of them share the same root cause: a memory-unsafe language (C, C++, and similar) letting code read or write outside the bounds of an allocation, or use memory that's already been freed, corrupting program state in ways that range from a crash to full remote code execution.

◈ flow diagram
Malformed or…Native Code …Bounds or Li…Memory Corru…Crash or Cod…

Why This Requires More Than a Black-Box Scan

Exploiting or even confirming a memory-corruption bug requires interacting with the actual compiled binary or its source - sending crafted input and observing a crash, running the code under a fuzzer or sanitizer (ASan, Valgrind), or reading the source directly. An HTTP-level black-box scan, which only ever sees request/response pairs, has no visibility into what happens inside the process's memory.

Where This Is Actually Caught

Fuzzing (AFL, libFuzzer) paired with memory sanitizers, static analysis of the source, and manual reverse engineering are the standard tools - this is squarely application-security-for-compiled-software territory, distinct from web/API scanning.

Tip: Because a report in this bucket can span more than one underlying pattern, triage starts with narrowing it to a specific class — overflow, use-after-free, or a pointer/arithmetic bug — since the fuzzing target and fix differ meaningfully between them even though the discovery tooling (fuzzers, sanitizers, static analysis) is the same.

Real-World Impact

Real-World Impact

This is the umbrella bucket for native-code memory-safety bugs whose disclosed report spanned more than one specific pattern, or didn't specify precisely enough to sort into a narrower class like buffer overflow or use-after-free. All of them share the same root cause: a memory-unsafe language (C, C++, and similar) letting code read or write outside the bounds of an allocation, or use memory that's already been freed, which corrupts program state in ways that range from a crash to full remote code execution.

The severity spread within this bucket is genuinely wide. A read-only out-of-bounds access might only leak adjacent memory contents; a write past a buffer boundary can overwrite a return address or function pointer and hand an attacker control of program execution outright. What they share is that the specific outcome depends on exploitation techniques (heap grooming, ASLR/DEP bypass, and similar) that go well beyond simply finding the bug.

Memory-safety bugs remain a leading cause of severe vulnerabilities in C/C++ codebases specifically because the language gives no automatic bounds checking — this is a big part of why newer systems languages (Rust, and similar) that enforce memory safety at compile time have gained real traction for exactly this class of risk.

Prevention & Remediation

Prevention and Secure Design

Preventing Memory Corruption - Generic takes a defense-in-depth approach — no single control below is sufficient alone, but together they close off both the primary path and the most common bypasses.

Prefer a memory-safe language for new native code. Rust and similar languages eliminate this entire bug class by construction for new components — this is the single highest-leverage structural fix available, where a rewrite is feasible.

Fuzz continuously, not once. Run AFL or libFuzzer against any C/C++ code that parses untrusted input, paired with sanitizers (ASan, UBSan) that turn a silent corruption into an immediate crash with a stack trace.

Enable compiler and OS-level mitigations by default. Stack canaries, ASLR, DEP/NX, and CFI don't fix the underlying bug but meaningfully raise the cost of turning it into reliable exploitation — verify they're actually enabled in the production build, not just the default toolchain assumption.

Bounds-checked containers and safe string APIs. Where a rewrite isn't feasible, replace raw pointer arithmetic and unsafe string functions (strcpy, sprintf, and similar) with their bounds-checked equivalents throughout the codebase, not just at the specific site a report identified.

Static analysis in CI. A static analyzer tuned for memory-safety patterns catches a meaningful share of these before the code ever reaches a fuzzer or a researcher.

Frequently Asked Questions

What is Memory Corruption - Generic?
This is the umbrella CWE bucket for native-code memory-safety bugs - out-of-bounds reads/writes, use-after-free, double-free, and related classes - grouped here because the disclosed report either spanned more than one specific pattern or didn't specify precisely enough to sort into a narrower category.
How common is Memory Corruption - Generic in bug bounty reports?
Scanrub's research corpus for this playbook is built from 195 disclosed HackerOne reports in this category, synthesized for detection and prevention guidance rather than reproduced verbatim.
Can Memory Corruption - Generic be found with an automated scanner?
Not reliably on its own — this class typically requires the kind of review described in "Where This Is Actually Caught" above (code-level review, fuzzing, red-teaming, or design review, depending on the specific mechanism), rather than an HTTP-level black-box scan.
What is the single most effective fix for Memory Corruption - Generic?
Prefer a memory-safe language for new native code; where that isn't feasible, fuzz continuously with sanitizers enabled and keep compiler/OS exploit mitigations turned on in production.
Weekly security research

New vulnerability playbooks, tool updates, and bug bounty insights - delivered to your inbox. No spam.

Unsubscribe anytime. We respect your inbox.
Press ⌘K to search×