2 pontos por GN⁺ 2025-04-28 | 1 comentários | Compartilhar no WhatsApp
  • Apresentação de um caso em que foi possível transformar um iPhone em um tijolo explorando as características e fragilidades do sistema Darwin Notification
  • Essa vulnerabilidade foi registrada como CVE-2025-24091, e o pesquisador recebeu uma recompensa de bug bounty de US$ 17.500 (R$ 25 mil)
  • Explorando o fato de que era possível enviar notificações em nível de sistema sem privilégios especiais, foi possível paralisar todo o dispositivo iOS
  • Confirmou-se a possibilidade de um ataque de negação de serviço (DoS) que, com um simples código de uma linha, forçava o modo "Restore in Progress" e induzia reinicializações repetidas
  • A vulnerabilidade foi corrigida com a atualização do iOS 18.3, que passou a exigir permissões restritas (entitlement) para o envio de notificações Darwin importantes

Darwin Notifications

  • Darwin Notifications é um mecanismo de nível CoreOS para troca de mensagens simples entre processos no iOS e no macOS
  • A estrutura permite anunciar eventos com notify_post, receber eventos com notify_register_dispatch e ler ou gravar valores de estado (state)
  • O envio e o recebimento eram possíveis sem privilégios especiais, e não havia processo de verificação de segurança
  • Vários componentes do sistema dependiam dessa API legada

Visão geral da vulnerabilidade

  • Todos os processos dos sistemas operacionais da Apple podiam receber Darwin Notifications, sem necessidade de privilégios especiais
  • Havia uma falha estrutural que permitia até mesmo a apps em sandbox enviar Darwin Notifications
  • Como o volume de dados transmitidos é limitado, o risco de vazamento de dados sensíveis não era alto
  • No entanto, ao enviar certas notificações críticas do sistema, como o aviso de início de restauração, era possível afetar todo o sistema
  • Isso levou à descoberta de um possível ataque de negação de serviço (DoS)

EvilNotify e VeryEvilNotify

  • Com o app EvilNotify, era possível forçar várias reações do sistema
    • Exibição do ícone de detecção de líquido
    • Bloqueio do Wi‑Fi e uso forçado da rede celular
    • Bloqueio de gestos na tela de bloqueio e na Central de Controle
    • Entrada no modo perdido do Buscar e outros efeitos
  • Em especial, bastava uma linha, notify_post("com.apple.MobileSync.BackupAgent.RestoreStarted"), para colocar o dispositivo no estado "Restore in Progress"
  • Como o dispositivo não estava realmente sendo restaurado, esse modo falhava, e a única solução era tocar no botão "Reiniciar"
  • O app VeryEvilNotify foi implementado com uma extensão de widget para permitir que o ataque reiniciasse automaticamente mesmo após reboot
  • A extensão de widget era executada periodicamente em segundo plano pelo sistema e chamava a função notify_post, disparando repetidamente o modo "Restore in Progress"
  • Como resultado, era possível transformar completamente o dispositivo em um tijolo

Linha do tempo e registro do CVE

  • 26 de junho de 2024: envio do relatório inicial do incidente à Apple
  • 27 de setembro de 2024: recebimento de mensagem da Apple informando que medidas de mitigação estavam em andamento
  • 28 de janeiro de 2025: correção concluída e confirmação da elegibilidade para bug bounty
  • 11 de março de 2025: registro oficial como CVE-2025-24091 e correção no iOS/iPadOS 18.3
  • O valor pago de bug bounty foi de US$ 17.500

Resposta e mitigação

  • O envio de Darwin Notifications sensíveis passou a exigir permissões restritas (entitlement)
  • Por exemplo, a notificação com.apple.MobileBackup.BackupAgent.RestoreStarted foi alterada para com.apple.private.restrict-post.MobileBackup.BackupAgent.RestoreStarted
  • Os processos que recebem essas notificações também passaram a usar o novo nome, bloqueando envios não autorizados por apps sem permissão
  • Esse esquema de permissões restritas começou a ser aplicado a partir do iOS 18.2 beta 2 e foi concluído no iOS 18.3

1 comentários

 
GN⁺ 2025-04-28
Comentários do Hacker News
  • É interessante que esta API não exija permissão para nenhum uso relacionado à configuração e à publicação de notificações

    • Há uma forma de compartilhar informações de 64 bits entre processos no dispositivo
    • É um recurso ideal para rastreamento de usuários entre apps
    • Se o sistema armazena o valor e não rastreia de qual app ele veio, é possível ter armazenamento persistente mesmo após excluir e reinstalar o app
    • Pode ser usado para contornar a redefinição do IDFA ou do IDFV
  • A vulnerabilidade descrita não transforma o dispositivo em um "tijolo"

    • Para recuperação, é necessário fazer uma restauração tethered
  • US$ 17.500 é bem razoável

    • Em posts de blog, normalmente os valores são baixos, ou a empresa corrige a vulnerabilidade e não paga recompensa
    • A Apple melhorou nesse aspecto desde 2019
  • Excelente trabalho

    • É uma vulnerabilidade simples, eficaz e poderosa
    • Lembra uma vulnerabilidade perfeita de servidor que eu e um amigo da faculdade teorizamos há 20 anos
    • Foi encontrada há 2 anos como CVE-2022-23093
  • Consigo imaginar como deve ter sido difícil o dia no escritório quando a equipe principal do iOS revisou isso

  • Uma única linha de código podia colocar o dispositivo no modo "recuperação em andamento"

    • Qualquer processo podia enviar uma notificação e enganar o sistema para entrar nesse modo
  • Sinto falta dos velhos tempos do IRC

    • Isso serve de lembrete de como pequenas mudanças podem ser perigosas na tecnologia
    • Fico me perguntando se a segurança está realmente avançando ou apenas continuamos tapando vazamentos
  • Isso sugere que apps de terceiros com seu próprio sistema de notificações também podem ser imitados de forma semelhante

    • Talvez não dê para transformar o dispositivo em um tijolo, mas ainda assim pode causar outros comportamentos
  • Como o usuário precisa instalar ativamente um app malicioso, a prioridade pode ser baixa

    • Mesmo assim, esse cronograma não inspira confiança
  • Este artigo foi uma leitura fantástica

    • Mostrou o quanto uma API muito antiga podia ser poderosa
    • Foi uma demonstração incrível de como acionar todos os estados de baixo nível do iOS
    • Fico curioso sobre o que aconteceu com notify_post hoje em dia