CWEweakness
CWE-787 Out-of-bounds Write
High
Official page ↗
- Alternate terms
- Memory Corruption
- Abstraction
- Base
- Structure
- Simple
- Status
- Draft
- Likelihood of exploit
- High
- Languages
- Assembly, C, C++, Memory-Unsafe
- CWE version
- 5.0
Description
The product writes data past the end, or before the beginning, of the intended buffer.
Common consequences
• Integrity: Modify Memory, Execute Unauthorized Code or Commands — Write operations could cause memory corruption. In some cases, an adversary can modify control data such as return addresses in order to execute unexpected code.
• Availability: DoS: Crash, Exit, or Restart — Attempting to access out-of-range, invalid, or unauthorized memory could cause the product to crash.
• Other: Unexpected State — Subsequent write operations can produce undefined or unexpected results.
Potential mitigations
• [Requirements] Use a language that does not allow this weakness to occur or provides constructs that make this weakness easier to avoid.
For example, many languages that perform their own memory management, such as Java and Perl, are not subject to buffer overflows. Other languages, such as Ada and C#, typically provide overflow protection, but the protection can be disabled by the programmer.
Be wary that a language's interface to native code may still be subject to overflows, even if the language itself is theoretically safe.
• [Architecture and Design] Use a vetted library or framework that does not allow this weakness to occur or provides constructs that make this weakness easier to avoid.
Examples include the Safe C String Library (SafeStr) by Messier and Viega [REF-57], and the Strsafe.h library from Microsoft [REF-56]. These libraries provide safer versions of overflow-prone string-handling functions.
• [Operation, Build and Compilation] Use automatic buffer overflow detection mechanisms that are offered by certain compilers or compiler extensions. Examples include: the Microsoft Visual Studio /GS flag, Fedora/Red Hat FORTIFY_SOURCE GCC flag, StackGuard, and ProPolice, which provide various mechanisms including canary-based detection and range/index checking.
D3-SFCV (Stack Frame Canary Validation) from D3FEND [REF-1334] discusses canary-based detection in detail.
• [Implementation] Consider adhering to the following rules when allocating and managing an application's memory:
• Double check that the buffer is as large as specified.
• When using functions that accept a number of bytes to copy, such as strncpy(), be aware that if the destination buffer size is equal to the source buffer size, it may not NULL-terminate the string.
• Check buffer boundaries if accessing the buffer in a loop and make sure there is no danger of writing past the allocated space.
• If necessary, truncate all input strings to a reasonable length before passing them to the copy and concatenation functions.
• [Operation, Build and Compilation] Run or compile the software using features or extensions that randomly arrange the positions of a program's executable and libraries in memory. Because this makes the addresses unpredictable, it can prevent an attacker from reliably jumping to exploitable code.
Examples include Address Space Layout Randomization (ASLR) [REF-58] [REF-60] and Position-Independent Executables (PIE) [REF-64]. Imported modules may be similarly realigned if their default memory addresses conflict with other modules, in a process known as "rebasing" (for Windows) and "prelinking" (for Linux) [REF-1332] using randomly generated addresses. ASLR for libraries cannot be used in conjunction with prelink since it would require relocating the libraries at run-time, defeating the whole purpose of prelinking.
For more information on these techniques see D3-SAOR (Segment Address Offset Randomization) from D3FEND [REF-1335].
• [Operation] Use a CPU and operating system that offers Data Execution Protection (using hardware NX or XD bits) or the equivalent techniques that simulate this feature in software, such as PaX [REF-60] [REF-61]. These techniques ensure that any instruction executed is exclusively at a memory address that is part of the code segment.
For more information on these techniques see D3-PSEP (Process Segment Execution Prevention) from D3FEND [REF-1336].
• [Implementation] Replace unbounded copy functions with analogous functions that support length arguments, such as strcpy with strncpy. Create these if they are not available.
Detection methods
• Automated Static Analysis: This weakness can often be detected using automated static analysis tools. Many modern tools use data flow analysis or constraint-based techniques to minimize the number of false positives.
Automated static analysis generally does not account for environmental considerations when reporting out-of-bounds memory operations. This can make it difficult for users to determine which warnings should be investigated first. For example, an analysis tool might report buffer overflows that originate from command line arguments in a program that is not expected to run with setuid or other special privileges.
• Automated Dynamic Analysis: This weakness can be detected using dynamic tools and techniques that interact with the software using large test suites with many diverse inputs, such as fuzz testing (fuzzing), robustness testing, and fault injection. The software's operation may slow down, but it should not become unstable, crash, or generate incorrect results.
• Automated Dynamic Analysis: Use tools that are integrated during
compilation to insert runtime error-checking mechanisms
related to memory safety errors, such as AddressSanitizer
(ASan) for C/C++ [REF-1518].
Observed examples
• CVE-2026-7270: Chain: calculation expression does not use parentheses to address operator precedence (CWE-783), causing an incorrect calculation (CWE-682) leading to a buffer overflow (CWE-787).
• CVE-2025-27363: Font rendering library does not properly
handle assigning a signed short value to an unsigned
long (CWE-195), leading to an integer wraparound
(CWE-190), causing too small of a buffer (CWE-131),
leading to an out-of-bounds write
(CWE-787).
• CVE-2023-1017: The reference implementation code for a Trusted Platform Module does not implement length checks on data, allowing for an attacker to write 2 bytes past the end of a buffer.
• CVE-2021-21220: Chain: insufficient input validation (CWE-20) in browser allows heap corruption (CWE-787), as exploited in the wild per CISA KEV.
• CVE-2021-28664: GPU kernel driver allows memory corruption because a user can obtain read/write access to read-only pages, as exploited in the wild per CISA KEV.
• CVE-2020-17087: Chain: integer truncation (CWE-197) causes small buffer allocation (CWE-131) leading to out-of-bounds write (CWE-787) in kernel pool, as exploited in the wild per CISA KEV.
• CVE-2020-1054: Out-of-bounds write in kernel-mode driver, as exploited in the wild per CISA KEV.
• CVE-2020-0041: Escape from browser sandbox using out-of-bounds write due to incorrect bounds check, as exploited in the wild per CISA KEV.
• CVE-2020-0968: Memory corruption in web browser scripting engine, as exploited in the wild per CISA KEV.
• CVE-2020-0022: Chain: mobile phone Bluetooth implementation does not include offset when calculating packet length (CWE-682), leading to out-of-bounds write (CWE-787)
• CVE-2019-1010006: Chain: compiler optimization (CWE-733) removes or modifies code used to detect integer overflow (CWE-190), allowing out-of-bounds write (CWE-787).
• CVE-2009-1532: malformed inputs cause accesses of uninitialized or previously-deleted objects, leading to memory corruption
• CVE-2009-0269: Chain: -1 value from a function call was intended to indicate an error, but is used as an array index instead.
• CVE-2002-2227: Unchecked length of SSLv2 challenge value leads to buffer underflow.
• CVE-2007-4580: Buffer underflow from a small size value with a large buffer (length parameter inconsistency, CWE-130)
• CVE-2007-4268: Chain: integer signedness error (CWE-195) passes signed comparison, leading to heap overflow (CWE-122)
• CVE-2009-2550: Classic stack-based buffer overflow in media player using a long entry in a playlist
• CVE-2009-2403: Heap-based buffer overflow in media player using a long entry in a playlist
Related
Observed example · CVE (18)
- CVE-2026-7270 An operator precedence bug in the kernel results in a scenario where a buffer overflow causes attacker-controlled data to overwrite… vulnerability
- CVE-2025-27363 An out of bounds write exists in FreeType versions 2.13.0 and below (newer versions of FreeType are not vulnerable) when attempting to… vulnerability
- CVE-2023-1017 An out-of-bounds write vulnerability exists in TPM2.0's Module Library allowing writing of a 2-byte data past the end of TPM2.0 command in… vulnerability
- CVE-2021-28664 The Arm Mali GPU kernel driver allows privilege escalation or a denial of service (memory corruption) because an unprivileged user can… vulnerability
- CVE-2021-21220 Insufficient validation of untrusted input in V8 in Google Chrome prior to 89.0.4389.128 allowed a remote attacker to potentially exploit… vulnerability
- CVE-2020-17087 Windows Kernel Local Elevation of Privilege Vulnerability vulnerability
- CVE-2020-1054 An elevation of privilege vulnerability exists in Windows when the Windows kernel-mode driver fails to properly handle objects in memory. vulnerability
- CVE-2020-0968 A remote code execution vulnerability exists in the way that the scripting engine handles objects in memory in Internet Explorer, aka… vulnerability
- CVE-2020-0041 In binder_transaction of binder.c, there is a possible out of bounds write due to an incorrect bounds check. vulnerability
- CVE-2020-0022 In reassemble_and_dispatch of packet_fragmenter.cc, there is possible out of bounds write due to an incorrect bounds calculation. vulnerability
- CVE-2019-1010006 Evince 3.26.0 is affected by buffer overflow. vulnerability
- CVE-2009-2550 Stack-based buffer overflow in Hamster Audio Player 0.3a allows remote attackers to execute arbitrary code via a long string in a (1) .m3u… vulnerability
- CVE-2009-2403 Heap-based buffer overflow in SCMPX 1.5.1 allows remote attackers to cause a denial of service (application crash) or execute arbitrary… vulnerability
- CVE-2009-1532 Microsoft Internet Explorer 8 for Windows XP SP2 and SP3; 8 for Server 2003 SP2; 8 for Vista Gold, SP1, and SP2; and 8 for Server 2008 SP2… vulnerability
- CVE-2009-0269 fs/ecryptfs/inode.c in the eCryptfs subsystem in the Linux kernel before 2.6.28.1 allows local users to cause a denial of service (fault or… vulnerability
- CVE-2007-4268 Integer signedness error in the Networking component in Apple Mac OS X 10.4 through 10.4.10 allows local users to execute arbitrary code… vulnerability
- CVE-2007-4580 Buffer underflow in redlight.sys in BufferZone 2.1 and 2.5 allows local users to cause a denial of service (crash) and possibly execute… vulnerability
- CVE-2002-2227 Buffer underflow in ssldump 0.9b2 and earlier allows remote attackers to cause a denial of service (memory corruption) via a crafted SSLv2… vulnerability
Child of · CWE (1)
- CWE-119 Improper Restriction of Operations within the Bounds of a Memory Buffer weakness
Referenced by CVE · weakness (15,327)
- CVE-2026-111730 P-Net before 1.0.3 does not validate the LengthPeerStationName field of a CheckPeers block in get_check_peer(). vulnerability
- CVE-2026-111732 P-Net before 1.0.3, when built with PNET_OPTION_AR_VENDOR_BLOCKS enabled, parses a data length from a field of the ARVendorBlock request… vulnerability
- CVE-2026-118673 KeePassXC is a cross-platform community-driven port of the Windows application KeePass Password Safe. vulnerability
- CVE-2026-93011 A flaw was found in dnsmasq. vulnerability
- CVE-2026-103391 An Out-of-bounds Write vulnerability in the SSR TCP proxy/optimization path in Juniper Networks Session Smart Router allows an attacker to… vulnerability
- CVE-2026-103392 An Out-of-Bounds Write vulnerability in the TCP header processing in Juniper Networks Session Smart Router allows an attacker to corrupt… vulnerability
- CVE-2026-118375 llama.cpp b8841 before b11865 contains an out-of-bounds write vulnerability in the ggml-rpc RDMA transport rdma_recv() function that allows… vulnerability
- CVE-2026-118435 Out-of-bounds write vulnerability in Samsung Open Source escargot allows Buffer Manipulation. vulnerability
- CVE-2026-118752 FreeImage (danoli3 fork) before 3.19.22 contains a heap buffer overflow vulnerability in the PBM RLE decoder of PluginIFF.cpp that lacks… vulnerability
- CVE-2026-118753 FreeImage (danoli3 fork) before 3.19.25 contains a heap buffer overflow vulnerability in PluginGIF.cpp that allows attackers to write past… vulnerability
- CVE-2026-47235 SimulationCraft is a tool to explore combat mechanics in World of Warcraft. vulnerability
- CVE-2026-58458 Don't Starve Together (Steam AppID 322330) through build 747465 contains a memory-corruption vulnerability in the native persistent-string… vulnerability
- CVE-2026-82961 The GPIO syscall handlers in drivers/gpio/gpio_handlers.c did not validate the pin argument supplied by a user-mode caller. vulnerability
- CVE-2026-82962 ethernet_fill_header() in subsys/net/l2/ethernet/ethernet.c can prepend the Ethernet header in place, by pushing it into the headroom of… vulnerability
- CVE-2026-86377 Dell PowerProtect Data Domain, Feature Release versions 7.7.1.0 through 8.8, LTS2024 release versions 7.13.1.0 through 7.13.1.80, LTS2025… vulnerability
- CVE-2026-103593 A stack-based buffer overflow vulnerability in the Fireware OS logging service allows a network-adjacent attacker who can impersonate or… vulnerability
- CVE-2026-103594 A stack-based buffer overflow vulnerability in Fireware OS's WireGuard configuration processing allows a remote attacker that has… vulnerability
- CVE-2026-107590 An out-of-bounds write vulnerability in the Qt QTextCodec iconv-based encoding of the Qt 5 Compatibility APIs module (Qt Core in Qt 5 and… vulnerability
- CVE-2026-112709 A heap-based buffer overflow vulnerability in the Fireware OS authentication service allows an attacker who controls or intercepts traffic… vulnerability
- CVE-2026-116842 DevilutionX 1.4.0 through 1.5.5 contains a heap buffer overflow vulnerability in the bundled libmpq libmpq__archive_dup routine when… vulnerability
- CVE-2026-118342 Out of bounds write in Editing in Google Chrome prior to 156.0.8078.73 allowed a remote attacker to potentially execute arbitrary code… vulnerability
- CVE-2026-47486 NVIDIA PhysX for all platforms contains a vulnerability where an attacker could cause an out-of-bounds write. vulnerability
- CVE-2026-57188 Asterisk is an open source private branch exchange and telephony toolkit. vulnerability
- CVE-2026-57189 Asterisk is an open source private branch exchange and telephony toolkit. vulnerability
- CVE-2026-57191 Asterisk is an open source private branch exchange and telephony toolkit. vulnerability
- CVE-2026-57192 Asterisk is an open source private branch exchange and telephony toolkit. vulnerability
- CVE-2026-57194 Asterisk is an open source private branch exchange and telephony toolkit. vulnerability
- CVE-2026-57197 Asterisk is an open source private branch exchange and telephony toolkit. vulnerability
- CVE-2026-57199 Asterisk is an open source private branch exchange and telephony toolkit. vulnerability
- CVE-2026-57201 Asterisk is an open source private branch exchange and telephony toolkit. vulnerability
Referenced by CWE · can precede (4)
Referenced by CWE · child of (6)
- CWE-120 Buffer Copy without Checking Size of Input weakness
- CWE-121 Stack-based Buffer Overflow weakness
- CWE-122 Heap-based Buffer Overflow weakness
- CWE-123 Write-what-where Condition weakness
- CWE-124 Buffer Underwrite weakness
- CWE-785 Use of Path Manipulation Function without Maximum-sized Buffer weakness
Referenced by CWE · has member (8)
- CWE-1200 Weaknesses in the 2019 CWE Top 25 Most Dangerous Software Errors view
- CWE-1337 Weaknesses in the 2021 CWE Top 25 Most Dangerous Software Weaknesses view
- CWE-1350 Weaknesses in the 2020 CWE Top 25 Most Dangerous Software Weaknesses view
- CWE-1387 Weaknesses in the 2022 CWE Top 25 Most Dangerous Software Weaknesses view
- CWE-1425 Weaknesses in the 2023 CWE Top 25 Most Dangerous Software Weaknesses view
- CWE-1430 Weaknesses in the 2024 CWE Top 25 Most Dangerous Software Weaknesses view
- CWE-1435 Weaknesses in the 2025 CWE Top 25 Most Dangerous Software Weaknesses view
- CWE-1460 Weaknesses Addressed by the Top 20 Secure PLC Coding Practices view
Referenced by CWE · overlaps (1)
- CWE-788 Access of Memory Location After End of Buffer weakness