Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
kfd — kfd, abreviação de kernel file descriptor, é um projeto para ler e escrever memória do kernel em dispositivos Apple. | Kitploit
Ferramentas/GitHubGitHub/felix-pb/kfd
Segurança iOSExploraçãoSegurança MóvelExploração de Binários
GitHubfelix-pb/kfd

kfd

kfd, abreviação de kernel file descriptor, é um projeto para ler e escrever memória do kernel em dispositivos Apple.

Ver Repositório
1k1848há 2 anosRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

Aviso rápido: não tenho a intenção de adicionar offsets para outros dispositivos e versões do iOS.

kfd

kfd, abreviação de kernel file descriptor, é um projeto para ler e escrever memória do kernel em dispositivos Apple. Ele aproveita diversas vulnerabilidades que podem ser exploradas para obter PTEs pendentes, que serão referidas como uma primitiva PUAF, abreviação de "physical use-after-free". Em seguida, ele realoca certos objetos do kernel dentro dessas páginas físicas e os manipula diretamente a partir do espaço de usuário por meio das PTEs pendentes, a fim de alcançar uma primitiva KRKW, abreviação de "kernel read/write". O código do exploit está totalmente contido em uma biblioteca, libkfd, mas o projeto também contém wrappers executáveis simples para iOS e macOS. A API pública do libkfd é bastante pequena e intuitiva:

root@kitploit:~
enum puaf_method {
    puaf_physpuppet,
    puaf_smith,
    puaf_landa,
};

enum kread_method {
    kread_kqueue_workloop_ctl,
    kread_sem_open,
};

enum kwrite_method {
    kwrite_dup,
    kwrite_sem_open,
};

u64 kopen(u64 puaf_pages, u64 puaf_method, u64 kread_method, u64 kwrite_method);
void kread(u64 kfd, u64 kaddr, void* uaddr, u64 size);
void kwrite(u64 kfd, void* uaddr, u64 kaddr, u64 size);
void kclose(u64 kfd);

kopen() conceitualmente abre um "descritor de arquivo do kernel". Ela recebe os seguintes 4 argumentos:

  • puaf_pages: O número alvo de páginas físicas com PTEs pendentes.
  • puaf_method: O método usado para obter a primitiva PUAF, com as seguintes opções:
    • puaf_physpuppet:
      • Este método explora CVE-2023-23536.
      • Corrigido no iOS 16.4 e macOS 13.3.
      • Acessível a partir do App Sandbox, mas não do sandbox WebContent.
      • Recompensa de $52,500 do Apple Security Bounty.
    • puaf_smith:
      • Este método explora CVE-2023-32434.
      • Corrigido no iOS 16.5.1 e macOS 13.4.1.
      • Acessível a partir do sandbox WebContent e pode ter sido ativamente explorado.
    • puaf_landa:
      • Este método explora CVE-2023-41974.
      • Corrigido no iOS 17.0 e macOS 14.0.
      • Acessível a partir do App Sandbox, mas não do sandbox WebContent.
      • Recompensa de $70,000 do Apple Security Bounty.
  • kread_method: O método usado para obter a primitiva kread() inicial.
  • kwrite_method: O método usado para obter a primitiva kwrite() inicial.

Se o exploit for bem-sucedido, kopen() retorna um descritor de arquivo opaco de 64 bits. Na prática, isso é apenas um ponteiro de espaço de usuário para uma estrutura necessária ao libkfd. No entanto, como essa estrutura não deve ser acessada fora da biblioteca, ela é retornada como um inteiro opaco. Se o exploit não for bem-sucedido, a biblioteca imprimirá uma mensagem de erro, dormirá por 30 segundos e sairá com um código de status 1. Ela dorme por 30 segundos porque o kernel pode entrar em pânico na saída para certos métodos PUAF que exigem uma limpeza pós-KRKW (por exemplo, puaf_smith).

kread() e kwrite() são os equivalentes no espaço de usuário de copyout() e copyin(), respectivamente. Observe que as opções para kread_method e kwrite_method são descritas em um artigo técnico separado. Além disso, as primitivas iniciais concedidas por esses métodos podem ser usadas para construir uma primitiva KRKW melhor. Por fim, kclose() simplesmente fecha o descritor de arquivo do kernel. Todas elas recebem como primeiro argumento o inteiro opaco retornado por kopen().


Como compilar e executar o kfd em um iPhone?

No Xcode, abra a pasta raiz do projeto e conecte seu dispositivo iOS.

  • Para compilar o projeto, selecione Product > Build (⌘B).
  • Para executar o projeto, selecione Product > Run (⌘R) e depois clique no botão "kopen" no app.

Como compilar e executar o kfd em um Mac?

Em um terminal, navegue até a pasta raiz do projeto.

Opcionalmente, para aumentar os limites global e por processo de descritores de arquivo, o que melhorará a taxa de sucesso especialmente em execuções consecutivas, execute o comando make s e digite a senha do sudo.

  • Para compilar o projeto, execute o comando make b.
  • Para executar o projeto, execute o comando make r.
  • Para compilar e executar o projeto de uma só vez, execute o comando make br.

Onde encontrar write-ups detalhados dos exploits?

Este README apresentou uma visão geral de alto nível do projeto kfd. Depois que uma primitiva PUAF é alcançada, o restante do exploit é genérico. Portanto, extraí a parte comum dos exploits para um artigo técnico dedicado:

  • Explorando PUAFs

Além disso, dividi a parte específica da vulnerabilidade dos exploits usados para alcançar a primitiva PUAF em artigos técnicos distintos, listados abaixo em ordem cronológica de descoberta:

  • PhysPuppet
  • Smith
  • Landa

No entanto, observe que esses write-ups foram escritos para um público que já está familiarizado com o sistema de memória virtual do XNU.

Baixar ferramenta