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-35381

CVE-2026-35381: Logic Error and Parameter Mismatch in uutils coreutils cut Utility

Alon Barad
Alon Barad
Software Engineer

Jul 6, 2026·7 min read·18 visits

Executive Summary (TL;DR)

A logic error and parameter-ordering mismatch in the cut utility of Rust-written uutils coreutils causes the -s flag to be ignored when used alongside -z and -d ''. This allows undelimited data to bypass suppression filters, presenting a data integrity and parsing injection risk.

A logic error in the cut utility of uutils coreutils prior to version 0.8.0 causes the utility to ignore the -s (suppress non-delimited records) flag when invoked with the zero-terminated (-z) and empty delimiter (-d '') flags in combination. This results in unintended preservation of undelimited input streams, which breaks the functional parity with GNU coreutils and leads to potential data integrity issues in automated data processing pipelines.

Vulnerability Overview

The vulnerability designated as CVE-2026-35381 represents a logical failure within the field-extraction processing of the cut utility in the Rust-written uutils coreutils implementation. This flaw manifests uniquely when the program is executed with the zero-terminated input flag (-z or --zero-terminated), an empty string delimiter (-d ''), and the suppress undelimited records flag (-s or --only-delimited). Under expected GNU-compliant behavior, any input records that do not contain the specified field delimiter must be completely suppressed and dropped from the output stream.

In vulnerable versions of uutils coreutils prior to 0.8.0, this validation step is completely bypassed when processing empty delimiters in null-terminated inputs. The program instead preserves the entire malformed or non-delimited line and writes it directly to standard output, appending a trailing null byte. This behavior diverges significantly from standard POSIX and GNU behaviors, which correctly identify that the record lacks the empty delimiter and suppress the line entirely.

The root cause of this divergence is situated inside the uu_cut crate's field formatting modules, which route execution through specialized codepaths depending on the configuration of runtime parameters. When handling zero-terminated lines with an empty delimiter, the internal function responsible for output formatting receives mismatched configuration states. Consequently, the utility operates as if the suppression flag were absent, forwarding unfiltered content downstream.

Root Cause Analysis

The underlying technical flaw stems from a parameter-ordering mismatch between the caller implementation and the target function definition of cut_fields_newline_char_delim in the uu_cut module. The utility relies on an internal dispatcher pattern to route execution to optimal string-processing routines. When the input configuration utilizes null-bytes as terminators (-z) and specifies an empty string as a delimiter (-d ''), the program maps the execution path to Delimiter::Slice(delim) which subsequently delegates processing to cut_fields_newline_char_delim.

During this execution routing, the parameters passed by the router did not align with the formal arguments defined in the callee function signature. Specifically, the boolean state mapping the only_delimited configuration was loaded into the fourth position of the argument list at the call site. However, the function definition expected a different parameter layout, which led to incorrect register mapping or variable translation during the dynamic evaluation of the routine.

Because the compiled execution flow misaligned the boolean argument, the value of only_delimited inside the target function was evaluated as false, regardless of whether the user provided the -s flag on the command line. Consequently, the utility skipped the logic branches responsible for validating the presence of a delimiter character inside the record. As a result, the tool emitted every unparsed record to the standard output stream, rendering the suppression control completely ineffective.

Code Analysis and Comparison

A detailed review of the patch applied to the upstream repository reveals how the parameter alignment issue was introduced and corrected. In the vulnerable version of src/uu/cut/src/cut.rs, the function signature for cut_fields_newline_char_delim expected the only_delimited parameter as its fourth argument. However, helper calls and internal abstraction layers led to state misalignment, causing the boolean value to be read incorrectly at runtime.

// Vulnerable function definition signature in cut.rs
fn cut_fields_newline_char_delim<R: Read, W: Write>(
    reader: R,
    out: &mut W,
    ranges: &[Range],
    only_delimited: bool, // Mapped as the 4th parameter
    newline_char: u8,
    out_delim: &[u8],
) -> UResult<()> { ... }

To resolve this structural error, the developers relocated the only_delimited boolean flag to the final argument slot in both the function definition and the corresponding dispatch invocations. This layout ensures that the compiler enforces consistent type-safe stack offsets when resolving the argument positions.

// Patched function definition signature in cut.rs
fn cut_fields_newline_char_delim<R: Read, W: Write>(
    reader: R,
    out: &mut W,
    ranges: &[Range],
    newline_char: u8,
    out_delim: &[u8],
    only_delimited: bool, // Correctly moved to the end of the signature
) -> UResult<()> { ... }

The corresponding fix was applied to the caller inside the cut_fields dispatcher, ensuring that field_opts.only_delimited is supplied at the trailing end of the invocation. This synchronization forces the Rust compiler to correctly link the user-supplied command line boolean option with the runtime validation loop within the character-based parser, enabling proper suppression behavior.

Exploitation and Attack Vector

Exploitation of CVE-2026-35381 relies on logical manipulation of input boundaries within automated execution contexts. An attacker does not require elevated privileges or complex memory payload construction to trigger the vulnerability. Instead, the threat model involves scenarios where administrators construct processing pipelines that rely on cut to filter and sanitize untrusted inputs.

For example, an administrative workflow might ingest automated system logs containing mixed formatted outputs. The workflow uses cut -z -d "" -s -f 1 to drop any lines that fail to conform to a strict delimited formatting structure. By feeding a custom record that contains zero delimiters, an attacker forces the vulnerable utility to output the record instead of dropping it.

# Standard validation expectation (GNU behavior drops this input)
# Vulnerable uutils behavior prints the string
printf "untrusted_malicious_record" | uutils-cut -z -d "" -s -f 1

The vulnerability causes the untrusted record to propagate down the pipeline. If the downstream component is an administrative parser, interpreter, or system utility that expects only sanitized fields, the unchecked injection of the malformed record can trigger secondary injection, parameter manipulation, or directory traversal depending on the downstream script's logic.

Impact Assessment

The severity of CVE-2026-35381 is classified as low, carrying a CVSS v3.1 base score of 3.3. This assessment factors in the requirement for local access and the specific execution parameters needed to trigger the logical flaw. Despite the low base score, the operational risk remains notable in automated environments using modern containerized applications written in Rust.

As organizations transition infrastructure from traditional GNU utilities to memory-safe alternatives like uutils coreutils, automated bash or python shell pipelines are often migrated directly. Differences in logical behaviors between GNU and Rust-written utilities break assumptions in existing security boundaries. If system scripts rely on the suppression guarantees of cut -s to enforce safety controls, the failure to suppress malformed records can result in unauthorized logical bypasses.

At present, there is no evidence of active exploitation of this vulnerability in the wild, and the EPSS score remains extremely low. The primary impact is categorized as low integrity degradation, as it leads to unexpected output formatting rather than remote execution or direct memory corruption. Nonetheless, maintaining package synchronization with fixed releases is essential to avoid potential parsing errors in high-criticality automation environments.

Remediation and Verification

To remediate CVE-2026-35381, system administrators and developers must upgrade uutils coreutils to version 0.8.0 or later. If managing individual crate dependencies within Rust applications, update the uu_cut crate directly to version 0.2.2 or later. These versions incorporate the corrected parameter layout and include dedicated unit tests to prevent regression.

In environments where upgrading packages is blocked by change-management restrictions, a robust workaround is to sanitize inputs using independent utilities before feeding them to cut. Using helper tools like awk or grep to filter out records that do not contain the intended delimiter ensures that cut only handles conforming input blocks.

# Safe alternative: Filter out undelimited lines before cut processing
tr '\0' '\n' | grep -F "" | tr '\n' '\0' | cut -z -d "" -s -f 1

To verify whether a target system is vulnerable, execute a probe using an undelimited test sequence. Run printf "test_string" | uutils-cut -z -d "" -s -f 1 on the command line. A vulnerable installation will output test_string\0 to the terminal, whereas a secured or patched installation will output absolutely nothing.

Official Patches

uutilsPull Request #11394 containing the logic correction for cut

Fix Analysis (1)

Technical Appendix

CVSS Score
3.3/ 10
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:N
EPSS Probability
0.15%
Top 96% most exploited

Affected Systems

Linux distributions packaging uutils coreutilsRust applications utilizing the uu_cut library crate

Affected Versions Detail

Product
Affected Versions
Fixed Version
uutils coreutils
uutils
< 0.8.00.8.0
uu_cut
uutils
< 0.2.20.2.2
AttributeDetail
CWE IDCWE-684 (Incorrect Provision of Specified Functionality)
Attack VectorLocal (AV:L)
CVSS Score3.3
EPSS Score0.00149
ImpactLow Integrity Impact
Exploit Statusnone/theoretical
KEV StatusNot Listed

MITRE ATT&CK Mapping

T1190Exploit Public-Facing Application
Initial Access
CWE-684
Incorrect Provision of Specified Functionality

The system does not complete or perform the required actions to supply the standard behavior of the tool, resulting in functional bypasses.

References & Sources

  • [1]CVE-2026-35381 Record on CVE.org
  • [2]National Vulnerability Database CVE-2026-35381 Detail
  • [3]uutils coreutils v0.8.0 Release Page
  • [4]Wiz Vulnerability Database - CVE-2026-35381

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

•about 4 hours ago•GHSA-JM5P-837G-RV8G
6.5

GHSA-JM5P-837G-RV8G: Insecure Direct Object Reference (IDOR) in Wagtail Page Translation Endpoint

An authenticated user with global translation permissions can exploit a missing authorization check on the page translation endpoint in Wagtail CMS. This allows the attacker to copy and view pages they do not have explicit edit or explore access to.

Alon Barad
Alon Barad
2 views•7 min read
•about 5 hours ago•CVE-2026-67447
5.3

CVE-2026-67447: Unbounded Memory Allocation leading to Denial of Service in Mailpit SMTP Server

An uncontrolled resource allocation vulnerability (CWE-770) affects Mailpit SMTP server versions 1.30.0 through 1.30.4. The vulnerability is located within the DATA parsing logic, where an unauthenticated remote attacker can stream an endless sequence of bytes devoid of newline characters. Because line size limits are evaluated only after buffer completion, the Go runtime repeatedly allocates memory on the heap to store the single oversized line, causing resource exhaustion and an Out-Of-Memory termination of the service process.

Amit Schendel
Amit Schendel
1 views•8 min read
•about 6 hours ago•CVE-2026-67448
6.5

CVE-2026-67448: Cross-Site WebSocket Hijacking via Path Normalization Discrepancy in Mailpit

A critical cross-site WebSocket hijacking (CSWSH) vulnerability in Mailpit allows malicious websites to bypass CORS security controls via URL-encoded path mismatches, exposing sensitive development SMTP communications to unauthorized actors.

Alon Barad
Alon Barad
2 views•7 min read
•about 10 hours ago•CVE-2026-54061
9.1

CVE-2026-54061: Unauthenticated Database Wipe and Replacement in Dgraph Alpha

A critical vulnerability in Dgraph Alpha allows unauthenticated network clients to delete and replace database stores. The public gRPC interface on port 9080 processes external snapshot streams without enforcing authentication or authorization, triggering immediate database destruction via the storage engine's initialization process.

Amit Schendel
Amit Schendel
5 views•6 min read
•about 18 hours ago•CVE-2026-53951
8.8

CVE-2026-53951: Trust-Prefix Bypass via Path Traversal leading to Remote Code Execution in Copier

A security vulnerability in Copier versions 9.5.0 through 9.15.1 allows unauthenticated remote code execution via crafted HTTP requests or local paths containing traversal sequences. The trust-evaluation mechanism compares target repository paths or URLs against trusted prefixes using unnormalized string comparison, while the subsequent fetching mechanism normalizes the path before cloning. Attackers can exploit this asymmetry to bypass security warning prompts and execute arbitrary commands under the local user context.

Amit Schendel
Amit Schendel
5 views•6 min read
•about 20 hours ago•GHSA-P77J-G7H5-R2VW
8.8

GHSA-P77J-G7H5-R2VW: Tier-0 Security Hardening in GeoLens

GeoLens before version 1.2.4 contains multiple critical-tier security vulnerabilities including improper authorization in metadata access, tile cache scope leakage, dataset title enumeration, weak default credentials, and denial of service via STAC POST search.

Amit Schendel
Amit Schendel
5 views•6 min read