Remote Code Execution by non-admin authenticated user
Beschreibung
Crafts Fix für CVE-2025-32432 schloss einen Weg in eine gefährliche Funktion, ließ aber die Funktion selbst unberührt und ist über eine andere Route erreichbar. In der aktuellen Version kann ein angemeldeter Inhaltseditor ohne Administratorrechte, der Zugriff auf ein Volume hat, beliebige Befehle auf dem Server ausführen. Der Fix fügte einer einzelnen Controller-Aktion eine Typprüfung hinzu („actionGenerateTransform). Die Funktion "ImageTransforms::normalizeTransform()" wird von ungefähr 8 Stellen aus aufgerufen und gibt angreiferförmige Daten direkt an die Objektfabrik von Craft weiter. Einer der anderen Anrufer ist der Element-Index-Endpunkt hinter dem Asset-Browser des Bedienfelds. Es nimmt eine Anfrage-versorgte Abfrage und überprüft sie nie, so dass ein Editor, der eine Asset-Bibliothek durchsuchen kann, die Spüle erreicht und jede von ihnen benannte Klasse instanziiert. Beschreibung Der Fix für CVE-2025-32423 befindet sich am Anrufplatz und nicht am Waschbecken. Es lehnt einen Nicht-String-"Handle" ab, bevor es den Normalizer aufruft: ""php if (!is string($handle)) {werfen Sie neue BadRequestHttpException('Invalid transform handle.'); } $transform = ImageTransforms::normalizeTransform($handle); "" Der Normalizer hat sich nie geändert. Bei einem Array wird es in Crafts Objektfabrik verteilt: ```php // src/helpers/ImageTransforms.php:314 return Craft::createObject(['class' => ImageTransform::class, ...$transform]); ``` Ein späterer Schlüssel in einem PHP-Spread gewinnt, so dass ein Angreifer, der `$transform` kontrolliert, `class` setzen und die beabsichtigte `ImageTransform::class` ersetzen kann. Crafts `createObject` lehnt nur den Fall ab, in dem sowohl ` class` als auch `class` vorhanden sind, so dass eine einsame `class` vorbeigeht. Nichts davon hängt vom yii ` class`-Bug aus CVE-2024-58136 ab, der im gebündelten yii 2.0.55 behoben wurde. Deshalb ist die Lücke beim aktuellen Release immer noch offen und nicht etwas, das ein Dependency Bump bereits geschlossen hat. Das Erreichen der Spüle ohne die Typprüfung ist eine Frage der Suche nach einem anderen Anrufer. Der Element-Index-Controller ist einer. Es wendet ein von der Anfrage bereitgestelltes `Kriterien`-Array auf die Elementabfrage an: ```php // src/controllers/ElementIndexesController.php:766 Craft::configure($query, Component::cleanseConfig(ElementHelper::cleanseQueryCriteria($criteria)); ``` `cleanseQueryCriteria()` lässt eine Blockliste von Schlüsseln fallen, behält aber `withTransforms` und `cleanseConfig()` Streifen `als ` und `on` Verhaltensschlüssel, behält aber `class`. Also `criteria[withTransforms][0][class]` überlebt in die Abfrage, und wenn die Ergebnisse gefüllt sind, übergibt der eifrige Loader sie an `normalizeTransform()`. Der Eil-Loader läuft nur, wenn die Abfrage mindestens ein Asset zurückgibt, weshalb der Angreifer Zugriff auf ein Volume benötigt, das eines enthält. Der Terminalschritt verwendet ein Gadget, das mit dem Produkt ausgeliefert wird. `yii\rbac\PhpManager` ruft `require()` auf seiner konfigurierten `itemFile` während init auf. Zeigen Sie dies auf Crafts eigenes Anforderungsprotokoll, und die Objektinjektion wird zur Codeausführung. Craft schreibt den vollständigen Anforderungskontext, einschließlich des 'User-Agent', in 'store/logs/web-.log' für jede Warnung oder Fehlereingabe, unabhängig von 'devMode'
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.10.12.
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.