The accidental addition of a data-structure sentinel can cause serious programming logic problems.
View on MITREData-structure sentinels are often used to mark the structure of data. A common example of this is the null character at the end of strings or a special sentinel to mark the end of a linked list. It is dangerous to allow this type of control data to be easily accessible. Therefore, it is important to protect from the addition or modification of sentinels.
Generally this error will cause the data structure to not work properly by truncating the data.
Encapsulate the user from interacting with data sentinels. Validate user input to verify that sentinels are not present.
Proper error checking can reduce the risk of inadvertently introducing sentinel values into data. For example, if a parsing function fails or encounters an error, it might return a value that is the same as the sentinel.
Use an abstraction library to abstract away risky APIs. This is not a complete solution.
Use OS-level preventative functionality. This is not a complete solution.
No detection method information available for this CWE.
The following example assigns some character values to a list of characters and prints them each individually, and then as a string. The third character value is intended to be an integer taken from user input and converted to an int.
The first print statement will print each character separated by a space. However, if a NULL byte is read from stdin by fgetc, then it will return 0. When foo is printed as a string, the 0 at character foo[2] will act as a NULL terminator and foo[3] will never be printed.
CWE-464: Addition of Data Structure Sentinel is a Common Weakness Enumeration (CWE) entry maintained by MITRE. The accidental addition of a data-structure sentinel can cause serious programming logic problems. Data-structure sentinels are often used to mark the structure of data. A common example of this is the null character at the end of strings or a special sentinel to mark the end of a linked list. It is dangerous to allow this type of control data to be easily accessible. Therefore, it is important to protect from the addition or modification of sentinels.
If exploited, CWE-464 (Addition of Data Structure Sentinel) it can compromise Integrity, leading to outcomes such as Modify Application Data.
Recommended mitigations for CWE-464 include: Encapsulate the user from interacting with data sentinels. Validate user input to verify that sentinels are not present. Proper error checking can reduce the risk of inadvertently introducing sentinel values into data. For example, if a parsing function fails or encounters an error, it might return a value that is the same as the sentinel. Use an abstraction library to abstract away risky APIs. This is not a complete solution.
CWE-464 commonly affects C and C++. Note that weaknesses are often language-agnostic patterns, so secure coding practices apply broadly.
A CWE (Common Weakness Enumeration) like CWE-464 describes a category of software weakness — the underlying flaw type. A CVE (Common Vulnerabilities and Exposures) identifies a specific, real-world vulnerability in a particular product. In short, a CWE is the kind of mistake, and a CVE is an instance of that mistake being found in software.