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
CVE-2026-43655-AppleM2ScalerCSCDriver-UAF — Divulgação pública para CVE-2026-43655 AppleM2ScalerCSCDriver use-after-free | Kitploit
Ferramentas/GitHubGitHub/somisomair/cve-2026-43655-applem2scalercscdriver-uaf
Segurança iOSForensia de MemóriaAnálise de VulnerabilidadesExploraçãoSegurança MóvelSegurança de HardwareExploração de Binários
GitHubsomisomair/cve-2026-43655-applem2scalercscdriver-uaf

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 →

CVE-2026-43655-AppleM2ScalerCSCDriver-UAF

Divulgação pública para CVE-2026-43655 AppleM2ScalerCSCDriver use-after-free

Ver Repositório
5há 2 mesesAinda não revisado
Compartilhar

CVE-2026-43655: use-after-free no agendador compartilhado do AppleM2ScalerCSCDriver

Divulgação técnica pública para CVE-2026-43655, um use-after-free no AppleM2ScalerCSCDriver / IOSurfaceAccelerator acessível a partir da sandbox padrão de aplicativos iOS sem autorizações especiais.

A Apple corrigiu esse problema no iOS 26.5 / iPadOS 26.5 / macOS Tahoe 26.5. Este repositório contém o código-fonte da prova de conceito em Objective-C, autorizações mínimas, um IPA compilado e a descrição técnica necessária para entender e reproduzir o problema em um dispositivo afetado.

Resumo

O bug é um erro de destruição/tempo de vida no agendador do scaler. Um processo de usuário pode enviar operações assíncronas do scaler, fechar a conexão IOSurfaceAcceleratorClient que possui essas operações e deixar entradas obsoletas em uma estrutura de agendador global do driver. Uma passagem posterior do agendador pode então processar entradas que ainda apontam para armazenamento de operação que já foi liberado e reutilizado.

O PoC demonstra o bug de tempo de vida com dois valores de marcador distintos:

  • marcador da conexão vítima: 0xDEAD0001
  • marcador da conexão de spray/substituição:
0xBEEF0002

A conexão vítima envia operações assíncronas e é então fechada. Conexões de substituição são abertas posteriormente e definem seu próprio marcador como 0xBEEF0002. Quando o próximo ciclo de agendamento do scaler é executado, a falha observa o marcador de substituição (x9 = 0x00000000BEEF0002), não o marcador da vítima. Isso prova que o agendador leu de um slot de operação que havia sido liberado e depois realocado para uma conexão diferente.

Configuração afetada

  • SO afetado observado: iOS 26.4
  • Corrigido em: iOS 26.5 / iPadOS 26.5 / macOS Tahoe 26.5
  • Kext: com.apple.driver.AppleM2ScalerCSCDriver
  • Caminho do cliente de usuário: IOSurfaceAcceleratorClient
  • Autorizações de aplicativo usadas pelo PoC: apenas get-task-allow
  • Sem jailbreak, sem autorização de plataforma, sem autorização privada especial da Apple

Causa raiz

AppleM2ScalerCSCDriver mantém o estado do agendador compartilhado entre clientes do scaler. A incompatibilidade de tempo de vida relevante é:

  1. Um cliente envia operações assíncronas do scaler.
  2. Essas operações são inseridas no estado de propriedade do agendador.
  3. A conexão do cliente é fechada com IOServiceClose.
  4. O armazenamento de operação por cliente é liberado.
  5. O estado do agendador compartilhado não é totalmente limpo de entradas pertencentes ao cliente fechado.
  6. Uma passagem posterior do agendador processa ponteiros de operação obsoletos.

O caminho de destruição não remove as entradas pendentes do agendador do cliente que está fechando do heap do agendador compartilhado. O agendador posteriormente lê e escreve campos através desses ponteiros obsoletos.

Campos importantes observados durante a análise:

OffsetComportamento do agendador
operation + 0xc94lido como o valor de crédito/marcador usado pelo caminho de resolução de crédito
operation + 0xc1cescrito pelo caminho de contabilidade de crédito do agendador
operation + 0x1fe4escrito pelo caminho de atualização de estado/sinalização do agendador

O comportamento do alocador de operações torna o bug observável: slots de operação liberados podem ser reutilizados por operações posteriores de diferentes conexões. Ao fechar uma conexão vítima e imediatamente pulverizar novas conexões, o PoC pode fazer com que entradas obsoletas do agendador apontem para memória agora de propriedade das conexões de spray.

Por que x9 = 0xBEEF0002 prova UAF

O PoC usa uma distinção vítima/spray:

  1. A conexão vítima define o marcador 0xDEAD0001.
  2. A vítima envia 50 operações assíncronas do scaler.
  3. A conexão vítima é fechada, liberando os objetos de operação da vítima.
  4. As conexões de spray definem o marcador 0xBEEF0002.
  5. As operações de spray reutilizam os slots do pool de operações liberados.
  6. O agendador processa posteriormente as entradas obsoletas da vítima.

Se o agendador ainda estivesse lendo objetos vivos de propriedade da vítima, o valor observado seria 0xDEAD0001. Em vez disso, a falha reproduzida observa 0xBEEF0002, o valor escrito pelas conexões de spray de substituição. Essa é a prova chave de que o agendador está desreferenciando um ponteiro obsoleto para memória do kernel liberada e reutilizada.

Isso também mostra o impacto entre conexões: a entrada do agendador foi criada por uma conexão, mas a memória que ela posteriormente tocou foi reciclada para outra conexão. Em execuções reproduzidas, a atividade final do agendador pode ser impulsionada pela atividade normal do SpringBoard/compositor/UI, em vez do processo PoC original.

Impacto

  • Leitura do kernel a partir de memória de operação liberada/reutilizada.
  • Escritas do kernel em offsets fixos na memória de operação liberada/reutilizada durante atualizações de contabilidade/estado do agendador.
  • Efeito entre conexões porque o heap do agendador é compartilhado entre usuários do scaler.
  • Comportamento de disparo entre processos porque qualquer processo posterior que direcione o agendamento do scaler pode fazer com que a entrada obsoleta seja processada.
  • O estado obsoleto do agendador pode sobreviver à janela de execução imediata do aplicativo PoC original e disparar em um ciclo posterior do agendador.

O aviso público da Apple descreve o impacto como: “Um aplicativo pode ser capaz de causar término inesperado do sistema ou ler memória do kernel.”

Sequência de reprodução em dispositivo físico

Detalhe importante da reprodução: após tocar em TEARDOWN UAF, o dispositivo não necessariamente entra em pânico imediatamente. O PoC primeiro prepara o estado obsoleto do agendador. O bug é acionado no próximo ciclo de agendamento do scaler, que na prática ocorre quando a atividade do SpringBoard/compositor aciona o scaler. Na minha reprodução em dispositivo físico, acionei esse ciclo do agendador tocando/interagindo com a Dynamic Island após o PoC terminar de preparar o estado obsoleto do agendador.

Passos:

  1. Reinicie o dispositivo afetado antes de executar o PoC.
  2. Instale e inicie ScalerTeardownUAF.ipa.
  3. Toque em TEARDOWN UAF.
  4. O PoC abre uma conexão vítima AppleM2ScalerCSCDriver.
  5. O PoC cria objetos IOSurface de origem/destino.
  6. O PoC envia uma operação de scaler de linha de base síncrona.
  7. O PoC define os dados de crédito/marcador do seletor 10 como 0xDEAD0001 na conexão vítima.
  8. O PoC envia 50 operações assíncronas na conexão vítima.
  9. O PoC fecha a conexão vítima com IOServiceClose, liberando objetos de operação de propriedade da vítima enquanto entradas obsoletas do agendador permanecem.
  10. O PoC abre 50 conexões de spray.
  11. Cada conexão de spray define os dados de crédito/marcador do seletor 10 como 0xBEEF0002.
  12. O PoC envia operações assíncronas adicionais nas conexões de spray para reutilizar slots de operação liberados e manter a pressão do agendador ativa.
  13. Quando o aplicativo solicitar o gatilho, toque/interaja com a Dynamic Island para causar atividade do SpringBoard/compositor e acionar o agendador do scaler.
  14. O dispositivo entra em pânico/reinicia quando a entrada obsoleta do agendador é processada.
  15. Após a reinicialização, verifique se o estado do registro de pânico contém x9 = 0x00000000BEEF0002.

Condição de prova esperada:

  • x9 = 0x00000000BEEF0002 significa que o agendador leu o marcador de spray da memória que originalmente pertencia à operação vítima liberada.
  • 0xBEEF0002 não é o marcador da vítima; é o marcador da conexão de substituição.
  • Portanto, a leitura observada do agendador ocorreu após a liberação e reutilização.

Comportamento do PoC

O código-fonte incluído executa a seguinte sequência:

root@kitploit:~
open victim connection
create IOSurface source/destination pair
submit sync baseline scaler request
set victim marker = 0xDEAD0001 through selector 10
submit 50 async scaler operations
close victim connection
open 50 spray connections
set spray marker = 0xBEEF0002 through selector 10
submit repeated async scaler operations on spray connections
wait for SpringBoard/compositor scheduler trigger

O arquivo de código-fonte relevante é ScalerTeardownUAF.m.

Compilação

root@kitploit:~
xcrun -sdk iphoneos clang -framework Foundation -framework UIKit -framework IOKit \
  -framework IOSurface -isysroot $(xcrun --sdk iphoneos --show-sdk-path) \
  -arch arm64 -arch arm64e -miphoneos-version-min=16.0 -fobjc-arc \
  -o iPhoneProbe.app/iPhoneProbe ScalerTeardownUAF.m
ldid -S entitlements.plist iPhoneProbe.app/iPhoneProbe
mkdir -p /tmp/pkg/Payload
cp -r iPhoneProbe.app /tmp/pkg/Payload/
cd /tmp/pkg && zip -qr ScalerTeardownUAF.ipa Payload

Arquivos do repositório

ArquivoDescrição
ScalerTeardownUAF.mCódigo-fonte do PoC em Objective-C implementando a sequência de fechamento da vítima + reutilização por spray.
ScalerTeardownUAF.ipaArtefato de reprodução IPA compilado.
entitlements.plistArquivo de autorização mínimo contendo get-task-allow.

Linha do tempo

  • Crash inicial encontrado ao testar o comportamento do AppleM2ScalerCSCDriver.
  • UAF comprovado com distinção de marcadores vítima/spray: vítima 0xDEAD0001, spray 0xBEEF0002.
  • Reprodução em dispositivo físico confirmada ao acionar o próximo ciclo de agendamento do scaler através da atividade do Dynamic Island / compositor do SpringBoard.
  • A Apple corrigiu o problema na linha de lançamento 26.5 e atribuiu CVE-2026-43655.
Baixar ferramenta