Potential authenticated Remote Code Execution via malicious attached Behavior
Beschreibung
Eine RCE-Schwachstelle (Remote Code Execution) existiert in Craft CMS 5.x und 4.x, die die Sicherheitskorrekturen für GHSA-7jx7-3846-m7w7 und GHSA-255j-qw47-wjh5 umgeht. Diese Sicherheitsanfälligkeit kann von jedem authentifizierten Benutzer mit Bedienfeldzugriff ausgenutzt werden. Die vorhandenen Patches fügen `cleanseConfig()` zu `assembleLayoutFromPost()` und verschiedene `FieldsController`-Aktionen hinzu, um die Yii2-Verhaltens-/Ereignis-Injektionsschlüssel zu entfernen (`as ` und `on ` prefixed keys). Der Parameter "fieldLayouts" in "ElementIndexesController::actionFilterHud()" wird jedoch ohne jegliche Desinfektion direkt an "FieldLayout::createFromConfig()" übergeben, wodurch die gleiche Verhaltens-Injektionsangriffskette aktiviert wird. ## Impact - **Attack Type **: Remote Code Execution (RCE) - **Authentication Required **: Authenticated user with control panel access (`accessCp` permission) ## Vulnerability Details ### Root Cause In `ElementIndexesController::actionFilterHud()` (Zeile 493-494), the `fieldLayouts` body parameter is pass to `FieldLayout::createFromConfig()` without `cleanseConfig()`: ````php // ElementIndexesController.php: 485-494 if ($conditionConfig) {$conditionConfig = Component::cleanseConfig($conditionConfig); // conditionConfig IS cleansed $condition = $conditionsService->createCondition($conditionConfig); } else {$condition = $this->elementType()::createCondition(); } if (!empty($fieldLayouts)) { $condition->setFieldLayouts(array map(fn(array $config) => FieldLayout::createFromConfig($config), $fieldLayouts)); } ``` Beachten Sie die Inkonsistenz: `conditionConfig` ist mit `cleanseConfig()` desinfiziert, `fieldLayouts` jedoch nicht. ### Angriffskette 1. Senden Sie ein FeldLayouts`-Array, das config mit `"as"` prefixed keys enthält. `FieldLayout::createFromConfig($config)` -> `new self($config)` -> `Model::configure($this, $config)`. `App::configure($this, $config)` verarbeitet jeden Schlüssel. `"as rce"` key -> `component:: set("as rce", $value)` -> `yii::createObject($value)` -> instantiates `AttributeTypecastBehavior` und fügt es dem FeldLayout 5 bei. `"on *"` key -> registers a wildcard event handler 6. `'eltern:: construct()` -> `getAvailableNativeFields()` -> `trigger(EVENT DEFINE NATIVE FIELDS)` ### Voraussetzungen - Ein Benutzerkonto mit Zugang zum Bedienfeld ### Referenzen - https://github.com/craftcms/cms/commit/97e90b4bdee369c1af3ca77a77531132df240e4e
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.13.
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.