CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-54511

CVE-2026-54511: Log Injection and Structured Data Key Injection in @logtape/syslog

Alon Barad
Alon Barad
Software Engineer

Aug 27, 2026·6 min read·17 visits

Executive Summary (TL;DR)

Unescaped control characters and unvalidated keys in LogTape's syslog structured data output allow remote attackers to inject forged log records and corrupt structured logs.

CVE-2026-54511 is a critical security vulnerability in the @logtape/syslog package, which serves as the syslog sink for the LogTape logging library. The flaw is caused by a failure to neutralize C0 control characters in structured data values and to validate keys against RFC 5424 SD-NAME specifications when structured data output is enabled. Remote attackers can leverage this defect to terminate TCP syslog frames and append completely forged syslog records to downstream collectors, compromising the integrity of audit trails and SIEM databases.

Vulnerability Overview

The vulnerability CVE-2026-54511 target-analyzes the @logtape/syslog package, which acts as the syslog transport sink for the LogTape logging ecosystem. This framework is responsible for sending log streams to remote syslog collectors or centralized Security Information and Event Management (SIEM) systems.

When structured logging is enabled by setting SyslogSinkOptions.includeStructuredData to true, the sink outputs key-value pairs representing application event attributes. This feature facilitates detailed metadata extraction by downstream processors.

However, the implementation fails to escape C0 control characters in values and fails to enforce character grammar rules on parameter keys. The missing sanitization opens two distinct attack vectors: CRLF/frame injection and structured data key parameter injection.

Root Cause Analysis

The underlying flaw resides in how structured data is compiled within packages/syslog/src/syslog.ts before socket transmission. According to RFC 5424 specifications, metadata elements inside structured data blocks must be sanitized to prevent boundary crossing.

Under RFC 6587 TCP syslog transport, non-transparent framing separates messages using literal newline (\n) delimiters. Because the vulnerable package does not strip or replace C0 control characters (specifically characters from U+0000 to U+001F) in structured values, an attacker who supplies a value containing a newline can force the sink to write a literal newline into the socket. The receiving syslog daemon parses this byte as a message delimiter and treats everything following it as a separate log frame.

Furthermore, the package does not validate keys against the RFC 5424 SD-NAME standard. This standard dictates that parameter keys must be between 1 and 32 characters and only consist of printable US-ASCII characters, excluding spaces, equals signs, quotes, and closing brackets. The lack of checking allows an attacker to supply keys that inject brackets or quotes, altering the layout of the structured metadata blocks.

Code Analysis and Patch Comparison

In versions prior to the fix, the escapeStructuredDataValue routine only targeted backslashes, double quotes, and closing brackets:

// VULNERABLE: Only replaces standard escapable characters
function escapeStructuredDataValue(value: string): string {
  return value
    .replace(/\\/g, "\\\\")
    .replace(/"/g, '\\"')
    .replace(/]/g, "\\\]");
}

This simple replacement fails to neutralize \n (LF), \r (CR), or \0 (Null bytes), which are written verbatim to the output buffer. The patch introduced in commit 7a6e5b9ddf7915edfff78fa129bc17c979b2a623 rewrote this routine to traverse strings character-by-character and escape control characters into their decimal #NNN equivalent:

// PATCHED: Escapes control characters to standard decimal formats
function escapeStructuredDataValue(value: string): string {
  let result = "";
  for (const char of value) {
    const charCode = char.charCodeAt(0);
    if (charCode <= 31) {
      // Safe decimal representation for C0 characters
      result += `#${charCode.toString(10).padStart(3, "0")}`;
    } else if (char === "\\") {
      result += "\\\\";
    } else if (char === '"') {
      result += '\\"';
    } else if (char === "]") {
      result += "\\\]";
    } else {
      result += char;
    } 
  } 
  return result;
}

To remediate key injection, a validator function named isStructuredDataName was added to verify every property key against the RFC 5424 SD-NAME constraints:

function isStructuredDataName(name: string): boolean {
  if (name.length < 1 || name.length > 32) return false;
  for (const char of name) {
    const charCode = char.charCodeAt(0);
    if (
      charCode <= 32 || charCode > 126 ||
      char === "=" || char === "]" || char === '"'
    ) {
      return false;
    } 
  }
  return true;
}

Properties with keys that fail this check are silently omitted from serialization, preventing metadata pollution.

Exploitation Methodology

Exploitation of this vulnerability requires that an application log user-controlled input as structured properties. Consider an administrative application logging user registration profile metadata:

logger.info("User registered", { bio: req.body.bio });

An attacker can submit a registration payload where the bio property contains a trailing newline followed by a valid syslog header and a custom payload. Because the newline character is not sanitized, the logging system generates a single TCP packet containing multiple syslog messages.

Additionally, if keys are dynamically mapped from HTTP request headers and logged, submitting a header like X-Header-Injected]evil_property causes the parser to identify ] as the termination of the structured data block. The rest of the key and value then leak into the text body of the log message, potentially causing downline SIEM parsing failures.

Impact Assessment

The impact of CVE-2026-54511 is severe, as reflected by its CVSS base score of 8.6. The primary security impact is the potential compromise of downstream infrastructure integrity.

By leveraging syslog framing injection, attackers can write arbitrary syslog headers with false origins, severity levels, facilities, and hostnames. For example, an attacker can generate a false authentication success log that appears to originate from a domain controller, neutralizing security alerts.

The Scope (S) metric is set to Changed (C) because the vulnerability allows exploitation to transition from the target software application into the surrounding monitoring and SIEM environment. This capability to poison central logging stores disrupts forensic analysis and compromises the integrity of organizational compliance records.

Mitigation and Remediation

Remediation is achieved by updating @logtape/syslog to a patched release. The fixes are contained in versions 1.3.11, 2.0.14, and 2.1.5.

If immediate dependency updates are not viable, security administrators should set includeStructuredData: false in the SyslogSinkOptions configuration. This action bypasses the structured data generation path entirely, protecting the system from both CRLF and key-injection vectors.

// Temporary mitigated sink setup
const secureSyslogSink = getSyslogSink({
  host: "syslog-receiver.internal",
  port: 514,
  transport: "tcp",
  includeStructuredData: false // Mitigates the risk prior to library update
});

In addition, developers can implement a temporary gateway sanitization step that strips characters with char codes below 32 from all fields before passing objects to the log interface.

Official Patches

dahliaGitHub Security Advisory GHSA-8h6h-x5pq-56fq
dahliaFix commit implementing character conversion and key checking logic

Fix Analysis (1)

Technical Appendix

CVSS Score
8.6/ 10
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:N/I:H/A:N

Affected Systems

@logtape/syslog

Affected Versions Detail

Product
Affected Versions
Fixed Version
@logtape/syslog
dahlia
< 1.3.111.3.11
@logtape/syslog
dahlia
>= 2.0.0, < 2.0.142.0.14
@logtape/syslog
dahlia
>= 2.1.0, < 2.1.52.1.5
AttributeDetail
CWE IDCWE-93 / CWE-117
Attack VectorNetwork (AV:N)
CVSS v3.1 Score8.6 (High)
EPSS ScoreNot Available
ImpactIntegrity Compromise (SIEM / Log Forgery)
Exploit StatusPoC (Regression Unit Tests)
CISA KEV StatusNot Listed

MITRE ATT&CK Mapping

T1565.001Stored Data Manipulation
Impact
T1070Indicator Removal
Defense Evasion
T1562.001Disable or Modify Tools
Defense Evasion
CWE-93
Improper Neutralization of CRLF Sequences ('CRLF Injection')

The software does not neutralize or incorrectly neutralizes CRLF sequences before using them in HTTP headers, log files, or other protocol-defined text streams, allowing injection attacks.

Known Exploits & Detection

Regression Unit TestsThe official patch repository contains test scenarios demonstrating how key-value control character sequences translate directly into raw outputs in vulnerable versions.

References & Sources

  • [1]GitHub Security Advisory GHSA-8h6h-x5pq-56fq
  • [2]Fix Commit 7a6e5b
  • [3]@logtape/syslog Release 1.3.11
  • [4]@logtape/syslog Release 2.0.14
  • [5]@logtape/syslog Release 2.1.5
  • [6]CVE-2026-54511 CVE Record

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•39 minutes ago•GHSA-78G4-XQWV-Q3G8
7.5

GHSA-78G4-XQWV-Q3G8: Heap-Based Buffer Overflow in Pillow (libopenjp2)

A heap-based buffer overflow vulnerability in Pillow PyPI binary wheels (versions 11.1.0 to 12.x) allows remote code execution or application crash via crafted JPEG 2000 files processed by the bundled libopenjp2 library.

Alon Barad
Alon Barad
4 views•4 min read
•about 2 hours ago•CVE-2026-109618
9.8

CVE-2026-109618: Remote Code Execution in PHP Core via Out-of-Memory longjmp() Uninitialized Memory Access

CVE-2026-109618 (dubbed PHP2Shell) is a critical vulnerability in the PHP engine core resulting from improper out-of-memory exception handling via longjmp(). When request allocation fails mid-processing, non-local control flow bypasses cleanup procedures, leaving memory structures uninitialized or in a use-after-free state during request shutdown.

Amit Schendel
Amit Schendel
9 views•5 min read
•about 2 hours ago•CVE-2026-109619
9.2

CVE-2026-109619: Remote Code Execution in PHP Core via Stale Global State Memory Corruption (PHP2Shell)

CVE-2026-109619 (PHP2Shell) is a critical Use-After-Free vulnerability in the core PHP engine caused by improper global state cleanup during out-of-memory exception handling across persistent worker requests.

Alon Barad
Alon Barad
10 views•6 min read
•about 2 hours ago•CVE-2026-113721
4.5

CVE-2026-113721: Unsafe Link Resolution in virtualenv File Generation

In Python virtualenv prior to version 21.14.9, activation script generators and configuration writers use Path.exists() before writing files. Because Path.exists() resolves symbolic links, it returns False for dangling symlinks. Consequently, virtualenv skips unlinking pre-planted symbolic links or hard links, writing data directly to target locations outside the intended virtual environment directory.

Amit Schendel
Amit Schendel
3 views•5 min read
•9 days ago•CVE-2026-87697
8.8

CVE-2026-87697: Untrusted Deserialization in .NET PresentationCore Clipboard Handling

A remote code execution vulnerability exists in Microsoft .NET due to untrusted data deserialization within the PresentationCore component. The flaw stems from implicit auto-conversion flags during clipboard data retrieval operations.

Alon Barad
Alon Barad
31 views•5 min read
•10 days ago•CVE-2026-70007
8.8

CVE-2026-70007: Out-of-Bounds Write Vulnerability in .NET Framework and WPF Subsystem

An out-of-bounds write vulnerability in Microsoft .NET Framework, .NET runtime, and Visual Studio allows unauthenticated remote attackers to execute arbitrary code via crafted pixel-shader bytecode or auto-converted clipboard payloads.

Amit Schendel
Amit Schendel
19 views•6 min read