Addition of Data Structure Sentinel

Incomplete Base
Structure: Simple
Description

The accidental addition of a data-structure sentinel can cause serious programming logic problems.

Extended Description

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.

Common Consequences 1
Scope: Integrity

Impact: Modify Application Data

Generally this error will cause the data structure to not work properly by truncating the data.

Potential Mitigations 4
Phase: ImplementationArchitecture and Design
Encapsulate the user from interacting with data sentinels. Validate user input to verify that sentinels are not present.
Phase: Implementation
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.
Phase: Architecture and Design
Use an abstraction library to abstract away risky APIs. This is not a complete solution.
Phase: Operation
Use OS-level preventative functionality. This is not a complete solution.
Demonstrative Examples 1
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.

Code Example:

Bad
C
c
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.
References 1
The CLASP Application Security Process
Secure Software, Inc.
2005
ID: REF-18
Likelihood of Exploit

High

Applicable Platforms
Languages:
C : UndeterminedC++ : Undetermined
Modes of Introduction
Implementation
Taxonomy Mapping
  • CLASP
  • CERT C Secure Coding
  • CERT C Secure Coding