CVE-2026-77433
Kiwi TCMS Open Redirect Vulnerability
Description
## Summary In Kiwi TCMS version 16.1, the fix for CVE-2026-54724 (open redirect via unvalidated `next` parameter) in the account confirmation endpoint is incomplete. The validation uses `startswith("/")` to check if the redirect URL is local, but this is bypassed by protocol-relative URLs like `//evil.com` which start with `/` but redirect the browser to an external attacker-controlled domain. 16.1’s incomplete mitigation still allows protocol-relative destinations and earlier releases lack the mitigation. ## Vulnerable Code In `tcms/kiwi_auth/views.py`, the `Confirm` view (line ~113): def get_redirect_url(self, *args, **kwargs): self.url = self.request.GET.get("next", reverse("core-views-index")) if not self.url.startswith("/"): self.url = reverse("core-views-index") The check `startswith("/")` passes for `//evil.com` because it begins with `/`, but browsers interpret `//evil.com` as a protocol-relative URL that redirects to `https://evil.com` (or `http://evil.com` depending on the current page's protocol). ## Proof of Concept GET /confirm/<activation_key>/?next=//evil.com/phishing HTTP/1.1 Host: kiwi.example.com Response: HTTP/1.1 302 Found Location: //evil.com/phishing The browser follows the redirect to `https://evil.com/phishing`. Verification: >>> url = "//evil.com/phishing" >>> url.startswith("/") True # passes the check! ## Impact An attacker can craft a confirmation link that, after the user confirms their account, redirects them to a phishing page. This is useful for: - Credential phishing (fake login page on attacker domain) - Malware delivery after trusted action - Social engineering (user trusts the link because it's from the legitimate Kiwi TCMS instance) The attack requires sending a crafted activation link to a user who is registering, or intercepting/predicting the activation key. ## Suggested Fix Use Django's `url_has_allowed_host_and_scheme()` utility instead of a simple `startswith` check: from django.utils.http import url_has_allowed_host_and_scheme def get_redirect_url(self, *args, **kwargs): self.url = self.request.GET.get("next", reverse("core-views-index")) if not url_has_allowed_host_and_scheme( self.url, allowed_hosts={self.request.get_host()}, require_https=self.request.is_secure(), ): self.url = reverse("core-views-index") This properly rejects protocol-relative URLs, absolute URLs to other hosts, and other bypass patterns. Fixed in Version 16.2
INFO
Published Date :
Nov. 9, 2026, 11:24 p.m.
Last Modified :
Nov. 9, 2026, 11:24 p.m.
Remotely Exploit :
Yes !
Source :
github-security-advisories
CVSS Scores
| Score | Version | Severity | Vector | Exploitability Score | Impact Score | Source |
|---|---|---|---|---|---|---|
| CVSS 3.1 | MEDIUM | github |
Solution
- Update Kiwi TCMS to version 16.2 or later.
- Apply the suggested Django fix for redirect validation.
- Use url_has_allowed_host_and_scheme for URL validation.
- Ensure redirect URLs are properly validated.
References to Advisories, Solutions, and Tools
Here, you will find a curated list of external links that provide in-depth
information, practical solutions, and valuable tools related to
CVE-2026-77433.
CWE - Common Weakness Enumeration
While CVE identifies
specific instances of vulnerabilities, CWE categorizes the common flaws or
weaknesses that can lead to vulnerabilities. CVE-2026-77433 is
associated with the following CWEs:
Common Attack Pattern Enumeration and Classification (CAPEC)
Common Attack Pattern Enumeration and Classification
(CAPEC)
stores attack patterns, which are descriptions of the common attributes and
approaches employed by adversaries to exploit the CVE-2026-77433
weaknesses.
We scan GitHub repositories to detect new proof-of-concept exploits. Following list is a collection of public exploits and proof-of-concepts, which have been published on GitHub (sorted by the most recently updated).
Results are limited to the first 15 repositories due to potential performance issues.
The following list is the news that have been mention
CVE-2026-77433 vulnerability anywhere in the article.