![]() |
VOOZH | about |
A community-developed list of SW & HW weaknesses that can become vulnerabilities
CWE-93: Improper Neutralization of CRLF Sequences ('CRLF Injection')
View customized information:
For users who are interested in more notional aspects of a weakness. Example: educators, technical writers, and project/program managers.
For users who are concerned with the practical application and details about the nature of a weakness and how to prevent it from happening. Example: tool developers, security researchers, pen-testers, incident response analysts.
For users who are mapping an issue to CWE/CAPEC IDs, i.e., finding the most appropriate CWE for a specific issue (e.g., a CVE record). Example: tool developers, security researchers.
For users who wish to see all available information for the CWE/CAPEC entry.
For users who want to customize what details are displayed.
×
Edit Custom Filter
👁 +
Description
👁 +
Common Consequences 👁 Section Help
This table specifies different individual consequences associated with the weakness. The Scope identifies the application security area that is violated, while the Impact describes the negative technical impact that arises if an adversary succeeds in exploiting this weakness. The Likelihood provides information about how likely the specific consequence is expected to be seen relative to the other consequences in the list. For example, there may be high likelihood that a weakness will be exploited to achieve a certain impact, but a low likelihood that it will be exploited to achieve a different impact.
👁 +
Potential Mitigations
👁 +
Relationships
👁 Section Help
This table shows the weaknesses and high level categories that are related to this weakness. These relationships are defined as ChildOf, ParentOf, MemberOf and give insight to similar items that may exist at higher and lower levels of abstraction. In addition, relationships such as PeerOf and CanAlsoBe are defined to show similar weaknesses that the user may want to explore.
👁 +
Relevant to the view "Research Concepts" (View-1000)
👁 +
Relevant to the view "Software Development" (View-699)
👁 +
Relevant to the view "Architectural Concepts" (View-1008)
👁 +
Modes Of Introduction 👁 Section Help
The different Modes of Introduction provide information about how and when this weakness may be introduced. The Phase identifies a point in the life cycle at which introduction may occur, while the Note provides a typical scenario related to introduction during the given phase.
👁 +
Applicable Platforms 👁 Section Help
This listing shows possible areas for which the given weakness could appear. These may be for specific named Languages, Operating Systems, Architectures, Paradigms, Technologies, or a class of such platforms. The platform is listed along with how frequently the given weakness appears for that instance.
👁 +
Demonstrative Examples Example 1 The following code segment reads the name of the author of a weblog entry, author, from an HTTP request and sets it in a cookie header of an HTTP response. (bad code)
Example Language: Java
String author = request.getParameter(AUTHOR_PARAM);
... Cookie cookie = new Cookie("author", author); cookie.setMaxAge(cookieExpiration); response.addCookie(cookie); Assuming a string consisting of standard alpha-numeric characters, such as "Jane Smith", is submitted in the request the HTTP response including this cookie might take the following form: (result)
HTTP/1.1 200 OK
... Set-Cookie: author=Jane Smith ... However, because the value of the cookie is composed of unvalidated user input, the response will only maintain this form if the value submitted for AUTHOR_PARAM does not contain any CR and LF characters. If an attacker submits a malicious string, such as (attack code)
Wiley Hacker\r\nHTTP/1.1 200 OK\r\n
then the HTTP response would be split into two responses of the following form: (result)
HTTP/1.1 200 OK
... Set-Cookie: author=Wiley Hacker HTTP/1.1 200 OK ... The second response is completely controlled by the attacker and can be constructed with any header and body content desired. The ability to construct arbitrary HTTP responses permits a variety of resulting attacks, including:
Example 2 The following code is a workflow job written using YAML. The code attempts to download pull request artifacts, unzip from the artifact called pr.zip and extract the value of the file NR into a variable "pr_number" that will be used later in another job. It attempts to create a github workflow environment variable, writing to $GITHUB_ENV. The environment variable value is retrieved from an external resource. (bad code)
Example Language: Other
name: Deploy Preview
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: 'Download artifact'
uses: actions/github-script with:
script: |
- run: |
var artifacts = await github.actions.listWorkflowRunArtifacts({
owner: context.repo.owner,
});repo: context.repo.repo, run_id: ${{ github.event.workflow_run.id }}, var matchPrArtifact = artifacts.data.artifacts.filter((artifact) => {
return artifact.name == "pr"
})[0];var downloadPr = await github.actions.downloadArtifact({
owner: context.repo.owner,
});repo: context.repo.repo, artifact_id: matchPrArtifact.id, archive_format: 'zip', var fs = require('fs'); fs.writeFileSync('${{github.workspace}}/pr.zip', Buffer.from(downloadPr.data));
unzip pr.zip
echo "pr_number=$(cat NR)" >> $GITHUB_ENV The code does not neutralize the value of the file NR, which is attacker controlled because it originates from a pull request that produced pr.zip. The attacker could escape the existing pr_number and create a new variable using a "\n" (CWE-93) followed by any environment variable to be added such as: (attack code)
\nNODE_OPTIONS="--experimental-modules --experiments-loader=data:text/javascript,console.log('injected code');//"
This would result in injecting and running javascript code (CWE-94) on the workflow runner with elevated privileges. (good code)
Example Language: Other
The code could be modified to validate that the NR
file only contains a numeric value, or the code could
retrieve the PR number from a more trusted source.
Example 3 If user input data that eventually makes it to a log message isn't checked for CRLF characters, it may be possible for an attacker to forge entries in a log file. (bad code)
Example Language: Java
logger.info("User's street address: " + request.getParameter("streetAddress"));
👁 +
Selected Observed Examples Note: this is a curated list of examples for users to understand the variety of ways in which this weakness can be introduced. It is not a complete list of all CVEs that are related to this CWE entry.
👁 +
Weakness Ordinalities
👁 +
Detection Methods
👁 +
Memberships
👁 Section Help
This MemberOf Relationships table shows additional CWE Categories and Views that reference this weakness as a member. This information is often useful in understanding where a weakness fits within the context of external information sources.
👁 +
Vulnerability Mapping Notes
👁 +
Taxonomy Mappings
👁 +
Related Attack Patterns 👁 +
References
👁 +
Content History
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||