Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessPlant malicious .weblate config in untrusted repo
-
DeliveryVictim checks out repo and runs wlc with unscoped WLC_KEY
-
Exploitwlc auto-discovers attacker URL, omits URL pinning
-
ExecutionToken sent to attacker-controlled Weblate URL
-
ImpactAPI token disclosed cross-scope
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V14 - Data Protection Data exposure prevention
MITRE ATT&CK
2 techniques across 2 tactics: Collection, Discovery The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires ALL of: (1) the victim runs wlc inside an untrusted repository, pull-request checkout, or a directory with an untrusted ancestor .weblate/.weblate.ini/weblate.ini that defines an API url; (2) the victim supplies an UNSCOPED API token via the WLC_KEY environment variable or the --key flag; and (3) the victim does NOT pin the destination via WLC_URL or --url. Exploitation is LIMITED by these preconditions plus required user interaction (the victim must invoke wlc) and local execution context. It does NOT apply when URL-scoped keys in the [keys] config section are used, nor when the URL is explicitly pinned. Versions 2.0.1 and later reject unscoped keys when the API URL comes from auto-discovered project configuration. |
| Impact | This is a low-priority issue whose signals are internally consistent and point away from urgent action. The vendor CVSS of 2.3 (CVSS:3.1/AV:L/AC:H/PR:H/UI:R/S:C/C:L/I:N/A:N) correctly captures a local, high-complexity, interaction-dependent token-leak with no integrity or availability impact. No EPSS score, KEV listing, or public exploit was provided, so exploitation status is: no public exploit identified at time of analysis. The one metric I would contest is PR:H - the attacker needs no privileges on the victim's system; they only plant a malicious project config in a repository the victim later checks out, so PR:N with the difficulty captured in AC:H/UI:R is more accurate (see assessed vector). The scope change (S:C) and confidentiality-only impact are appropriate because the leaked API token belongs to a different security authority (the Weblate server). Realistic risk is limited by the tight preconditions: the victim must use an unscoped WLC_KEY/--key without pinning WLC_URL/--url, AND run wlc inside an untrusted repository/PR checkout/directory carrying attacker-controlled ancestor configuration. This is a targeted CI/supply-chain-style credential-leak, not a broadly exploitable flaw. |
| Exploit ScenarioDerived | An attacker submits a pull request (or publishes a repo) containing a malicious .weblate/.weblate.ini/weblate.ini that sets the API url to an attacker-controlled server. A CI job or developer then runs wlc in that checkout with an unscoped token injected via WLC_KEY/--key but without pinning WLC_URL/--url, and wlc transmits the token to the attacker's URL. No public exploit code is identified, and exploitation is high-complexity and requires the victim to run the client (UI:R). |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 22, 2026
API token disclosure in the Weblate wlc command-line client before 2.0.1 allows an attacker-controlled project configuration to redirect an unscoped API token to a server the attacker controls. When wlc is run inside an untrusted repository, pull-request checkout, or a directory with an untrusted ancestor whose .weblate, .weblate.ini, or weblate.ini sets an API url, and the operator supplies a token through WLC_KEY or --key without also pinning WLC_URL or --url, the client transmits that token to the project-configured destination. Exploitation requires local execution of wlc, all three configuration preconditions to hold simultaneously, and user interaction; no public exploit was identified at time of analysis, and the overall risk is low (CVSS 2.3 / assessed CVSS:3.1/AV:L/AC:H/PR:N/UI:R/S:C/C:L/I:N/A:N).
RemediationAI
Upgrade to wlc 2.0.1 or later, which is the vendor-released patch and rejects unscoped keys when the API URL originates from auto-discovered project configuration (see PR https://github.com/WeblateOrg/wlc/pull/1500, commit https://github.com/WeblateOrg/wlc/commit/15cbdfc5b2c6183ef6864ea758091643a0ce6c89, and advisory https://github.com/WeblateOrg/wlc/security/advisories/GHSA-3mqq-hv9c-85hc). If upgrading is not immediately possible, explicitly pin the destination whenever using an unscoped key, e.g. WLC_URL=https://hosted.weblate.org/api/ WLC_KEY=... wlc ... or wlc --url https://hosted.weblate.org/api/ --key ... ...; this neutralizes the attack because the discovered URL no longer wins, at the cost of having to hard-code the endpoint in every invocation. Alternatively, replace WLC_KEY/--key with URL-scoped keys in the [keys] configuration section, which are not affected and continue to work with project configuration. Finally, avoid running wlc with secrets inside untrusted checkouts or directories that may carry attacker-controlled ancestor configuration, which removes the delivery vector but weakens the CI convenience that motivated the original design. As these are mutual substitutes, pinning the URL or switching to scoped keys is sufficient on its own; no additional compensating network control is required given the low assessed severity.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in pypi
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
wlc is the Python command-line client for Weblate, communicating with a Weblate instance over its REST API using a bearer-style API token. Configuration is assembled from layered sources: command-line flags (--url/--key), environment variables (WLC_URL/WLC_KEY), a user config, and automatically discovered project configuration files named .weblate, .weblate.ini, or weblate.ini in the working directory or any ancestor directory. The flaw is rooted in CWE-200 (Exposure of Sensitive Information to an Unauthorized Actor): when the API URL is sourced from auto-discovered project configuration while the secret is supplied as an unscoped key via WLC_KEY or --key, the two are combined without verifying the user intended that destination, so a repository simply declaring url = https://attacker.example/ obtains the token. The maintainers' fix in 2.0.1 changes the resolution logic so that an unscoped WLC_KEY now requires an explicit WLC_URL and an unscoped --key requires an explicit --url whenever the URL comes from discovered project config; URL-scoped keys declared under the [keys] section remain fully supported. The affected package is the PyPI/pip distribution weblateorg:wlc (CPE cpe:2.3:a:weblateorg:wlc:*:*:*:*:*:*:*:*).
Know when Wlc gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:L/AC:H/PR:H/UI:R/S:C/C:L/I:N/A:N
Attacker plants config needing no privileges (PR:N, correcting vendor PR:H); success needs a specific unscoped-key/no-URL setup and victim execution (AC:H, UI:R); token crosses to another system (S:C); single credential leaked (C:L).
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
1DescriptionCVE.org
wlc is a Weblate command-line client using Weblate's REST API. Prior to 2.0.1, automatically discovered configuration from .weblate, .weblate.ini, or weblate.ini can select the API URL while an unscoped API token is supplied through WLC_KEY or --key without a matching WLC_URL or --url. When wlc runs in an untrusted repository, pull request checkout, or directory with untrusted ancestor configuration, it can send the token to an attacker-controlled project-configured URL. URL-scoped keys in [keys] are not affected. This issue is fixed in version 2.0.1.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
The wlc Weblate command-line client prior to version 1.17.2 is vulnerable to arbitrary file write attacks through path t
Wlc versions prior to 1.17.0 fail to restrict unscoped API keys, allowing them to be transmitted to unintended Weblate s
Cross-site scripting in wlc command-line client versions prior to 2.0.0 allows authenticated users with high privileges
wlc is a Weblate command-line client using Weblate's REST API. Prior to 1.17.0, the SSL verification would be skipped fo
EUVD-2026-84823
GHSA-3mqq-hv9c-85hc
NVD
CVE.org
EPSS
VulDB
Exploit-DB