EspoCRM: Blind SQL Injection über streamAttachments-where-Klausel

Der streamAttachments-Endpoint von EspoCRM validiert komplexe Expressions im where-Parameter unzureichend, wodurch ein authentifizierter Nutzer mit geringen Rechten eine Blind SQL Injection auslösen, sensible Daten wie aktive Admin-Session-Tokens auslesen und so seine Rechte ausweiten kann.

Advisory-ID: TP-2026-032
Produkt: EspoCRM (Open-Source-CRM, self-hosted)
Schwachstellentyp: Blind SQL Injection über komplexe Expression im where-Parameter (CWE-89)
CVE: CVE-2026-53574
CVSS 3.1: 7.6 (Hoch) · CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:L/A:L
Betroffene Versionen: >= 8.1.0, <= 9.3.7
Behoben in: 9.3.8
Hersteller-Advisory: GHSA-qgm7-fc9g-fj75
Gemeldet: 31. Mai 2026

Zusammenfassung

EspoCRM ist ein weit verbreitetes Open-Source-CRM. Der Endpoint GET /api/v1/<Entity>/<id>/streamAttachments prüft komplexe Expressions im where-Parameter nicht ausreichend. Anders als andere Query-Pfade verbietet dieser Endpoint solche Expressions nicht, sodass ein authentifizierter Nutzer mit geringen Rechten eine Blind SQL Injection über den where-Parameter auslösen kann. Über einen boolean- oder zeitbasierten Oracle lassen sich beliebige Datenbankinhalte auslesen, darunter aktive Session-Tokens von Administratoren, was eine Rechteausweitung bis zur Übernahme des Admin-Kontos ermöglicht. turingpoint hat die Schwachstelle verifiziert und gemeldet; der Hersteller hat sie in 9.3.8 behoben.

Ursache

Der where-Checker von EspoCRM lässt für den streamAttachments-Pfad komplexe Expressions (mit # präfixierte Attribute) zu, ohne sie zu unterbinden. Diese Expression gelangt in die ORM-Query und wird beim Bau der SQL-Anweisung nicht ausreichend maskiert, sodass angreiferkontrollierte SQL-Fragmente in die WHERE-Klausel gelangen. Der Fix ergänzt eine zusätzliche Prüfung im where-Checker, die komplexe Expressions auf diesem Pfad ablehnt.

Proof of Concept

# Schematisch. Authentifiziert als regulärer Nutzer mit geringen Rechten.
# Der streamAttachments-where-Parameter akzeptiert komplexe Expressions
# (mit "#" präfixierte Attribute), die nicht validiert werden und
# unmaskiert in die SQL-Query gelangen.

GET /api/v1/Account/<recordId>/streamAttachments
    ?where[0][type]=equals
    &where[0][attribute]=%23<injizierte SQL-Expression>
    &where[0][value]=1
Header: Espo-Authorization: <base64(user:token)>

# Das "#"-präfixierte Attribut wird unmaskiert in die WHERE-Klausel
# emittiert und erlaubt einen blinden boolean-/zeitbasierten Oracle:
#   ... WHERE (<injizierte SQL-Expression>) = '1'
# Durch Iteration des Oracles lassen sich beliebige Spaltenwerte
# extrahieren, z. B. ein aktives auth_token eines Administrators, das
# anschliessend zur Übernahme des Admin-Kontos wiederverwendet wird.

Auswirkung

  • Blindes Auslesen beliebiger Datenbankinhalte über einen boolean-/zeitbasierten Oracle.
  • Extraktion aktiver Session-Tokens von Administratoren und dadurch Rechteausweitung bis zur Übernahme des Admin-Kontos.
  • Zugriff auf sensible CRM-Daten über die eigenen Berechtigungsgrenzen hinaus.
  • Voraussetzung ist lediglich ein authentifiziertes Konto mit geringen Rechten, keine Adminrechte und keine Nutzerinteraktion.

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.