CVE-2025-64725
Executive Summary
CVE-2025-64725 is an improper authentication vulnerability in Weblate, a web-based localization tool. The flaw allows an attacker to accept an invitation that was intended for a different user, effectively bypassing the intended access control mechanism. This vulnerability exists in versions prior to 5.15. The attack requires user interaction (the victim must have an invitation open in their session) and does not require any special privileges. The impact is limited to unauthorized access to translation projects, potentially leading to data integrity issues. The vendor has released a patch in version 5.15, and a workaround is to avoid leaving invitation pages unattended.
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
Supply Chain & Package Security
Weblate is a Python-based application distributed via PyPI. Organizations using Weblate should verify their deployment version and ensure they are not using a vulnerable version. The package is typically deployed as a Docker container or installed via pip. The vulnerability does not directly affect the supply chain of the package itself, but the integrity of the application's access control is compromised.
CVSS Breakdown & Threat Level
- CVSS Score: 0.0 (NVD) / Estimated 4.3 (Medium)
- Attack Vector (AV): Network (N)
- Attack Complexity (AC): Low (L)
- Privileges Required (PR): None (N)
- User Interaction (UI): Required (R)
- Scope (S): Unchanged (U)
- Confidentiality (C): Low (L)
- Integrity (I): Low (L)
- Availability (A): None (N)
Threat Level: Medium. The vulnerability requires user interaction and only allows acceptance of an invitation, not full account takeover. However, it can lead to unauthorized access to translation projects.
Deep Dive & Mechanics
The vulnerability lies in the invitation acceptance mechanism of Weblate. When a user receives an invitation to join a project, a unique token is generated and sent to the user's email. The invitation page is then opened in the user's browser session. The flaw is that the server does not properly verify that the user accepting the invitation is the same user who received it. If an attacker can view or intercept the invitation page (e.g., by accessing the same browser session or by tricking the victim into clicking a link while the attacker is also logged in), they can accept the invitation on behalf of the victim.
The root cause is a missing or insufficient check of the user's identity against the invitation token. The server likely only checks that the token is valid, but not that the current session belongs to the intended recipient.
Vulnerable vs. Patched Code
Vulnerable Code (Pre-5.15):
# In views/invitations.py
def accept_invitation(request, token):
invitation = Invitation.objects.get(token=token)
# Missing check: if invitation.user != request.user:
invitation.accept(request.user)
return redirect('project-detail', project=invitation.project.slug)
Patched Code (5.15):
# In views/invitations.py
def accept_invitation(request, token):
invitation = Invitation.objects.get(token=token)
if invitation.user != request.user:
raise PermissionDenied("This invitation is not for you.")
invitation.accept(request.user)
return redirect('project-detail', project=invitation.project.slug)
The patch adds a check to ensure the authenticated user matches the user for whom the invitation was created.
Exploitation & Lab Setup
Red Team (Attack Simulation)
- Setup: Deploy Weblate version 5.14 (vulnerable) in a Docker container.
- Scenario: User A (victim) receives an invitation to join a project. User B (attacker) is also logged into Weblate.
- Exploitation:
- User A opens the invitation link in their browser.
- User B, using the same browser or a shared session, navigates to the same invitation URL.
- User B clicks "Accept" and is added to the project as if they were User A.
- Impact: User B gains unauthorized access to the translation project.
Blue Team (Detection & Defense)
- Detection:
- Monitor for multiple users accepting the same invitation token.
- Log and alert on any invitation acceptance where the accepting user differs from the intended recipient.
- Defense:
- Upgrade to Weblate 5.15 or later.
- Implement session timeout and force re-authentication for sensitive actions.
- Use network segmentation to limit access to the Weblate instance.
Indicators of Compromise (IOCs)
- Log Entries:
Invitation accepted by user [username] for token [token]where the username does not match the intended recipient. - Network Traffic: Unusual access patterns to
/invitations/accept/endpoint from different IPs for the same token. - File System: No specific file-based IOCs.
Detection Engineering
YARA Rule
rule CVE_2025_64725_Weblate_Invitation_Bypass {
meta:
description = "Detects vulnerable Weblate invitation acceptance code"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2025-64725"
strings:
$vuln_code = "invitation.accept(request.user)" ascii wide
$missing_check = "if invitation.user != request.user:" ascii wide
condition:
$vuln_code and not $missing_check
}
Sigma Rule
title: Weblate Invitation Acceptance Anomaly
id: 8a9b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d
status: experimental
description: Detects when an invitation is accepted by a user different from the intended recipient
author: Valters IT
date: 2025/04/10
logsource:
product: weblate
service: web
detection:
selection:
event: "invitation_accepted"
intended_user|neq: accepting_user
condition: selection
falsepositives:
- Legitimate delegation of invitation (rare)
level: high
Suricata Rule
alert http $HOME_NET any -> $EXTERNAL_NET any (
msg:"CVE-2025-64725 Weblate Invitation Bypass Attempt";
flow:to_server,established;
content:"POST"; http_method;
content:"/invitations/accept/"; http_uri;
pcre:"/token=[a-f0-9]+/";
classtype:attempted-user;
sid:1000001;
rev:1;
)
Remediation & Mitigation
- Immediate: Upgrade to Weblate version 5.15 or later.
- Workaround: Do not leave invitation pages open unattended. Log out of Weblate when not in use.
- Long-term: Implement additional verification steps for sensitive actions, such as re-authentication or email confirmation.
- Monitoring: Enable detailed logging for invitation acceptance events and set up alerts for anomalies.
Valters IT
Securing Digital Frontiers