Magento-Sicherheit erfordert zusätzlichen Patch zur Behebung einer Schwachstelle bei der Bereinigung
DeveloperSteve Coochin
24. Februar 2022
0 Min. LesezeitIn der Tech-Branche stehen wir oft unter großem Druck, bereitgestellten Code zu korrigieren, eine Infrastrukturkomponente zu aktualisieren oder Code zu patchen. Häufig bleibt dafür kaum Vorlaufzeit – eigentlich hätte es schon vor fünf Minuten erledigt sein müssen. Bei jeder „Zero-Turnaround“-Aktion besteht das Risiko, in der Eile sofort einen Fix einzuspielen, statt sich Zeit für Tests und Prüfungen zu nehmen.
Kürzlich wurde ein kritischer Patch für Magento Ecommerce, Magento Open Source und die Adobe-Commerce-Versionen von Magento veröffentlicht, nachdem Sicherheitsforscher ein kritisches Problem in der weitverbreiteten E-Commerce-Plattform entdeckt hatten. CVE-2022-24086 beschreibt eine Schwachstelle, über die nicht authentifizierte Benutzerinnen und Benutzer während des Bezahlvorgangs eine SQL-Injection oder eine PHP-Objekt-Injection ausführen konnten.
Adobe Security veröffentlichte daraufhin zunächst einen Patch und reagierte schnell, um eine Lösung bereitzustellen. Einige Tage später stellten Forschende fest, dass der Patch nicht ausreichte, um den Code abzusichern. In der Folge wurde eine neue CVE-2022-24087 vergeben und ein zweiter Patch bereitgestellt.
Ein Patch für die neu identifizierte Schwachstelle ist im aktuellen Sicherheitsalert von Adobe verfügbar. Der neue Patch muss zusätzlich zum ursprünglichen Patch für CVE-2022-24086 angewendet werden.
Was mir im Bereich AppSec besonders wichtig ist: Deployments, Bibliotheken und alles, was sich auf die Endnutzerinnen und Endnutzer einer Plattform auswirken kann, sorgfältig zu prüfen. Sehen wir uns also den aktuellen Patch genauer an und untersuchen, was sich geändert hat.
Ein Blick auf den Patch für CVE-20220-24087
Bevor wir uns näher mit dem neuen Patch MDVA-43443 befassen, sehen wir uns noch einmal den ursprünglichen Patch MDVA-43395 an und klären, was er bewirkt hat.
Wichtig ist: Beide Schwachstellen betreffen ausschließlich Magento Open Source und Adobe Commerce in den Versionen ab 2.3.4 und vor 2.4.5-p1 bzw. 2.3.7-p2.
Der ursprüngliche Patch (MDVA-43395) ergänzte die Magento-Shop-Anwendungslogik während des Bezahlvorgangs um eine sichere Bereinigung von Benutzereingaben. Für /Email/Model/Template/transDirective und VarDirective.php kamen Muster für preg_replace() und preg_match() hinzu, um unerwünschte Zeichentypen in Benutzereingaben herauszufiltern.

Nach der Bereitstellung des Patches stellten Sicherheitsforscher fest, dass er nicht ausreichte, um den Angriffsvektor zu entschärfen. Tatsächlich eröffnete er sogar die Möglichkeit, dass im Framework noch tiefgreifendere Schwachstellen entstehen.
Der neue Patch (MDVA-43443) führt eine wiederverwendbare Framework-Funktion namens sanitizeValue() ein. Sie erweitert \Magento\Framework\Filter\Template und führt eine Bereinigungsprüfung und einen Abgleich mit preg_replace durch.

Anschließend wird sanitizeValue() verwendet, um den Bereinigungscode mit preg_match() und preg_replace() zu ersetzen, der mit dem ursprünglichen Patch MDVA-43395 hinzugefügt wurde.

Die Funktion sanitizeValue() wird anschließend an mehreren Stellen in der Codebasis verwendet, unter anderem beim Laden bereinigter Konfigurations- und benutzerdefinierter Wertetypen.

In blockDirective() kommt weitere Bereinigungslogik hinzu: Die Zeichenabgleiche und Bereinigung werden im Kern von \Magento\Framework\FilterTemplate erweitert.

resolveBlockDirective wird von einer öffentlichen zu einer privaten Funktion geändert, und layoutDirective wird in resolveLayoutDirective überführt.
Der Wechsel von einer öffentlichen zu einer privaten Funktion ist für die PHP-Anwendungssicherheit wichtig: Eine private Funktion kann nur innerhalb der übergeordneten Klasse verwendet werden. Eine öffentliche Funktion kann dagegen überall in der gesamten Anwendung aufgerufen werden.

Beide Patches sind über das Adobe Security Bulletin APSB22-12 verfügbar – entweder zur Installation mit PHP Composer oder zum Einpflegen in eine geforkte Codebasis.
Denken Sie daran, vor der Anwendung beider Patches sichere Backups zu erstellen und den Code vor dem Deployment zu testen.
Melden Sie sich bei Snyk an und erhalten Sie Benachrichtigungen zu neuen Schwachstellen
Bei großen Open-Source-Projekten wie Magento überwache ich immer das öffentliche Repository über mein Snyk Dashboard.
Klicken Sie auf Projekt hinzufügen und überwachen Sie öffentliche GitHub-Repositories.

Das ist besonders bei Entwicklungszweigen eines Projekts hilfreich, denn so werden Sie bereits während der Entwicklung auf mögliche Probleme aufmerksam. Außerdem können Sie dadurch zum Projekt beitragen und mögliche Probleme beheben, solange es noch in der Entwicklung ist.
Bei Plattformprojekten wie Magento sucht der Überwachungsprozess nach Paketmanifesten, Code, Containern und IaC-Konfigurationen, um sie zu scannen und potenzielle Probleme aufzuzeigen. Besonders hilfreich: Er schlägt auch mögliche Korrekturen vor und führt Sie Schritt für Schritt durch die erkannten Probleme.
Starten Sie mit Capture the Flag
Erfahren Sie in unserem virtuellen On-Demand-Workshop für Einsteiger, wie Sie Capture-the-Flag-Herausforderungen lösen.



