CWE-170: Improper Null Termination

Learn about CWE-170 (Improper Null Termination), its security impact, exploitation methods, and prevention guidelines.

What is Improper Null Termination?

• Overview: Improper Null Termination (CWE-170) occurs when a string or array is not correctly terminated with a null character. This can happen due to off-by-one errors or incorrect use of functions like strncpy(), leading to potential overflows or missing terminators.

• Exploitation Methods:

  • Attackers can exploit this vulnerability to cause buffer overflows by manipulating the expected string termination.
  • Common attack patterns include crafting inputs that lead to unexpected memory writes or reads, possibly executing arbitrary code.

• Security Impact:

  • Direct consequences include buffer overflows and memory corruption.
  • Potential cascading effects could involve unauthorized access, data leakage, or application crashes.
  • Business impact might involve service downtime, data breaches, or loss of customer trust.

• Prevention Guidelines:

  • Specific code-level fixes include always ensuring proper null termination with functions like strncpy() by manually adding a null character.
  • Security best practices involve thorough bounds checking, using safer string handling functions, and static analysis.
  • Recommended tools and frameworks include static analysis tools for detecting buffer overflows and adopting libraries that provide safer alternatives to standard C string functions.
Corgea can automatically detect and fix Improper Null Termination in your codebase. [Try Corgea free today](https://corgea.app).

Technical Details

Likelihood of Exploit: Medium

Affected Languages: C, C++

Affected Technologies: Not specified

Vulnerable Code Example

// Vulnerable code with detailed comments explaining the security issue

#include <stdio.h>
#include <string.h>

void copy_string(const char *source) {
    char buffer[10]; // Fixed buffer size
    // Vulnerability: Improper Null Termination
    // This code copies more characters than the buffer can hold, potentially
    // not leaving space for the null terminator.
    // If the source string is longer than the buffer, strncpy will not null-terminate
    // the destination, leading to potential buffer overflows when the string is used.
    strncpy(buffer, source, sizeof(buffer));
    printf("Buffer Content: %s\n", buffer);
}

int main() {
    const char *unsafe_input = "This is a very long string that exceeds the buffer!";
    copy_string(unsafe_input);
    return 0;
}

How to fix Improper Null Termination?

To fix the improper null termination vulnerability, ensure that the buffer is always null-terminated. When using functions like strncpy, which does not automatically null-terminate strings if the source string is longer than the specified number of characters, you must manually add a null terminator. Additionally, consider using safer functions that handle null termination automatically. When using strncpy, always subtract 1 from the buffer size to leave space for the null terminator and explicitly set the last character to '\0'.

Fixed Code Example

// Fixed code with comments explaining the security controls implemented

#include <stdio.h>
#include <string.h>

void copy_string(const char *source) {
    char buffer[10]; // Fixed buffer size
    // Fix: Proper Null Termination
    // The buffer is now explicitly null-terminated to prevent buffer overflow
    // and ensure the string is properly terminated.
    // By copying only sizeof(buffer) - 1 characters, we leave space for the null terminator.
    strncpy(buffer, source, sizeof(buffer) - 1);
    buffer[sizeof(buffer) - 1] = '\0'; // Explicit null termination
    printf("Buffer Content: %s\n", buffer);
}

int main() {
    const char *safe_input = "ShortStr";
    copy_string(safe_input);
    return 0;
}

In the fixed code, strncpy is used to copy up to sizeof(buffer) - 1 characters, ensuring there's always space for the null terminator. The explicit null termination with buffer[sizeof(buffer) - 1] = '\0'; guarantees the string is properly terminated, preventing potential buffer overflows and undefined behavior. This approach ensures that even if the input string is longer than the buffer, the buffer will not overflow, and the string will be safely null-terminated.

Corgea Logo

Find this vulnerability and fix it with Corgea

Scan your codebase for CWE-170: Improper Null Termination and get remediation guidance

Start for free and no credit card needed.