CVE-2026-35339: chmod: recursive mode returns exit code 0 even when some files fail (last-file-wins)
In Chmoder::chmod() the recursive branch overwrites the running result instead of accumulating it, so the exit code reflects only the last file processed:
if self.recursive {
r = self.walk_dir_with_context(file, true); // overwrites r
} else {
r = self.chmod_file(file).and(r);
}
PoC: GNU returns 1 when a file fails; uutils returns 0 if the last entry succeeds:
$ chmod -R 0755 chmod-bug/root chmod-bug/user # GNU -> ret=1
$ uutils chmod -R 0755 chmod-bug/root chmod-bug/user # -> ret=0
Impact: scripts relying on the exit code get a false success signal while some files retained restrictive/unexpected permissions, leading to access-control misconfigurations. Recommendation: accumulate errors during traversal.
Remediation: Acknowledged by Canonical; fixed in commit abd581f6.
Reported by Zellic in the uutils coreutils Program Security Assessment (prepared for Canonical, Jan 20 2026), audited commit 3a07ffc5a9bd4c283e75afa548ba1f1957bad242. Finding 3.2. Credit: Zellic.
References
- github.com/advisories/GHSA-4x34-chg5-mwjj
- github.com/uutils/coreutils/commit/abd581f62e97d0b147306ac40eac13af71c6fbba
- github.com/uutils/coreutils/pull/9793
- github.com/uutils/coreutils/releases/tag/0.6.0
- github.com/uutils/coreutils/security/advisories/GHSA-4x34-chg5-mwjj
- nvd.nist.gov/vuln/detail/CVE-2026-35339
Code Behaviors & Features
Detect and mitigate CVE-2026-35339 with GitLab Dependency Scanning
Secure your software supply chain by verifying that all open source dependencies used in your projects contain no disclosed vulnerabilities. Dependency Scanning using SBOM also detects vulnerabilities from proprietary advisories that this site does not include. Learn more about Dependency Scanning using SBOM →