
Prueba de concepto para la carga arbitraria de archivos autenticada en Sitecore 10.3, que permite el despliegue de webshell y la ejecución remota de código mediante la funcionalidad de importación de idiomas.
Autor: Thomas Stern
Fecha: 26/01-2023
Es posible, mediante la funcionalidad de importación de idiomas, cargar un archivo arbitrario. Este archivo podría ser una webshell que permitiría la ejecución de código en el servidor.
Para probar esta vulnerabilidad, se generó una instancia de Sitecore 10.3 en una máquina local mediante Docker. Esta vulnerabilidad no se ha probado en versiones anteriores de Sitecore, pero versiones anteriores podrían ser vulnerables a la misma técnica.
Host: Windows 11 Ejecutando Docker for Desktop Sitecore 10.3
Dado que se trata de una vulnerabilidad autenticada, se requiere un conjunto válido de credenciales. Para esta instancia de prueba se usó admin/b
El cuadro de herramientas se encuentra en el panel de control de Sitecore

Ahora elija importar idiomas

Comience eligiendo Examinar

A continuación, seleccione la carpeta temp 'esta también será la ubicación de destino para la shell.

El código utilizado para las pruebas es una webshell simple descargada de https://github.com/tennc/webshell/blob/master/fuzzdb-webshell/asp/cmdasp.aspx. Nota: se realizó una pequeña modificación para ejecutar PowerShell en lugar del cmd predeterminado.
Elija el botón de carga y seleccione su shell y presione siguiente

Su shell debería estar cargada ahora

Comience navegando a la shell cargada "https://sitename/temp/shell.aspx" Con la shell cargada, ahora es posible tener ejecución completa de código en el sistema

El código para cargar los archivos de idioma debería validar los archivos que se cargan y permitir solo archivos ejecutables como aspx, exe y más. Además, los archivos de idioma solo deberían cargarse en un directorio que no permita la ejecución de código. Una forma de hacerlo es agregando una regla de bloqueo al web.config como la siguiente. Nota: esto bloqueará todas las solicitudes a los dos archivos.
<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>