
Proof-of-Concept für authentifizierten beliebigen Datei-Upload in Sitecore 10.3, der die Bereitstellung von Webshells und die Ausführung von Remote-Code über die Funktion zum Importieren von Sprachen ermöglicht.
Autor: Thomas Stern
Datum: 26/01-2023
Über die Funktion 'Sprachen importieren' ist es möglich, eine beliebige Datei hochzuladen. Diese Datei könnte eine Webshell sein, die die Ausführung von Code auf dem Server ermöglicht.
Zum Testen dieser Sicherheitslücke wurde eine Sitecore 10.3-Instanz auf einem lokalen Rechner über Docker gestartet. Diese Sicherheitslücke wurde nicht auf früheren Versionen von Sitecore getestet, aber frühere Versionen könnten für dieselbe Technik anfällig sein.
Host: Windows 11 Läuft mit Docker Desktop Sitecore 10.3
Da es sich um eine authentifizierte Sicherheitslücke handelt, sind gültige Anmeldedaten erforderlich. Für diese Testinstanz wurde admin/b verwendet.
Die Toolbox befindet sich im Control Panel von Sitecore.
Wählen Sie nun 'Sprachen importieren'
Beginnen Sie mit der Auswahl von 'Durchsuchen'
Wählen Sie als Nächstes den temp-Ordner – dieser wird auch das Ziel für die Shell sein.
Der zum Testen verwendete Code zeigt eine einfache Webshell, die von https://github.com/tennc/webshell/blob/master/fuzzdb-webshell/asp/cmdasp.aspx heruntergeladen wurde. Beachten Sie: Es wurde eine kleine Änderung vorgenommen, um PowerShell anstelle der Standard-cmd auszuführen.
Klicken Sie auf 'Hochladen', wählen Sie Ihre Shell aus und klicken Sie auf 'Weiter'.
Ihre Shell sollte nun hochgeladen sein.
Beginnen Sie, indem Sie zur hochgeladenen Shell navigieren: 'https://sitename/temp/shell.aspx' Mit der hochgeladenen Shell ist es nun möglich, vollständige Codeausführung auf dem System zu erlangen.
Der Code zum Hochladen der Sprachdateien sollte die hochgeladenen Dateien validieren und nur ausführbare Dateien wie ASPX, EXE und mehr zulassen. Außerdem sollten Sprachdateien nur in ein Verzeichnis hochgeladen werden, das keine Codeausführung zulässt. Eine Möglichkeit hierfür ist das Hinzufügen einer Blockierungsregel zur web.config wie unten dargestellt. Beachten Sie: Dies blockiert alle Anfragen an die beiden Dateien.
<rule name="BlockFileUpload" enabled="true" patternSyntax="Wildcard" stopProcessing="true">
<match url="*" />
<conditions logicalGrouping="MatchAny">
<add input="{URL}" pattern="*sitecore/shell/Applications/Files/FileBrowser.aspx" />
<add input="{URL}" pattern="*sitecore/shell/Applications/Dialogs/Upload/Upload2.aspx" />
</conditions>
<action type="CustomResponse" statusCode="404" statusReason="File or directory not found." statusDescription="The resource you are looking for might have been removed, had its name changed, or is temporarily unavailable." />
</rule>