
Proof-of-concept per il caricamento arbitrario di file autenticato in Sitecore 10.3, che consente il deployment di webshell e l'esecuzione remota di codice tramite la funzionalità di importazione delle lingue.
Autore: Thomas Stern
Data: 26/01-2023
È possibile, tramite la funzionalità di importazione delle lingue, caricare un file arbitrario. Questo file potrebbe essere una webshell che consentirebbe l'esecuzione di codice sul server.
Per testare questa vulnerabilità, è stata creata un'istanza di Sitecore 10.3 su una macchina locale tramite Docker. Questa vulnerabilità non è stata testata su versioni precedenti di Sitecore, ma versioni precedenti potrebbero essere vulnerabili alla stessa tecnica.
Host: Windows 11 In esecuzione Docker for Desktop Sitecore 10.3
Poiché si tratta di una vulnerabilità autenticata, è necessario un set di credenziali valido. Per questa istanza di test è stato utilizzato admin/b
Il toolbox si trova nel pannello di controllo di Sitecore
Ora scegli l'importazione delle lingue
Inizia scegliendo Sfoglia
Successivamente seleziona la cartella temp 'questa sarà anche la destinazione della shell.
Il codice utilizzato per il test mostra una semplice webshell scaricata da https://github.com/tennc/webshell/blob/master/fuzzdb-webshell/asp/cmdasp.aspx nota: è stata apportata una piccola modifica per eseguire PowerShell invece del cmd predefinito.
Scegli il pulsante di caricamento e seleziona la tua shell e premi Avanti
La tua shell dovrebbe ora essere stata caricata
Inizia navigando alla shell caricata "https://sitename/temp/shell.aspx" Con la shell caricata, ora è possibile avere la piena esecuzione di codice sul sistema
Il codice per il caricamento dei file di lingua dovrebbe convalidare i file caricati e consentire solo file eseguibili come aspx, exe e altri. Inoltre, i file di lingua dovrebbero essere caricati solo in una directory che non consente l'esecuzione di codice. Un modo per farlo è aggiungere una regola di blocco al web.config come quello sotto. Nota: questo bloccherà tutte le richieste verso i due file.
<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>