0% found this document useful (0 votes)
98 views3 pages

Buffer Underwrite Vulnerability Guide

This document describes the Common Weakness Enumeration (CWE) entry for CWE-124: Buffer Underwrite ('Buffer Underflow'). It provides the definition, relationships to other CWE entries, examples of buffer underflows in code, and potential mitigations.

Uploaded by

vinaybhadeshiya6
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
98 views3 pages

Buffer Underwrite Vulnerability Guide

This document describes the Common Weakness Enumeration (CWE) entry for CWE-124: Buffer Underwrite ('Buffer Underflow'). It provides the definition, relationships to other CWE entries, examples of buffer underflows in code, and potential mitigations.

Uploaded by

vinaybhadeshiya6
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 3

Common Weakness Enumeration

A community-developed list of SW & HW weaknesses that


can become vulnerabilities

Home About ▼ CWE List ▼ Mapping ▼ Top-N Lists ▼ Community ▼ News ▼ Search

CWE-124: Buffer Underwrite ('Buffer Underflow')


Weakness ID: 124
Vulnerability Mapping: ALLOWED
Abstraction: Base

Mapping
View customized information: Conceptual Operational Complete Custom
Friendly

Description
The product writes to a buffer using an index or pointer that references a memory location prior to the beginning of the buffer.
Extended Description
This typically occurs when a pointer or its index is decremented to a position before the buffer, when pointer arithmetic results
in a position before the beginning of the valid memory location, or when a negative index is used.
Alternate Terms

buffer underrun: Some prominent vendors and researchers use the term "buffer underrun". "Buffer underflow" is
more commonly used, although both terms are also sometimes used to describe a buffer under-
read (CWE-127).

Relationships
Relevant to the view "Research Concepts" (CWE-1000)
Nature Type ID Name
ChildOf 787 Out-of-bounds Write
ChildOf 786 Access of Memory Location Before Start of Buffer
CanFollow 839 Numeric Range Comparison Without Minimum Check

Relevant to the view "Software Development" (CWE-699)


Nature Type ID Name
MemberOf 1218 Memory Buffer Errors

Modes Of Introduction

Phase Note
Implementation

Applicable Platforms
Languages
C (Undetermined Prevalence)
C++ (Undetermined Prevalence)
Demonstrative Examples
Example 1
In the following C/C++ example, a utility function is used to trim trailing whitespace from a character string. The function
copies the input string to a local character string and uses a while statement to remove the trailing whitespace by moving
backward through the string and overwriting whitespace with a NUL character.

Example Language: C (bad code)

char* trimTrailingWhitespace(char *strMessage, int length) {


char *retMessage;
char *message = malloc(sizeof(char)*(length+1));

// copy input string to a temporary string


char message[length+1];
int index;
for (index = 0; index < length; index++) {
message[index] = strMessage[index];
}
message[index] = '\0';

// trim trailing whitespace


int len = index-1;
while (isspace(message[len])) {
message[len] = '\0';
len--;
}

// return string without trailing whitespace

tM
retMessage = message;
return retMessage;
}

However, this function can cause a buffer underwrite if the input character string contains all whitespace. On some systems
the while statement will move backwards past the beginning of a character string and will call the isspace() function on an
address outside of the bounds of the local buffer.
Example 2
The following is an example of code that may result in a buffer underwrite. This code is attempting to replace the substring
"Replace Me" in destBuf with the string stored in srcBuf. It does so by using the function strstr(), which returns a pointer to the
found substring in destBuf. Using pointer arithmetic, the starting index of the substring is found.

Example Language: C (bad code)

int main() {
...
char *result = strstr(destBuf, "Replace Me");
int idx = result - destBuf;
strcpy(&destBuf[idx], srcBuf);
...
}

In the case where the substring is not found in destBuf, strstr() will return NULL, causing the pointer arithmetic to be undefined,
potentially setting the value of idx to a negative number. If idx is negative, this will result in a buffer underwrite of destBuf.
Observed Examples

Reference Description
CVE-2021-24018 buffer underwrite in firmware verification routine allows code execution via a crafted
firmware image
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-1584 Buffer underflow from an all-whitespace string, which causes a counter to be
decremented before the buffer while looking for a non-whitespace character.
CVE-2007-0886 Buffer underflow resultant from encoded data that triggers an integer overflow.
CVE-2006-6171 Product sets an incorrect buffer size limit, leading to "off-by-two" buffer underflow.
CVE-2006-4024 Negative value is used in a memcpy() operation, leading to buffer underflow.
CVE-2004-2620 Buffer underflow due to mishandled special characters

Potential Mitigations

Phase: Requirements
Choose a language that is not susceptible to these issues.

Phase: Implementation
All calculated values that are used as index or for pointer arithmetic should be validated to ensure that they are
within an expected range.

Memberships

Nature Type ID Name


MemberOf 970 SFP Secondary Cluster: Faulty Buffer Access
MemberOf 1399 Comprehensive Categorization: Memory Safety

Vulnerability Mapping Notes

Usage: ALLOWED (this CWE ID could be used to map to real-world vulnerabilities)

Reason: Acceptable-Use

Rationale:

This CWE entry is at the Base 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 PLOVER
(CWE Draft 3, 2006-07-19)
Contributions
Contribution Date Contributor Organization
2023-02-06 Muchen Xu Naive Systems
Submissions
Pointed out that the demonstrative example #2 was incorrect and instead demonstrated a Buffer
Under-read.
Modifications
Previous Entry Names

You might also like