CVE-2026-23535 Overview
CVE-2026-23535 is a Path Traversal vulnerability affecting wlc, the Weblate command-line client that interfaces with Weblate's REST API. Prior to version 1.17.2, the multi-translation download functionality could be exploited by a malicious server to write files to arbitrary locations on the client's file system. This occurs because the client fails to properly sanitize server-provided path components before using them in file operations.
Critical Impact
A compromised or malicious Weblate server could exploit this vulnerability to write arbitrary files to any location accessible by the wlc client, potentially leading to code execution, configuration tampering, or credential theft on developer workstations.
Affected Products
- wlc (Weblate CLI) versions prior to 1.17.2
- Systems using wlc to connect to untrusted Weblate servers
- Development environments with automated translation synchronization
Discovery Timeline
- 2026-01-16 - CVE CVE-2026-23535 published to NVD
- 2026-01-16 - Last updated in NVD database
Technical Details for CVE-2026-23535
Vulnerability Analysis
This vulnerability is classified as CWE-22 (Path Traversal), a well-known class of security flaws that allows attackers to access files and directories outside of the intended scope. In this case, the attack vector is network-based, requiring a user to connect their wlc client to a malicious or compromised Weblate server. The complexity of exploitation is considered high since the attacker needs to control or compromise a Weblate server that the victim connects to, and user interaction is required (the victim must initiate a multi-translation download operation).
The scope of this vulnerability extends beyond the vulnerable component itself, as successful exploitation could impact the confidentiality, integrity, and availability of the client's entire file system. An attacker could overwrite critical system files, plant malicious executables, or extract sensitive information by writing files to locations that trigger further processing.
Root Cause
The root cause of CVE-2026-23535 lies in the insufficient validation of server-provided slug values used as filename components during multi-translation downloads. The wlc client trusted path components provided by the server without sanitizing them, allowing specially crafted responses containing path traversal sequences (such as ../ or absolute paths) to escape the intended download directory.
The fix introduces a sanitize_slug() function that removes any characters that don't match the expected slug pattern, effectively preventing directory traversal attacks by stripping dangerous characters from server-provided values.
Attack Vector
The attack requires a malicious actor to either compromise an existing Weblate server or trick a user into connecting to a server under attacker control. When the victim executes a multi-translation download command, the malicious server responds with specially crafted path components designed to write files outside the intended directory structure.
The attack chain involves:
- Attacker sets up or compromises a Weblate server
- Victim configures wlc to connect to the malicious server
- Victim initiates a multi-translation download operation
- Malicious server responds with crafted slug values containing path traversal sequences
- wlc client writes downloaded content to attacker-specified locations
# Security patch introducing path sanitization
# Source: https://github.com/WeblateOrg/wlc/commit/216e691c6e50abae97fe2e4e4f21501bf49a585f
+# Copyright © Michal Čihař <michal@weblate.org>
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+"""Utility helpers."""
+
+from __future__ import annotations
+
+import re
+
+# This matches Django's SlugField validation minus dash which is
+# excluded by Weblate's validate_slug
+NON_SLUG_RE = re.compile(r"[^a-zA-Z0-9_]")
+
+
+def sanitize_slug(slug: str) -> str:
+ """Sanitize slug for safe use as a filename component."""
+ return NON_SLUG_RE.sub("-", slug)
Source: GitHub Commit Update
Detection Methods for CVE-2026-23535
Indicators of Compromise
- Unexpected files appearing outside standard wlc download directories
- Files with timestamps corresponding to wlc operations appearing in system directories
- Log entries showing wlc operations with unusual path components containing ../ sequences
- Modified system configuration files or executables following wlc usage
Detection Strategies
- Monitor file system activity during wlc operations for writes outside expected directories
- Implement network monitoring to detect anomalous responses from Weblate servers containing path traversal patterns
- Review wlc configuration files to identify connections to untrusted or unknown Weblate servers
- Audit installed wlc versions across development environments to identify vulnerable installations
Monitoring Recommendations
- Enable file integrity monitoring (FIM) on critical system directories to detect unauthorized file modifications
- Implement endpoint detection and response (EDR) rules to flag wlc processes writing to sensitive locations
- Configure network security tools to inspect Weblate API responses for path traversal indicators
- Establish baseline behavior for wlc operations to identify deviations indicative of exploitation
How to Mitigate CVE-2026-23535
Immediate Actions Required
- Upgrade wlc to version 1.17.2 or later immediately on all affected systems
- Audit recent wlc operations to identify potential exploitation attempts
- Review any files downloaded via wlc multi-translation downloads for unexpected content
- Verify the integrity of systems where wlc has been used to connect to untrusted servers
Patch Information
The vulnerability is fixed in wlc version 1.17.2. The fix introduces proper path sanitization through a new sanitize_slug() utility function that strips any characters not matching the expected alphanumeric slug pattern. This ensures server-provided values cannot contain path traversal sequences or other malicious characters.
For detailed patch information, see:
Workarounds
- Only connect wlc to trusted Weblate servers until the patch can be applied
- Run wlc with minimal filesystem permissions using sandboxing or containerization
- Manually verify downloaded file paths before allowing wlc operations to complete
- Use network-level controls to restrict wlc connections to approved Weblate server addresses only
# Configuration example - Upgrade wlc to patched version
pip install --upgrade wlc>=1.17.2
# Verify installed version
wlc --version
# Example: Run wlc in a containerized environment with limited filesystem access
docker run --rm -v $(pwd)/translations:/data:rw wlc-container download
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

