save_images_Asset graphql mutation can be abused to exfiltrate AWS credentials of underlying host
Beschreibung
### Zusammenfassung - Die save images Asset graphql-Mutation ermöglicht es einem Benutzer, eine URL eines Bildes zum Herunterladen zu geben. (Url muss eine Domain verwenden, keine rohe IP.) - Angreifer richtet Domain attacker.domain mit einem A-Record von etwa 169.254.169.254 (spezielle AWS-Metadaten IP) ein - Angreifer ruft save images Asset mit url auf: http://attacker.domain/latest/meta-data/iam/security-credentials und Dateiname "foo.txt" - Craft holt sensible Informationen im Namen des Angreifers ab und stellt sie unter /assets/images/foo.txt zum Download bereit - Normal checks to check that image is valid are umgangen because .txt extension - Normal checks to check that url is not an IP address are umgangen because user provided a valid domain that resolves to a sensitive internal IP address ### Details handleUpload() in src/gql/resolvers/mutations/Assets.php contains the code that processes the save images Asset mutation. Es verfügt über eine grundlegende Validierungslogik für den URL-Parameter (Quelle des Bildes) und den Dateinamen-Parameter (was das Bild als speichern soll): `` } elseif (!empty($fileInformation['url']) {$url = $fileInformation['url']); // stellen Sie sicher, dass der Hostname alphanumerisch ist und keine IP-Adresse $hostname = parse url($hostname, FILTER VALIDATE DOMAIN, FILTER FLAG HOST); wenn (!filter var($hostname, FILTER VALIDATE IP)) || filter var($hostname, FILTER VALIDATE IP)) { throw new UserError("$url enthält einen ungültigen Hostnamen."); } if (empty($fileInformation::stripQueryString($url), PATHINFO BASENAME)); } $extension = strtolower(pathinfo($file ); } Das Ergebnis dieser Validierung ist, dass URL einen Hostnamen und keine IP enthalten muss und Dateiname eine erlaubte Erweiterung enthalten muss. Wenn es sich bei der erlaubten Erweiterung um eine typische Bilderweiterung handelt, wird eine weitere Validierung durchgeführt, um zu überprüfen, ob der heruntergeladene Inhalt tatsächlich ein Bild ist. Ein authentifizierter Angreifer kann diese Mutation dazu verleiten, sensible AWS-Metadaten oder andere sensible Informationen aus dem internen Netzwerk der Craft-Instanz abzurufen. - Zuerst muss der Angreifer eine Domäne registrieren -- z.B. attacker.domain. - Als nächstes müssen sie ihre Domäne auf die sensible interne IP richten, auf die sie zugreifen möchten (z.B. 169.254.169.254) - Als nächstes stellen sie eine Anforderung an save images Asset mit URL gesetzt auf http://attacker.domain/sensitive/path mit Dateiname gesetzt auf "something.txt" - Schließlich macht der Angreifer eine http-Anforderung zum Abrufen von /assets/images/something.txt, die sensible Informationen enthält ### PoC #### Voraussetzungen - Graphql-Zugriff muss aktiviert sein - Angreifer muss Zugriff auf ein Graphql-Token haben - Token muss konfiguriert sein, um Zugriff auf save images Asset Mutation zu haben - Angreifer muss konfigu ..
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.
- Administrative Zugänge besonders absichern: MFA, Passwortrotation, Session-Invalidierung.