Chartbrew: Offenlegung privater Chart-Daten durch gefälschte Share-Tokens

Chartbrew signiert und verifiziert Share-Tokens mit demselben fest einkodierten Standardschlüssel, der auch für die Authentifizierung verwendet wird. Ein anonymer Angreifer fälscht ein Token und liest beliebige private Chart-Daten aus, auch per Aufzählung fortlaufender IDs ohne einen Share-Link zu kennen.

Advisory-ID: TP-2026-056
Produkt: Chartbrew (Open-Source-Business-Intelligence-Plattform für Datenvisualisierung, self-hosted)
Schwachstellentyp: Improper Verification of Cryptographic Signature (CWE-347)
CVE: CVE-2026-85708
CVSS 3.1: 7.5 (Hoch) · CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
Hersteller-Advisory: GHSA-3chp-cr6f-hp63
Betroffene Versionen: <= 5.2.2
Behoben in: noch nicht veröffentlicht (Fix auf master)
Gemeldet: 16. Juli 2026

Zusammenfassung

Chartbrew ist eine self-hosted Open-Source-Business-Intelligence-Plattform für Datenvisualisierung, deren öffentliche Share- und Embed-Tokens mit settings.secret (CB_SECRET) als primärem Schlüssel signiert und verifiziert werden, ohne eine algorithms-Allowlist zu setzen (server/controllers/ChartController.js:1343 Signierung / :1208 Verifizierung; server/controllers/ProjectController.js:433). Der Chart-Zweig von findBySharePolicy prüft nur sub.type==="Chart" und sub.id===sharePolicy.entity_id, ohne ein project.public- oder Sichtbarkeits-Gate, und liefert chartData zurück. checkFilterAccess akzeptiert dasselbe gefälschte Token für POST /project/:project_id/chart/:chart_id/filter und verwendet dabei ausschließlich sequenzielle Integer-IDs. Da CB_SECRET den statischen Standardwert change_to_random_string hat (siehe CVE-2026-85295) und setUpEncryptionKeys.js ihn nie generiert, ist der Signaturschlüssel öffentlich bekannt. Ein anonymer Angreifer fälscht ein Token und liest beliebige private Chart-Daten aus, wobei Token-Ablauf und -Widerruf dauerhaft ausgehebelt sind, sobald das Secret bekannt ist.

Ursache

Share- und Embed-Tokens werden mit settings.secret (CB_SECRET) in server/controllers/ChartController.js:1343 signiert und mit jwt.verify(token, settings.secret) ohne algorithms-Allowlist in :1208 verifiziert. Der Chart-Zweig von findBySharePolicy erzwingt nur sub.type==="Chart" und sub.id===sharePolicy.entity_id, ohne eine project.public- oder Sichtbarkeitsprüfung, und gibt chartData zurück (server/api/ChartRoute.js:348 akzeptiert dasselbe gefälschte Token per sequenzieller Integer-ID ohne Sichtbarkeits-Gate). CB_SECRET ist der mitgelieferte Standardwert change_to_random_string, der von setUpEncryptionKeys.js nie generiert wird, sodass der Signaturschlüssel öffentlich bekannt ist. Die Token-Laufzeit von 99999 Tagen und das Fehlen einer Secret-Rotation bedeuten, dass ein privater Share nicht widerrufen werden kann, sobald das Secret bekannt ist. Sink und Fix sind vom Authentication-Forge-Advisory (CVE-2026-85295) verschieden.

Proof of Concept

# Share-Token faelschen, signiert mit CB_SECRET:
PAYLOAD {"sub":{"type":"Chart","id":5,"sharePolicyId":3}}
KEY     change_to_random_string (HS256)

# Private Chart-Daten ueber Share-Route lesen, unauthentifiziert:
GET /chart/share/<share_string>?token=<forged> HTTP/1.1

HTTP/1.1 200 OK
{"chartData":{"SECRET_MARKER":"CB-VERIFY-DATA-7Q9x","revenue":987654}}

# Baseline ohne Token:
GET /chart/share/<share_string>
HTTP/1.1 400 "Token is missing"

# Lesen per Integer-ID-Enumeration, kein Share-Link noetig:
POST /project/26/chart/5/filter?token=<forged> HTTP/1.1
{"filters":[]}

HTTP/1.1 200 OK
{"chartData":{"secretds":{"data":[{"marker":"CB-VERIFY-DATA-7Q9x"}]}}}

Auswirkung

  • Anonyme Offenlegung beliebiger privater Chart-Daten, einschließlich Werte, die über die Query des Charts erreichbar sind.
  • Vollständig beliebiger Lesezugriff durch Integer-ID-Enumeration, ohne dass ein Share-Link benötigt wird.
  • Token-Ablauf und -Widerruf dauerhaft ausgehebelt, sobald das Secret bekannt ist.
  • Nur-Lese-Zugriff, einzelner Request, keine Nutzerinteraktion erforderlich.

Referenzen

Steckt so etwas in Ihrer Software?

Diese Schwachstelle hat unser Team im Rahmen seiner Arbeit gefunden. Lassen Sie Ihre Anwendungen von denselben Spezialisten prüfen, mit einem Penetrationstest von turingpoint.