Zum Inhalt springen
← Zurück zum Cyberlagebild
Zuletzt aktualisiert 25.08.2026 10:35

IDOR via GraphQL @parseRefs

CVSS –1 Quelle

Beschreibung

Die GraphQL-Direktive `@parseRefs`, die dazu bestimmt ist, interne Referenz-Tags zu analysieren (z. B. `{user:1:email}`), kann sowohl von authentifizierten Benutzern als auch von nicht authentifizierten Gästen missbraucht werden (wenn ein öffentliches Schema aktiviert ist), um auf sensible Attribute eines Elements im CMS zuzugreifen. Die Implementierung in `Elements::parseRefs` führt keine Autorisierungsprüfungen durch, sodass Angreifer Daten lesen können, die sie nicht anzeigen dürfen. ## Sicherheitsanfälligkeit Details `craft\services\Elements::parseRefs` identifiziert Referenz-Tags und löst sie mit ` getRefTokenReplacement`. Diese Methode holt das referenzierte Element ab und greift über $element-> $attribut auf das angegebene Attribut zu. - Fehlender Auth Check: Es umgeht `canView()` Checks. - Polymorpher Zugriff: `getElementTypeByRefHandle` ermöglicht das Verweisen auf jeden Elementtyp (Eingabe, Asset, Benutzer, Kategorie). Benutzerdefinierter Feldzugriff: Da Craft-Elemente ` get()` verwenden, um benutzerdefinierte Feldhandles aufzulösen, ist ein Angreifer nicht auf Kernattribute beschränkt. Sie können beliebige benutzerdefinierte Felddaten exfiltrieren, indem sie das Feldhandle aufzählen (z.B. `{entry:123:privateNotes}`). Angriffsvektoren 1. Privilegescalation / User Data Leak Ein Angreifer kann sensible Attribute von Administratoren oder anderen Benutzern aufzählen. - Payload: `{user:1:email}` oder `{user:1:photoId}` 2. Willkürliche Eigenschaftsreflexion und serverseitige Logikausführung Die Sicherheitsanfälligkeit ermöglicht es, jede zugängliche Eigenschaft des zugrunde liegenden Elementmodells widerzuspiegeln. - Username/Admin Enumeration: `{user:1:username}` (bestätigt: gibt admin zurück), {user:1:admin}. Internal Path Disclosure: Der Zugriff auf Methoden, die Fehler auslösen (z. B. `{user:1:authKey}`), zeigt vollständige Server-Stack-Spuren in der GraphQL-Fehlerantwort (z. B. Ausnahme: Es gibt kein Benutzersitzungstoken mit Pfaden wie `/var/www/html/...`). 3. IDOR zu Private Entries & Assets (Polymorphismus) Die Sicherheitsanfälligkeit ist nicht auf Benutzer beschränkt. Referenz-Tags können jeden Elementtyp anvisieren. - Payload: `{entry:456:myConfidentialField}` (Bypasses canView checks). Asset Path Leakage: `{volume:1:path}` kann interne Dateisystempfade freilegen. 4. Lokal bestätigte nicht authentifizierte Ausbeutung (Public Schema). Die `@parseRefs` Direktive ist im Public Schema aktiv. Durch Injizieren einer Nutzlast in ein öffentlich zugängliches Feld (z. B. ein "News" -Eintragstitel) kann ein nicht authentifizierter Gast die Auflösung auslösen und die sensible Ausgabe abrufen. ## Schritte zum Reproduzieren 1. Setup (Admin-Panel): - Erstellen Sie einen Abschnitt (z. B. "News") und einen Eintragstyp. - Erstellen Sie einen neuen Eintrag in diesem Abschnitt. Setzen Sie den Titel auf die Nutzlast: {user:1:username} oder {user:1:email}. - Gehen Sie zu GraphQL > Schemas > Public Schema. Aktivieren Sie es und stellen Sie sicher, dass die Abfragen "Anfrage nach Elementen auf der Website" und "Nachrichten" überprüft werden. 2. Exploit ausführen (nicht authentifiziert): - Senden Sie eine POST-Anfrage an http://localhost:8000/index.php?action=graphql/api: ``` curl -X POST \ -H "Content-Type: application/json" \ -d '{"query": "{ entry { title @parseRefs } }"} '``` 3. Beobachtung: - The API returns `{"data":{"entries":[{"title":"admin"}]}}` (oder die E-Mail). ..

HerstellerPixel & Tonic
ProduktCraft CMS
ProduktfamilieCraft Cms
Betroffene Versionen>= 4.0.0-RC1, < 4.17.0-beta.1, >= 5.0.0-RC1, < 5.9.0-beta.1
Behobene Versionen4.17.0, 5.9.0

Quellen & weiterführende Informationen

Hier werden ausschließlich tatsächlich zu dieser Schwachstelle gespeicherte Quellenbelege angezeigt.

Was ist zur Behebung zu tun?

Auf eine behobene Version aktualisieren: 4.17.0, 5.9.0.

PrioritätGelb
EinordnungZeitnah behandeln: hohes technisches Risiko.

Empfohlene Schritte

  • Betroffene Systeme identifizieren: Pixel & Tonic Craft CMS.
  • Exposition prüfen: Internet-Erreichbarkeit, Admin-Oberflächen, VPN, Mail- oder Webdienste.
  • Update/Rollout auf behobene Version vorbereiten und priorisiert einspielen.
  • Nacharbeiten dokumentieren: betroffene Assets, Maßnahme, Zeitpunkt, Restrestrisiko.

Übergangsmaßnahmen

  • Zugriff auf betroffene Dienste auf vertrauenswürdige Netze einschränken.
  • WAF/IDS/EDR-Regeln und Hersteller-IOCs aktivieren, sofern verfügbar.
  • Nicht benötigte Funktionen, Plugins oder Dienste temporär deaktivieren.
  • Administrative Zugänge besonders absichern: MFA, Passwortrotation, Session-Invalidierung.