Cwe - Cwe-121
Cwe - Cwe-121
Home About ▼ CWE List ▼ Mapping ▼ Top-N Lists ▼ Community ▼ News ▼ Search
Mapping
View customized information: Conceptual Operational Complete Custom
Friendly
Description
A stack-based buffer overflow condition is a condition where the buffer being overwritten is allocated on the stack (i.e., is a
local variable or, rarely, a parameter to a function).
Alternate Terms
Stack Overflow: "Stack Overflow" is often used to mean the same thing as stack-based buffer overflow, however it
is also used on occasion to mean stack exhaustion, usually a result from an excessively
recursive function call. Due to the ambiguity of the term, use of stack overflow to describe either
circumstance is discouraged.
Relationships
Relevant to the view "Research Concepts" (CWE-1000)
Nature Type ID Name
ChildOf 787 Out-of-bounds Write
ChildOf 788 Access of Memory Location After End of Buffer
Modes Of Introduction
Phase Note
Implementation
Applicable Platforms
Languages
C (Undetermined Prevalence)
C++ (Undetermined Prevalence)
Demonstrative Examples
Example 1
While buffer overflow examples can be rather complex, it is possible to have very simple, yet still exploitable, stack-based
buffer overflows:
The buffer size is fixed, but there is no guarantee the string in argv[1] will not exceed this size and cause an overflow.
Example 2
This example takes an IP address from a user, verifies that it is well formed and then looks up the hostname and copies it into
a buffer.
validate_addr_form(user_supplied_addr);
addr = inet_addr(user_supplied_addr);
hp = gethostbyaddr( addr, sizeof(struct in_addr), AF_INET);
strcpy(hostname, hp->h_name);
}
This function allocates a buffer of 64 bytes to store the hostname, however there is no guarantee that the hostname will not be
larger than 64 bytes. If an attacker specifies an address which resolves to a very large hostname, then the function may
overwrite sensitive data or even relinquish control flow to the attacker.
Note that this example also contains an unchecked return value (CWE-252) that can lead to a NULL pointer dereference (CWE-
476).
Observed Examples
Reference Description
CVE-2021-35395 Stack-based buffer overflows in SFK for wifi chipset used for IoT/embedded devices, as
exploited in the wild per CISA KEV.
Potential Mitigations
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.
Effectiveness: Defense in Depth
Note:
This is not necessarily a complete solution, since these mechanisms only detect certain types of overflows. In
addition, the result is still a denial of service, since the typical response is to exit the application.
Phase: Implementation
Implement and perform bounds checking on input.
Phase: Implementation
Do not use dangerous functions such as gets. Use safer, equivalent functions which check for boundary errors.
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].
Effectiveness: Defense in Depth
Note: These techniques do not provide a complete solution. For instance, exploits frequently use a bug that
discloses memory addresses in order to maximize reliability of code execution [REF-1337]. It has also been shown
that a side-channel attack can bypass ASLR [REF-1333]
Memberships
Reason: Acceptable-Use
Rationale:
This CWE entry is at the Variant level of abstraction, which is a preferred level of abstraction for mapping to the root
causes of vulnerabilities.
Comments:
Carefully read both the name and description to ensure that this mapping is an appropriate fit. Do not try to 'force' a
mapping to a lower-level Base/Variant simply to comply with this preferred level of abstraction.
Content History
Submissions
Submission Date Submitter Organization
2006-07-19 CLASP
(CWE Draft 3, 2006-07-19)
Modifications