Name |
Using Leading 'Ghost' Character Sequences to Bypass Input Filters |
|
Likelyhood of attack |
Typical severity |
Medium |
Medium |
|
Summary |
Some APIs will strip certain leading characters from a string of parameters. An adversary can intentionally introduce leading "ghost" characters (extra characters that don't affect the validity of the request at the API layer) that enable the input to pass the filters and therefore process the adversary's input. This occurs when the targeted API will accept input data in several syntactic forms and interpret it in the equivalent semantic way, while the filter does not take into account the full spectrum of the syntactic forms acceptable to the targeted API. |
Prerequisites |
The targeted API must ignore the leading ghost characters that are used to get past the filters for the semantics to be the same. |
Execution Flow |
Step |
Phase |
Description |
Techniques |
1 |
Explore |
Determine if the source code is available and if so, examine the filter logic. |
|
2 |
Experiment |
If the source code is not available, write a small program that loops through various possible inputs to given API call and tries a variety of alternate (but equivalent) encodings of strings with leading ghost characters. Knowledge of frameworks and libraries used and what filters they apply will help to make this search more structured. |
|
3 |
Experiment |
Observe the effects. See if the probes are getting past the filters. Identify a string that is semantically equivalent to that which an adversary wants to pass to the targeted API, but syntactically structured in a way as to get past the input filter. That encoding will contain certain ghost characters that will help it get past the filters. These ghost characters will be ignored by the targeted API. |
|
4 |
Exploit |
Once the "winning" alternate encoding using (typically leading) ghost characters is identified, an adversary can launch the attacks against the targeted API (e.g. directory traversal attack, arbitrary shell command execution, corruption of files) |
|
|
Solutions | Use an allowlist rather than a denylist input validation. Canonicalize all data prior to validation. Take an iterative approach to input validation (defense in depth). |
Related Weaknesses |
CWE ID
|
Description
|
CWE-20 |
Improper Input Validation |
CWE-41 |
Improper Resolution of Path Equivalence |
CWE-74 |
Improper Neutralization of Special Elements in Output Used by a Downstream Component ('Injection') |
CWE-171 |
|
CWE-172 |
Encoding Error |
CWE-173 |
Improper Handling of Alternate Encoding |
CWE-179 |
Incorrect Behavior Order: Early Validation |
CWE-180 |
Incorrect Behavior Order: Validate Before Canonicalize |
CWE-181 |
Incorrect Behavior Order: Validate Before Filter |
CWE-183 |
Permissive List of Allowed Inputs |
CWE-184 |
Incomplete List of Disallowed Inputs |
CWE-697 |
Incorrect Comparison |
CWE-707 |
Improper Neutralization |
|
Related CAPECS |
CAPEC ID
|
Description
|
CAPEC-267 |
An adversary leverages the possibility to encode potentially harmful input or content used by applications such that the applications are ineffective at validating this encoding standard. |
|