
Auteur : Thomas Stern
Date : 26/01-2023
Il est possible, via la fonctionnalité d'importation des langues, de téléverser un fichier arbitraire. Ce fichier pourrait être un webshell permettant l'exécution de code sur le serveur.
Pour tester cette vulnérabilité, une instance Sitecore 10.3 a été déployée sur une machine locale via Docker. Cette vulnérabilité n'a pas été testée sur les versions précédentes de Sitecore, mais les versions antérieures pourraient être vulnérables à la même technique.
Hôte : Windows 11 Exécution de Docker Desktop Sitecore 10.3
Cette vulnérabilité étant authentifiée, un ensemble d'identifiants valides est requis. Pour cette instance de test, admin/b a été utilisé.
La boîte à outils se trouve sous le panneau de configuration de Sitecore.
Choisissez maintenant l'importation de langue.
Commencez par choisir Parcourir.
Sélectionnez ensuite le dossier temp « ce sera également la destination du shell ».
Le code utilisé pour les tests est un simple webshell téléchargé depuis https://github.com/tennc/webshell/blob/master/fuzzdb-webshell/asp/cmdasp.aspx. Notez qu'une petite modification a été apportée pour exécuter powershell au lieu du cmd par défaut.
Cliquez sur le bouton Téléverser, sélectionnez votre shell et appuyez sur Suivant.
Votre shell devrait maintenant être téléversé.
Commencez par accéder au shell téléversé « https://sitename/temp/shell.aspx ». Une fois le shell téléversé, il est désormais possible d'exécuter du code en totalité sur le système.
Le code de téléversement des fichiers de langue doit valider les fichiers téléversés et n'autoriser que les fichiers exécutables comme aspx, exe, etc. De plus, les fichiers de langue ne doivent être téléversés que dans un répertoire qui n'autorise pas l'exécution de code. Une façon de procéder consiste à ajouter une règle de blocage au web.config comme ci-dessous. Notez que cela bloquera toutes les requêtes vers ces deux fichiers.
<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>