
Autor: Thomas Stern
Data: 26/01-2023
É possível, através da funcionalidade de importação de idiomas, fazer upload de um arquivo arbitrário. Este arquivo pode ser um webshell que permitiria a execução de código no servidor.
Para testar essa vulnerabilidade, uma instância do Sitecore 10.3 foi iniciada em uma máquina local através do Docker. Esta vulnerabilidade não foi testada em versões anteriores do Sitecore, mas versões mais antigas podem ser vulneráveis à mesma técnica.
Host: Windows 11 Executando Docker for Desktop Sitecore 10.3
Como esta é uma vulnerabilidade autenticada, é necessário um conjunto válido de credenciais. Para esta instância de teste, foi usado admin/b
A caixa de ferramentas é encontrada no painel de controle do Sitecore
Agora escolha importar idiomas
Comece escolhendo Procurar
Em seguida, selecione a pasta temporária 'esta também será o destino do shell.
O código usado para teste é um webshell simples baixado de https://github.com/tennc/webshell/blob/master/fuzzdb-webshell/asp/cmdasp.aspx. Observe que uma pequena modificação foi feita para executar o PowerShell em vez do cmd padrão.
Escolha o botão de upload, selecione seu shell e pressione próximo
Seu shell agora deve estar carregado
Comece navegando para o shell carregado "https://sitename/temp/shell.aspx" Com o shell carregado, agora é possível ter execução total de código no sistema
O código para fazer upload dos arquivos de idioma deve validar os arquivos sendo enviados e permitir apenas arquivos executáveis como aspx, exe e outros. Além disso, os arquivos de idioma devem ser carregados apenas em um diretório que não permita execução de código. Uma maneira de fazer isso é adicionar uma regra de bloqueio ao web.config como abaixo. Observe que isso bloqueará todas as solicitações para os dois arquivos.
<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>