CVE-2026-15603: morgan vulnerable to Log Forging via unescaped Unicode line separators
Impact
Morgan writes attacker-controlled request data to the access log through its tokens. The 1.11.0 fix neutralizes C0 control characters, DEL, and backslash, but it does not escape the Unicode line separators U+0085 (NEL), U+2028 (LINE SEPARATOR), or U+2029 (PARAGRAPH SEPARATOR). These code points are reachable through several tokens, including the request URL (:url), request headers such as :user-agent and :referrer, arbitrary :req[header] values, and the Basic auth username (:remote-user). NEL is valid obs-text in HTTP header values, so an attacker can place it in an ordinary request header.
When such a value is logged, the raw code points survive into the emitted access-log record, and downstream ECMAScript-aware or Unicode-aware log processing splits the single physical record into multiple logical records. This allows an attacker to forge log entries. The built-in combined, common, default, and short formats are affected, as well as any custom format. This is an incomplete fix of CVE-2026-5078.
Patches
Users should upgrade to version 1.12.0.
Workarounds
None. The affected values include the request URL and request headers, which are core to access logging, so there is no practical format-based mitigation. Upgrade to 1.12.0.
Other sources
morgan is an HTTP request logger middleware for Node.js. In versions prior to 1.12.0, the internal helper that escapes log token values did not neutralize the Unicode line separator characters U+0085 (Next Line), U+2028 (Line Separator), and U+2029 (Paragraph Separator). An unauthenticated remote client can place these characters in an attacker-controlled log token, for example a Basic auth username surfaced through the remote-user token, so that Unicode-aware downstream log processing splits a single request log into multiple logical records. This is a log forging issue (CWE-117) and an incomplete-fix follow-up to CVE-2026-5078, which only addressed ASCII control characters. The issue is fixed in morgan 1.12.0, which extends the escaping set to cover these Unicode line separators. Upgrade to morgan 1.12.0 to remediate.
— MITRE
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
npm/morganto a version that resolves this vulnerability.Fixed in 1.12.0 - Upgrade
Upgrade
morganto a version that resolves this vulnerability.Fixed in 1.12.0
Event History
Frequently Asked Questions
Who is exposed to this issue?
Applications using morgan versions earlier than 1.12.0 are affected if attacker-controlled values can be included in logged tokens. An unauthenticated remote client can trigger the issue, for example by supplying a Basic authentication username that is logged through the remote-user token.
What does successful exploitation require?
The attacker needs to inject U+0085, U+2028, or U+2029 into an attacker-controlled value that morgan writes to a log token. The downstream log processor must treat these Unicode characters as line separators for the injected content to be split into separate logical records.
How can this be remediated?
Upgrade morgan to version 1.12.0. This version escapes U+0085, U+2028, and U+2029 in addition to the ASCII control characters addressed by the earlier fix.