Magento Sicherheitspatch MVDA-43443 als Zusatz zu MVDA-43395

  • 18. Februar 2022
  • Sarah Fox
  • 4 min read

Das unter Adoce Commerce APSB22-12 veröffentliche Patch MVDA-43395 von Sonntag wurde am gestrigen Donnertag noch um das Patch MVDA-43443 ergänzt. Die Sicherheitslücke wird weiterhin als kritisch eingestuft.

Warum wurde nicht gleich alles behoben?

Sicherheitslücken haben die unschöne Eigenart, bis zu ihrer Aufdeckung oft unsichtbar zu sein. Wird ein Hinweis auf eine Sicherheitslücke gefunden, gemeldet oder öffentlich gemacht, beginnt häufig erst die eigentliche Arbeit.

Um eine Sicherheitslücke nachweisen zu können, muss sie zuerst exponiert werden (der sog. Exploit). Dabei kann das Ausmaß des möglichen Schadens im Vorfeld oft nur schwer bemessen werden.
Die Ausnutzung der Sicherheitslücken erfolgt dabei nicht selten in mehreren Schritten, die den eigentlichen Angriff vorbereiten. Über diesen Weg lassen sich Sicherheitslücken ausnutzen und ihre Tatsächlichen Auswirkungen auf das System können dann anhand der erprobten Methode untersucht und behoben werden.

Wie ist der Patch anzuwenden?

Die benötigten Dateien für den Patch können auf der Seite von Adobe heruntergeladen werden. Abhängig von der Art der Installation und der aktuellen Version des Magento-Systems stehen hier unterschiedliche Patches bereit.

In unserem Beitrag zum Patch MVDA-43395 vom 14.02.2022 sind wir das Anwenden des Patches Schritt für Schritt durchgegangen. Bei diesem Patch verhält es sich ebenso.

Mit der Patches Erweiterung für Composer von cweagans können über eine Ergänzung in der composer.json Patches auf bestimmte Module angewendet werden. Zu den hier beschriebenen Änderungen ergänzen wir das neue Patch NACH dem vorherigen MDVA-43395:

"extra": {
        "magento-force": "override",
        "patches": {
            "magento/framework" : {Änderungen ergänzen 
                "MDVA-43395": "patches/MDVA-43395-framework.patch",
                "MDVA-43443": "patches/MDVA-43443-framework.patch"
            },
            "magento/module-email" : {
                "MDVA-43395": "patches/MDVA-43395-email.patch",
                "MDVA-43443": "patches/MDVA-43443-email.patch"
            },
        }
    }

Wir erzeugen erneut einen Ordner patches der auf der selben Ebene wie die composer.json liegt. Da Adobe ein Patchfile für zwei Module bereitstellt, muss es für unser Beispiel in zwei Dateien aufgeteilt werden:

MDVA-43443-email.patch (verkürzte Darstellung)

diff --git a/Model/Template/Filter.php b/Model/Template/Filter.php
index 586cb485ee1f..a7f0825cb41f 100644
--- a/Model/Template/Filter.php
+++ b/Model/Template/Filter.php
@@ -392,14 +392,14 @@ public function getStoreId()
     }

     /**
-     * Retrieve Block html directive
-     *
      * @param array $construction
+     *
      * @return string
+     *
      * @SuppressWarnings(PHPMD.CyclomaticComplexity)
      * @SuppressWarnings(PHPMD.NPathComplexity)
      */
-    public function blockDirective($construction)
+    private function resolveBlockDirective($construction)
     {
         $skipParams = ['class', 'id', 'output'];
         $blockParameters = $this->getParameters($construction[2]);
@@ -440,12 +440,26 @@ public function blockDirective($construction)
     }

     /**
-     * Retrieve layout html directive
+     * Retrieve Block html directive

MDVA-43443-framework.patch

diff --git a/Filter/DirectiveProcessor/DependDirective.php b/Filter/DirectiveProcessor/DependDirective.php
index f557f7465b5f..83345acd6e5b 100644
--- a/DirectiveProcessor/DependDirective.php
+++ b/DirectiveProcessor/DependDirective.php
@@ -32,9 +32,13 @@ public function __construct(
     }

     /**
-     * @inheritdoc
+     * @param array $construction
+     * @param Template $filter
+     * @param array $templateVariables
+     *
+     * @return string
      */
-    public function process(array $construction, Template $filter, array $templateVariables): string
+    private function resolve(array $construction, Template $filter, array $templateVariables): string
     {
         if (empty($templateVariables)) {
             // If template processing
@@ -48,6 +52,16 @@ public function process(array $construction, Template $filter, array $templateVa
         }
     }

Auch müssen die Pfade in dem Patch angepasst werden. das von Magento beretigestellte Patch geht davon aus, dass das System einmalig von außen gepatched wird. Unsere Methode wird allerdings auf die einzelnen Composer Module von Magento angewendet.

Ohne Composer Patches muss das Patch nach jedem composer install erneut angewendet werden. Hierfür stellt Adobe zwei unterschiedliche Patches bereit. Eines für ein mit composer aufgesetztes Magento System, eines ohne.

Das Vorgehen ist hierbei identisch. Man wendet entweder MDVA-43443_EE_2.4.3-p1_COMPOSER_v1.patch oder MDVA-43395_EE_2.4.3-p1_v1.patch an:

patch -p1 < MDVA-43395_EE_2.4.3-p1_v1.patch
patching file vendor/magento/module-email/Model/Template/Filter.php
Hunk #1 succeeded at 605 (offset -13 lines).
patching file vendor/magento/framework/Filter/DirectiveProcessor/VarDirective.ph

Photo by Jason Blackeye on Unsplash