Unauthorized Deletion of Source Assets During File Replacement
Beschreibung
Wir haben ein Autorisierungsproblem in Craft CMS `AssetsController::actionReplaceFile` identifiziert, das ein Quellobjekt ohne Quelllöschberechtigung löschen kann, indem es sowohl `assetId` als auch `sourceAssetId` zur Verfügung stellt. ### Description Craft CMS `craft\\controllers\\AssetsController::actionReplaceFile()` unterstützt das Ersetzen einer Ziel-Asset-Datei unter Verwendung eines anderen vorhandenen Assets als Quelle. Die Aktion lädt: - `$assetToReplace` von `asset Id` - `$sourceAsset` von `sourceAssetId` Es erzwingt dann Ersatzberechtigungen mit `($assetToReplace ?: $sourceAsset)`. Wenn beide IDs bereitgestellt werden, wird dieser Ausdruck auf das Ziel-Asset aufgelöst, so dass keine Berechtigungsprüfung für das Quell-Asset-Volume durchgeführt wird. ```php $this->requireVolumePermissionByAsset('replaceFiles', $assetToReplace ?: $sourceAsset); $this->requirePeerVolumePermissionByAsset('replacePeerFiles', $assetToReplace ?: $sourceAsset); ``` [*src/controllers/AssetsController.php:L433-L434*](https://github.com/craftcms/cms/blob/5.x/src/controllers/AssetsController.php#L433-L434) In dem Zweig, in dem beide Assets vorhanden sind, kopiert Craft die Quelldatei in das Ziel und löscht dann das Quell-Asset. Es gibt keine Überprüfung für `deleteAssets:` oder `deletePeerAssets:` für das Quell-Asset vor dem Löschen. ``php $assets->replaceAssetFile($assetToReplace, $tempPath, $assetToReplace->getFilename(), $sourceAsset->getMimeType()); Craft::$app->getElements()->deleteElement($sourceAsset); ``[*src/controllers/AssetsController.php:L462-L463*](https://github.com/craftcms/cms/blob/5.x/src/controllers/AssetController.php#L462-L463) ### Impact Ein authentifizierter Benutzer, der Dateien in einem Volume ersetzen kann, kann Assets in einem anderen Volume löschen, in dem er keine Löschberechtigung hat, solange er eine "sourceAssetId" erhalten kann. Dies kann zu unautorisierten Asset-Löschungen, fehlerhaften Inhaltsreferenzen und Datenverlust führen. ## Referenzen https://github.com/craftcms/cms/commit/2c2579c7f1030872423f268d0c8b48377101961d
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.21, 4.17.14.
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.