CVE-2026-93869
Executive Summary
CVE-2026-93869 is an open redirect vulnerability (CWE-601) in Cotonti, a PHP-based content management system, affecting all versions through 1.0.0. The flaw resides in the cot_url_check() function, which validates redirect destinations using a regular expression that lacks an end-of-string anchor, allowing an attacker to pass a hostname that begins with the legitimate site domain but actually resolves to an attacker-controlled host. With a CVSS 3.1 base score of 6.1 (Medium) and user interaction required, the vulnerability is primarily a phishing and trust-abuse vector: victims are redirected from a trusted Cotonti site to attacker infrastructure, typically for credential harvesting or malware delivery.
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
Technical Analysis
The vulnerability is a classic regular-expression anchoring failure leading to an open redirect. According to the NVD description, the cot_url_check() function is intended to serve as a redirect guard — it validates the destination URL of a redirect before the application issues the HTTP 302/303 response, ensuring users are only sent to trusted, same-site destinations.
The guard is implemented using a regular expression that lacks an end-of-string anchor (for example, a trailing $ in PCRE, or an equivalent terminator). Because the matching logic is unanchored at the end, the regex will report a match on any string that contains or begins with the expected site domain, rather than a string that equals an approved destination.
The practical consequence is a prefix-match bypass:
- A legitimate check presumably intends to permit redirects to
https://trusted-site.exampleand block everything else. - An attacker submits a destination such as
https://trusted-site.example.attacker.tld/path— a hostname whose leftmost labels replicate the trusted domain but whose registrable domain (eTLD+1) belongs to the attacker. - Because the regex is not terminated, the presence of the trusted string at the start satisfies the check, and the application issues the redirect to the attacker's host.
This is the well-documented "missing $ anchor" open redirect class. The naming specific to this CVE — cot_url_check() — indicates a centralized URL-validation helper, meaning every caller of that helper inherits the weakness. The NVD description explicitly names the ratings plugin as one reachable caller and notes there may be "other redirect callers," so the attack surface is broader than any single plugin: any Cotonti component that accepts a destination parameter and routes it through cot_url_check() before redirecting is potentially exploitable.
Key technical properties:
- Precondition: The application must expose a redirect endpoint that takes an externally supplied destination and passes it to
cot_url_check(). - No authentication required (per CVSS PR:N): the redirect parameter can be supplied by an unauthenticated visitor.
- User interaction required (UI:R): the victim must follow the crafted link.
- Scope change (S:C) and Low confidentiality/integrity impact: exploitation affects resources beyond the vulnerable component (the redirected user's browser session and the attacker's destination) while producing limited direct impact on the Cotonti host itself.
No further code-level detail (specific regex pattern, parameter names beyond the function name, or routing paths) is available in the provided data; the above is derived strictly from the NVD description and the vulnerability class.
Exploitation Scenarios
No public PoC, Nuclei template, or exploit code is available for CVE-2026-93869. The attack chain below is inferred from the vulnerability class (CWE-601) and the details stated in the NVD description. No function names, parameters, or endpoints are invented.
Reconnaissance / target identification. The attacker identifies internet-facing Cotonti installations at or below version 1.0.0, using search-engine or scan-engine fingerprints for the Cotonti CMS (e.g., page content or titles referencing Cotonti). The attacker locates a redirect-capable entry point, such as the ratings plugin cited in the NVD description, that routes a user-supplied destination through
cot_url_check().Triggering the flaw. The attacker crafts a URL pointing at the trusted Cotonti site's redirect endpoint and supplies a destination value whose hostname begins with the legitimate site domain but resolves to attacker-controlled infrastructure — for example, appending additional labels or a different registrable domain after the trusted prefix. Because the validating regular expression is not anchored at the end of the string,
cot_url_check()accepts the malicious destination as if it were a trusted, same-site URL.Payload / execution method. The attacker distributes the crafted link (email, social media, chat, or any channel where a link to the trusted Cotonti site carries credibility). The victim clicks it, the trusted Cotonti application issues the redirect, and the victim's browser lands on the attacker-controlled host. The payload at the destination is attacker-chosen — commonly a lookalike login page for credential harvesting, or a malware delivery page.
Post-exploitation impact. Direct impact on the Cotonti host is limited (CVSS C:L/I:L/A:N). The principal damage is to victims and the site's reputation: harvested credentials, malware infection of the victim's endpoint, and erosion of trust in the brand whose domain was abused as the redirect origin. The scope change (S:C) reflects that the security impact manifests outside the vulnerable component — in the victim's browser session and at the attacker's destination. The trusted-looking origin URL is the core of the abuse: many email and web filters trust links whose visible origin matches the legitimate site, so the redirect survives common link-scanning defenses.
Impact Assessment
- CVSS v3.1: 6.1 (Medium) —
AV:N(remotely reachable) /AC:L(no special conditions) /PR:N(unauthenticated) /UI:R(victim must click) /S:C(scope change) /C:L/I:L/A:N(no availability impact). - Confidentiality (Low): credential and session material may be captured if the victim is redirected to a credential-harvesting page.
- Integrity (Low): the attacker influences the redirect destination and can present falsified content under the cover of a trusted link.
- Availability (None): no direct denial-of-service vector is described.
- Blast radius: any Cotonti deployment (through 1.0.0) that exposes a redirect flow passing user input through
cot_url_check()— at minimum the ratings plugin, and potentially any other caller of the same helper. The vulnerability is centralized, so the count of reachable redirect entry points determines exposure. - Business impact: reputational damage and abuse-of-trust; the site becomes an unwitting phishing relay. Secondary risk includes deliverability/blacklisting problems if the domain is flagged for hosting malicious redirects, and downstream user-harm liability.
EPSS: Not yet scored by FIRST.org at the time of writing — no probability estimate is asserted.
Exploitation status: No public exploit, no Nuclei template, and no CISA KEV listing. CISA KEV: NO.
Detection Guidance
Detection content below targets the behavioral signature of an open redirect: a redirect endpoint on a trusted Cotonti host issuing an HTTP redirect to a destination whose host begins with the trusted domain but whose registrable domain differs. Rules are illustrative and must be tuned to the monitored environment.
Sigma Rule
title: Cotonti cot_url_check Open Redirect Attempt (CWE-601)
id: 7c9f2a10-4d3e-4b21-9f6a-cotonti93869
status: experimental
description: Detects HTTP requests to Cotonti redirect endpoints where the destination hostname shares a prefix with the site domain but resolves to a different registrable domain, indicative of CVE-2026-93869 exploitation.
references:
- https://nvd.nist.gov/vuln/detail/CVE-2026-93869
author: valtersit.com Threat Intelligence
date: 2026/01/01
logsource:
category: webserver
product: apache
detection:
selection_redirect:
cs-method: 'GET'
cs-uri-query|contains:
- 'redirect='
- 'return='
- 'url='
- 'goto='
selection_prefix_bypass:
cs-uri-query|re: '(?i)(https?%3a%2f%2f|https?://)[^/]*\.?(?P<host>[a-z0-9.-]+)\.[a-z]{2,}'
cs-uri-query|contains:
- '%2e' # encoded dots often used to obfuscate
condition: selection_redirect and selection_prefix_bypass
falsepositives:
- Legitimate internal redirects to subdomains of the same registrable domain
level: medium
tags:
- attack.t1566
- cwe.601
(Note: tuning required — correlation of the requested redirect-style parameter against the site's own domain prefix is environment-specific.)
YARA Rule
rule CVE_2026_93869_Cotonti_Open_Redirect
{
meta:
description = "Detects Cotonti redirect handling that may be vulnerable to CVE-2026-93869 (open redirect via cot_url_check)"
author = "valtersit.com Threat Intelligence"
reference = "https://nvd.nist.gov/vuln/detail/CVE-2026-93869"
cve = "CVE-2026-93869"
date = "2026-01-01"
strings:
$fn = "cot_url_check" ascii wide nocase
$redir = "Location:" ascii nocase
$preg = "preg_match" ascii wide nocase
condition:
$fn and (uint16(0) == 0x3C3F or true)
}
(The YARA rule above is a heuristic file-level indicator: it flags PHP source containing the vulnerable function name. It is not a precise patch-detection rule and will match both vulnerable and potentially fixed variants; verify manually.)
Suricata IDS Rule
alert http any any -> any any (msg:"CVE-2026-93869 Cotonti cot_url_check Open Redirect Attempt"; flow:to_server,established; http.method; content:"GET"; http.uri; content:"cotonti"; nocase; pcre:"/(?:redirect|return|url|goto)=[^&]*(?:https?%3a%2f%2f|https?:\/\/)[^&]*%2e|\./i"; reference:cve,CVE-2026-93869; reference:url,nvd.nist.gov/vuln/detail/CVE-2026-93869; classtype:web-application-attack; sid:9386901; rev:1;)
(Placeholder cotonti keyword and parameter names should be aligned to the deployment; the rule demonstrates the encoded-dot / absolute-URL redirect pattern typical of CWE-601 exploitation.)
Elastic Detection
sequence by source.ip with maxspan=5s
[network where network.protocol == "http" and http.request.method == "GET" and
wildcard(http.request.uri, "*redirect=*") and
wildcard(http.request.uri, "*%2e*")]
[network where network.protocol == "http" and
wildcard(http.request.uri, "*http*")]
(EQL above approximates a two-event request pattern; adjust field mappings to your Elastic ingestion pipeline — URL query substrings indicate a redirect parameter combined with encoded-dot obfuscation.)
Splunk SPL Query
index=web sourcetype=access_combined
| eval uri=lower(uri)
| where match(uri,"(?i)(redirect|return|url|goto)=")
| where match(uri,"(?i)https?(%3a|:)(%2f|/){2}") OR match(uri,"%2e")
| stats count min(_time) as first_seen max(_time) as last_seen by src_ip, uri, status
| where status >= 300 AND status < 400
| sort - count
(Correlates client IPs issuing redirect-style requests that carry absolute URLs or encoded dots and that result in 3xx responses — a behavioral signature of open-redirect abuse. Tune to your Cotonti host.)
Wazuh OSSEC Rule
<group name="web,cve-2026-93869,">
<rule id="938690" level="8">
<if_sid>31100</if_sid>
<id>^31101$</id>
<match>redirect=|return=|url=|goto=</match>
<match>%2e|https%3a|http%3a</match>
<description>CVE-2026-93869: Possible Cotonti open redirect attempt via cot_url_check (CWE-601)</description>
<mitre>
<id>T1566</id>
</mitre>
<group>cwe_601,open_redirect,</group>
</rule>
</group>
(Wazuh rule IDs and parent SIDs should be validated against your decoder set; the pattern keys on redirect-style parameters combined with encoded host characters in the web log.)
Mitigation & Patch Guidance
Patch confidence: 0/4 — UNPATCHED. No patch evidence from any tracked source; no vendor fix or workaround identified in the provided data.
Immediate mitigations (no patch available):
- Disable or constrain the affected plugin. If the ratings plugin is not essential, disable it to remove that reachable redirect caller.
- Wrap redirect callers defensively. For any Cotonti component that accepts an externally supplied destination, ignore the supplied value and redirect only to a server-side allowlist (relative paths or fixed destination IDs). Never trust a client-supplied absolute URL.
- Correct the validation logic where you control the codebase. Where
cot_url_check()is used, enforce a strict, anchored comparison: parse the destination, extract its host, and compare the host exactly (or by its registrable domain) against the site's own domain — rejecting any host that merely begins with the trusted string. Do not rely on unanchored substring matching. - Compensating network controls. Deploy the Suricata/IDS and web-log detection rules above, and alert on outbound redirects from the Cotonti host to destinations whose registrable domain differs from the site's own.
- User-facing controls. Restrict or flag outbound redirects in mail gateways and browser/URL-filtering layers for the affected site until fixed.
Patch / upgrade steps:
- No fixed version is currently identified (affected range: through 1.0.0). Monitor the Cotonti project's advisory and release channels. Once a fixed release or commit is published, plan upgrade immediately and re-test the redirect flow.
- If adopting a community fix, verify the patched regex is fully anchored (start and end) and that host comparison is performed on a normalized, parsed host — not on a raw, attacker-controlled substring.
Long-term hardening:
- Eliminate open-redirect patterns entirely. Replace destination-passing redirect endpoints with indirect references: a destination identifier (integer/enum) mapped server-side to a fixed URL.
- Centralize and test URL validation. If a shared helper is retained, add unit tests covering prefix/substring bypass cases (e.g.,
trusted.example.attacker.tld), encoded characters, and case/unicode confusables. - Apply defense in depth. Enforce an outbound-redirect allowlist at the web tier and a Content Security Policy with a restrictive
form-actionandnavigate-toposture where supported. - Vulnerability management discipline. Track Cotonti versions in your CMDB and integrate the CMS into SBOM-based monitoring so future unanchored-regex and redirect flaws are caught early.
References
- NVD — CVE-2026-93869: https://nvd.nist.gov/vuln/detail/CVE-2026-93869
- CWE-601 — URL Redirection to Untrusted Site ("Open Redirect"): https://cwe.mitre.org/data/definitions/601.html
- MITRE ATT&CK — T1566 Phishing: https://attack.mitre.org/techniques/T1566/
- FIRST.org EPSS (CVE not yet scored at time of writing): https://api.first.org/data/v1/epss?cve=CVE-2026-93869
- CISA Known Exploited Vulnerabilities Catalog (CVE not listed; verify): https://www.cisa.gov/known-exploited-vulnerabilities-catalog
Threat actor / in-the-wild note: No threat actor campaign and no exploit-in-the-wild evidence are associated with CVE-2026-93869 in the data provided. CISA KEV: NO. No public PoC, Nuclei template, or standalone exploit code is available. Assessment is based solely on the vulnerability class (CWE-601) and the NVD description; the attack chain is a class-level inference and should not be treated as a confirmed, observed exploit.