É aqui que publicarei análises de exploits públicos, ou alguns dos meus exploits de 1day.
[ Análise de exploits públicos ]
Pessoalmente, acho que a melhor forma de aprender um exploit público é entendê-lo linha por linha até conseguir compreendê-lo ao máximo. Publicarei alguns desses exploits (excessivamente comentados ;) ) para que outros possam aprender com eles e como uma tentativa de retribuir algo à comunidade. Também para fins de documentação, porque essas coisas meio que somem da minha cabeça com o tempo.
Este exploit sobrescreve um ponteiro de objeto em outro objeto. Ele usa o ataque ret2dir para fazer o ponteiro corrompido apontar para um endereço fixo previsível no kernel que contém o payload do exploit. Essa técnica de exploit contorna PXN e PAN.
Este exploit apaga 16 bytes de um objeto global útil, que está localizado em um endereço fixo no kernel.
Um ponteiro de objeto corrompido dentro do objeto global referencia o payload do exploit a partir do userland. Esse tipo de ataque não funcionará em dispositivos/kernels com PAN(ou emulação de PAN).
extra_recipe
Minha tentativa de entender o jailbreak extra_recipe
Eu estava especialmente interessado na parte de bypass do kpp. Embora houvesse alguns slides sobre o assunto em que eu conseguia vislumbrar uma imagem vaga do bypass, eu realmente queria me aprofundar nos detalhes e ver o que está realmente acontecendo dentro do código
Eu também queria entender os ingredientes finais para um jailbreak(instalar o Cydia, etc.)
yalu102 (ViewController.m)
Comentei a parte relevante ao bug real e como ele foi explorado.
A razão pela qual analisei o yalu102 em vez do exploit original é porque a técnica de port-feng-shui parecia mais limpa e direta de entender.
A análise para logo antes do bypass do kpp
extra_recipe-master do xerub (jailbreak.c, unjail.m, patchfinder64.c, pte_stuff.h)
Pulo para cá porque tinha um pouco mais de informação sobre os vários offsets numéricos.
Além disso, o patchfinder.c está intacto, ao contrário do yalu102, em que há apenas um arquivo objeto.
A parte do cydia é meio incompleta, então pulo para o branch cydia depois do kpp
extra_recipe-cydia do xerub (unjail.m)
Tentando entender os ingredientes para um jailbreak após tfp0 e pós-exploração
Ele usa técnicas incríveis para começar de primitivas realmente fracas, construir um AAR mais forte e, finalmente, construir um task port completo. A mágica de port por trás do código do exploit é inacreditável. Tudo isso com um estouro de heap de 8 bytes NULL. Absolutamente alucinante.
Escrevi algumas ideias ingênuas para melhorar a confiabilidade. Espero que alguém lance uma versão mais confiável do exploit no futuro. :)
Um enorme agradecimento ao kudima(@begger_dd) pelo writeup muito claro, conciso e totalmente anotado! :)
O writeup explica o bug de type confusion no JIT, algumas limitações nas conversões de boxing/unboxing(que podem introduzir falta de confiabilidade) e um passo a passo detalhado de como as primitivas AAR/AAW iniciais/finais são construídas. Ele também fornece insights sobre as mudanças nas técnicas de exploração após a rodada recente de mitigações(index masking, envenenamento do backing store do ArrayBuffer, algumas mudanças no mecanismo do W^X JIT, mudanças na estrutura do JSObject, etc)
jsc_ConcatMemcpy_infoleak
Esta é uma versão comentada do exploit de infoleak do WebKit do kudima(corrigido em 2018.8.27).
Ele decorre de uma correção incompleta de um dos bugs relatados por lokihardt. O patch do relatório de lokihardt corrigiu a primitiva de type confusion Double -> Object, mas não a corrigiu no sentido inverso; Object -> Double.
Ele faz spray no heap do webkit com butterflies contendo um único objeto e um marcador, e mais tarde aciona o bug do concat e preenche uma grande porção de vários arrays de double com dados não inicializados do heap. Ele itera pelos arrays de double não inicializados produzidos pelo concat bugado até encontrar o endereço do objeto previamente pulverizado e o vaza.
Obrigado novamente kudima(@begger_dd) pelo ótimo exploit e writeup! :)
[ 1Day ]
CVE-2017-2547
Um dia, olhei para o exploit do singi depois que ele foi apresentado na Zer0con 2018, e decidi melhorá-lo.
Esta é uma versão autônoma do exploit, antes de eu integrá-la ao pwnjs.
As melhorias incluem
Maior confiabilidade(funciona perfeitamente após longas sessões de navegação com memória contaminada)
Removidos todos os offsets hardcoded para torná-lo compatível com várias versões de navegador
Usada uma técnica de exploração diferente(a técnica padrão de desalinhamento)
Eventualmente integrei-o ao framework pwnjs criando um protótipo webkit
Deixei o código muito mais legível e adicionei muitos comentários
Agradecimentos Especiais
qwertyoruiop & Samuel Grob pelo incrível artigo da phrack e pelos exploits públicos
Brian Pak & Andrew Wesie pelo incrível framework pwnjs!