Sobre
Este é o lugar onde publicarei análises de exploits públicos, ou alguns dos meus exploits 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é compreendê-lo por completo. 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 desaparecem da minha cabeça com o passar do tempo.
CVE-2016-8655
- Esta é uma análise detalhada do exploit do rebel.
- Obrigado rebel pelo incrível exploit! :D
CVE-2016-5342
versão mp3
- Esta é uma versão comentada do exploit LPE Android do freener
- arm32
- Overflow de heap
- Este exploit sobrescreve diretamente o ponteiro de função de outro objeto.
versão tty
- Esta é uma versão comentada do exploit LPE Android do freener
- arm32
- Overflow de heap
- 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.
CVE-2016-2434
- Esta é uma versão comentada do exploit LPE Android do Jianqiang Zhao
- arm64
- Zera 16 bytes em um endereço arbitrário.
- Este exploit apaga 16 bytes de um objeto global útil, localizado em um endereço fixo no kernel.
- Um ponteiro de objeto corrompido dentro do objeto global referencia o payload do exploit vindo do userland. Esse tipo de ataque não funcionará em dispositivos/kernels com PAN (ou emulação de PAN).
- Minha tentativa de entender o jailbreak extra_recipe
- Eu estava especialmente interessado na parte do bypass do kpp. Embora houvesse alguns slides sobre o assunto onde eu podia captar uma imagem vaga do bypass, eu realmente queria mergulhar nos detalhes finos e ver o que está realmente acontecendo dentro do código.
- Também queria entender os ingredientes finais para um jailbreak (instalar Cydia, etc.)
yalu102 (ViewController.m)
- Comentei a parte relevante ao bug em si, 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 exatamente antes do bypass do kpp.
- Pulei 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, onde há apenas um arquivo objeto.
- A parte do Cydia é meio incompleta, então pulei para o branch cydia depois do kpp.
- Tentando entender os ingredientes para um jailbreak após tfp0 e pós-exploração.
empty_list (sploit.c)
- Uma análise detalhada do exploit de kernel empty_list do Ian Beer.
- Ele usa técnicas incríveis para começar de primitivas realmente fracas, construir uma AAR mais forte e, finalmente, um task port completo. A mágica das portas por trás do código do exploit é inacreditável. Tudo isso com um overflow 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. :)
- Obrigado Ian Beer pelo incrível exploit!
CVE-2018-4233
- Esta é uma versão comentada do exploit do WebKit iOS do @niklas_b.
- 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 instabilidade), e um passo a passo detalhado de como as primitivas de AAR/AAW iniciais/tardias 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 corrigiu no sentido contrário; Object -> Double.
- Ele faz spray do 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 double arrays com dados de heap não inicializados. Ele itera pelos double arrays não inicializados produzidos pelo concat bugado até encontrar o endereço do objeto previamente usado no spray, e o vaza.
- Obrigado novamente kudima (@begger_dd) pelo ótimo exploit e writeup! :)
jsc_prop_enum_uaf
- Esta é outra contribuição do kudima. É uma versão comentada do exploit de execução remota de código no WebKit do kudima (corrigido neste commit). Ele foi corrigido no iOS 12.1 e funciona até o iOS 12.0.1.
- O problema é que, durante a execução de código em loops forin compilados pelo baseline JIT, você pode introduzir código que libera o objeto StructureID que dá suporte ao JSOBject e aciona o garbage collector, mas o garbage collector não marca o membro "JSPropertyNameEnumerator->m_cachedStructureID", e o objeto StructureID para o qual "JSPropertyNameEnumerator->m_cachedStructureID" aponta é liberado durante a fase de sweep, resultando em um dangling pointer.
- Depois que o objeto StructureID é liberado pelo GC, você pode introduzir código que cria um novo objeto StructureID, que ocupa o slot do "objeto StructureID" liberado anteriormente.
- Ao liberar o StructureID do objeto A e então fazer o objeto B criar um novo StructureID que ocupa seu lugar, é possível criar uma situação de type confusion porque "JSPropertyNameEnumerator->m_cachedInlineCapacity" é definido como o tamanho das propriedades inline do objeto A, enquanto "JSPropertyNameEnumerator->m_cachedStructureID" aponta para o novo objeto Structure ID que representa o objeto B. Isso faz uma verificação em 'op_get_direct_pname' passar e permite que o objeto B acesse propriedades inline fora de seus limites.
- Isso pode ser abusado para construir primitivas mais fortes, como AAR/AAW, e posteriormente usá-las para executar código arbitrário.
- Obrigado kudima (@begger_dd) pelo exploit legal e pelo writeup muito detalhado! :)
[ 1Day ]
CVE-2017-2547