
CENG 325 - Princípios de Segurança da Informação e Privacidade
Membros do Grupo
@canumay @aslihann @ezgigucuyener @mburakdonmez
Referências
Exploit DB - Apache Tika-server < 1.18 - Injeção de Comandos
Rhino Security Labs - Explorando CVE-2018-1335: Injeção de Comandos no Apache Tika
Aviso Legal
O código de exploração foi escrito pelo Pesquisador de Segurança Cibernética David Yesland @Daveysec e deve ser usado apenas para fins educacionais.
a. Uma breve descrição da vulnerabilidade
b. A forma de explorar a vulnerabilidade
Que tipos de ataques podem ser implementados após acionar a vulnerabilidade: Após acionar a vulnerabilidade, podemos facilmente criar um shell reverso, e com esse shell podemos basicamente executar todos os comandos disponíveis para o usuário que executa o servidor Apache Tika.
Como um invasor explora sistemas vulneráveis usando a vulnerabilidade: Primeiramente, o invasor deve determinar se o servidor está executando uma versão vulnerável do servidor Apache Tika. Em seguida, o invasor gera um cabeçalho HTTP malicioso e o código Jscript antes de enviar uma requisição PUT ao endpoint HTTP vulnerável, o que faz com que o servidor Apache Tika execute o código malicioso usando sua própria funcionalidade.
A vulnerabilidade é usada em kits de exploração: Sim, esta vulnerabilidade está disponível no kit de exploração Metasploit.
a. Encontre ou crie um código de exploração que explore a vulnerabilidade

b. Destaque as partes do código vulnerável e explique por que são vulneráveis

O servidor Apache Tika cria um comando para executar, com os valores fornecidos pelo usuário na
requisição para executar OCR em imagens. Isso permite que os usuários manipulem o comando e executem
código malicioso. Neste caso, o config.getTesseractPath() obtém o cabeçalho X-Tika-OCRTesseractPath
e o adiciona ao início do comando. Embora a string tesseract.exe seja adicionada
ao final do caminho fornecido pelo usuário, o usuário pode encapsular seu caminho com aspas duplas " para descartar
a string tesseract.exe seguinte. Isso permite que o usuário execute qualquer executável no servidor.
O comando criado:
"calc.exe"tesseract.exe C:\Users\Test\AppData\Local\Temp\apache-tika3299124493942985299.tmp C:\Users\Test\AppData\Local\Temp\apache-tika7317860646082338953.tmp -l eng -psm 1 txt -c preserve_interword_spaces=0
O CScript.exe embutido no Windows é uma linguagem de script que recebe um nome de arquivo para um script
e o executa, ignorando os outros argumentos. Se pudermos fornecer um script criado para o cscript, podemos
executá-lo no servidor. O servidor Apache Tika pega nossa imagem fornecida no corpo e a salva em um
arquivo temporário para executar o OCR; portanto, em vez de enviar um binário de imagem, podemos enviar diretamente uma string e
a string será salva como se fosse um binário. Mas o servidor Tika verifica se o binário é uma imagem,
exceto para o tipo de arquivo jp2, caso em que é salvo diretamente. Isso será passado como argumento para
o executável cscript. Mas a extensão do arquivo ainda será .tmp, mas precisamos de uma extensão .jscript ou .vbs. Para
contornar isso, podemos instruir o cscript a executar JScript independentemente da extensão do arquivo. O servidor Tika também
passa o config.getPageSetMode() para o comando, que é enviado pelo usuário no cabeçalho X-Tika-OCRLanguage.
Se o alterarmos com a string //E:Jscript, o cscript executará o script como
JScript independentemente da extensão do arquivo. E, finalmente, a string fornecida no corpo será
o payload a ser executado, que também pode chamar outro console para ter acesso total ao shell do sistema.
O comando final criado:
"cscript.exe"tesseract.exe C:\Users\Test\AppData\Local\Temp\apache-tika3299124493942985299.tmp C:\Users\Test\AppData\Local\Temp\apache-tika7317860646082338953.tmp -l //E:Jscript -psm 1 txt -c preserve_interword_spaces=0
Um payload simples para chamar o shell em Jscript:
var oShell = WScript.CreateObject("WScript.Shell");
var oExec = oShell.Exec('cmd /c calc.exe');
a. Execute o código de exploração que você encontrou ou criou:

O Apache Tika Server 1.17 está sendo executado dentro da máquina virtual alvo.

Podemos acessar o servidor a partir da nossa máquina host com o IP 192.168.233.167.

Em seguida, executamos o código de exploração criado com o payload calc.exe para executar a calculadora dentro da máquina
alvo, para mostrar que temos a capacidade de executar qualquer código malicioso dentro da máquina alvo. Além disso, com
o poder do shell reverso, podemos criar uma sessão de shell interativa na máquina alvo.

b. Quais são os resultados da execução do código de exploração:
Como explicamos acima, com este exploit, basicamente executamos o programa calculadora dentro da máquina alvo, mas com a capacidade de Execução Remota de Código podemos fazer o que quisermos na máquina alvo com os privilégios do usuário que executa o Apache Tika Server. Por exemplo, podemos acessar arquivos do usuário, monitorar a atividade do usuário e até mesmo tirar uma captura de tela ou tirar uma foto com a webcam, se existir.
c. Como podemos saber que a vulnerabilidade realmente existe:
Esta vulnerabilidade já foi reportada por fontes confiáveis como o NIST, e até mesmo confirmada e corrigida pela própria Apache. Mas para provar, podemos fazer outra Prova de Conceito (PoC) usando o Metasploit.

Primeiro, confirmamos que a versão instalada é uma versão vulnerável.

Após confirmar a versão, podemos configurar nossa sessão do Metasploit com o IP e porta corretos e executar
o comando check para verificar se o alvo é vulnerável.

Finalmente, podemos executar o comando exploit para iniciar o exploit e confirmar que o shell está ativo digitando
dir no shell. A partir daqui, a única limitação são os privilégios do usuário que executa o servidor Apache Tika.