Description
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.
Potential Impact
Integrity
Modify Application Data
Demonstrative Examples
char *foo;
foo=malloc(sizeof(char)*5);
foo[0]='a';
foo[1]='a';
foo[2]=fgetc(stdin);
foo[3]='c';
foo[4]='\0';
printf("%c %c %c %c %c \n",foo[0],foo[1],foo[2],foo[3],foo[4]);
printf("%s\n",foo);Mitigations & Prevention
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.
Related Weaknesses
Taxonomy Mappings
- CLASP: — Addition of data-structure sentinel
- CERT C Secure Coding: STR03-C — Do not inadvertently truncate a null-terminated byte string
- CERT C Secure Coding: STR06-C — Do not assume that strtok() leaves the parse string unchanged
Frequently Asked Questions
What is CWE-464?
CWE-464 (Addition of Data Structure Sentinel) is a software weakness identified by MITRE's Common Weakness Enumeration. It is classified as a Base-level weakness. The accidental addition of a data-structure sentinel can cause serious programming logic problems.
How can CWE-464 be exploited?
Attackers can exploit CWE-464 (Addition of Data Structure Sentinel) to modify application data. This weakness is typically introduced during the Implementation phase of software development.
How do I prevent CWE-464?
Key mitigations include: Encapsulate the user from interacting with data sentinels. Validate user input to verify that sentinels are not present.
What is the severity of CWE-464?
CWE-464 is classified as a Base-level weakness (Medium abstraction). Its actual severity depends on the specific context and how the weakness manifests in your application.