Incomplete Filtering of Multiple Instances of Special Elements

Incomplete Variant
Structure: Simple
Description

This vulnerability occurs when an application receives data from a source but fails to remove or neutralize every instance of a potentially dangerous element before passing that data to another component.

Extended Description

This flaw is a common oversight in input validation and sanitization routines. It happens when a filter or sanitizer processes data but only handles the first, last, or a single instance of a special character, command, or code sequence (like '--' for SQL comments or '<script>' tags). Attackers can bypass these incomplete defenses by injecting multiple instances of the element, allowing at least one to slip through and potentially cause injection, cross-site scripting (XSS), or other security issues. Incomplete filtering can affect both sequential elements (where dangerous patterns appear right next to each other) and non-sequential elements (where they are scattered throughout the input). To prevent this, developers must ensure their sanitization logic iterates through the entire input payload, removing or encoding all occurrences of the targeted special elements, not just one.

Common Consequences 1
Scope: Integrity

Impact: Unexpected State

Demonstrative Examples 1

ID : DX-2

The following code takes untrusted input and uses a regular expression to filter "../" from the input. It then appends this result to the /home/user/ directory and attempts to read the file in the final resulting path.

Code Example:

Bad
Perl
perl
Since the regular expression does not have the /g global match modifier, it only removes the first instance of "../" it comes across. So an input value such as:

Code Example:

Attack
bash
will have the first "../" stripped, resulting in:

Code Example:

Result
bash
This value is then concatenated with the /home/user/ directory:

Code Example:

Result
bash
which causes the /etc/passwd file to be retrieved once the operating system has resolved the ../ sequences in the pathname. This leads to relative path traversal (Relative Path Traversal).
Modes of Introduction
Implementation