1 pontos por GN⁺ 2025-03-21 | 1 comentários | Compartilhar no WhatsApp

Vazamento de senhas (e muito mais!) no macOS

Introdução

Este texto explica a vulnerabilidade CVE-2024-54471 incluída nas atualizações de segurança da Apple. Essa vulnerabilidade foi corrigida no macOS Sequoia 15.1, macOS Sonoma 14.7.1 e macOS Ventura 13.7.1. Se você usa um dispositivo com macOS, é recomendável atualizá-lo para a versão mais recente.

O que é o kernel?

No sistema operacional, o código que se comunica com o hardware e fornece um modelo de multitarefa para os aplicativos é chamado de kernel. O kernel do macOS é o XNU, um kernel híbrido que inclui variantes do kernel BSD e do kernel Mach.

A história do Mach

O kernel Mach está profundamente entrelaçado com as guerras Unix das décadas de 1980 e 1990. O Mach começou como um projeto de pesquisa em sistemas operacionais na Carnegie Mellon University, foi usado no sistema operacional NeXTSTEP e acabou se tornando a base do macOS.

Por que Mach?

O Mach foi desenvolvido para reduzir a complexidade do design e do uso de sistemas Unix. Ele é composto por quatro abstrações básicas, que ainda hoje são usadas no macOS moderno.

Arquitetura do Mach

Quatro abstrações

  • Task: o ambiente em que as threads podem ser executadas e a unidade básica de alocação de recursos.
  • Thread: a unidade básica de uso da CPU, operando com um contador de programa independente dentro de uma task.
  • Port: um canal de comunicação para mensagens, protegido pelo kernel.
  • Message: um conjunto de objetos de dados usado na comunicação entre threads.

Tasks, ports e direitos de port

Os ports existem apenas no espaço do kernel e são expostos ao espaço do usuário como direitos de port. Várias tasks podem ter direitos de envio para um port, mas apenas uma task pode ter o direito de recebimento.

Estrutura das mensagens

Cada mensagem Mach é composta por um cabeçalho, descritores opcionais, um payload arbitrário e um trailer adicionado pelo kernel.

Como obter direitos de envio

No macOS, existe um bootstrap server, que mantém o direito de recebimento de ports para os quais todas as tasks têm direito de envio. Os clientes podem solicitar ao bootstrap server o direito de envio para um serviço Mach com um nome específico.

Mach Interface Generator (MIG)

Introdução

O MIG é uma ferramenta que gera interfaces funcionais para envio e recebimento de mensagens Mach. Ele fornece uma interface no estilo RPC baseada em mensagens, aumentando a segurança de memória.

Detalhes técnicos

O MIG funciona como um wrapper para mensagens Mach. Cada função é chamada de routine, e um conjunto de routines é chamado de subsystem. Os subsystems são indexados no campo de ID da mensagem.

Vulnerabilidades em servidores MIG

Segurança de servidores MIG

Se um servidor MIG não validar o remetente da mensagem, qualquer task com direito de envio pode chamar as routines do servidor.

Encontrando servidores MIG

É possível usar a ferramenta CLI ipsw para procurar binários que usam o símbolo NDR_record. Isso é útil para encontrar servidores e clientes MIG.

Vulnerabilidade no NetAuthAgent

Introdução ao NetAuthAgent

O NetAuthAgent é um daemon que lida com credenciais de servidores de arquivos no macOS. Antes dessa vulnerabilidade ser corrigida, ele fornecia credenciais quando as de um servidor eram solicitadas.

Como o NetAuthAgent funciona

O NetAuthAgent usa o Keychain do macOS para armazenar credenciais. O Keychain é um gerenciador centralizado de segredos, e cada item tem sua própria lista de controle de acesso.

Servidor MIG do NetAuthAgent

O NetAuthAgent expõe um servidor MIG registrado no bootstrap server com o nome com.apple.netauth.user.gui. Esse servidor oferece routines que permitem ler, criar e sobrescrever credenciais.

Impacto da vulnerabilidade

Exposição de tokens de API do iCloud

Essa vulnerabilidade expõe tokens de API do iCloud, permitindo que invasores vazem informações do usuário ou rastreiem a localização de outros dispositivos.

O que a Apple deveria ter feito

Este texto inclui uma discussão sobre quais medidas a Apple deveria ter tomado para corrigir essa vulnerabilidade.

1 comentários

 
GN⁺ 2025-03-21
Comentários do Hacker News
  • Texto bem escrito. Isso me lembrou o incidente de zero-day que a Apple aparentemente tentou meio que esconder. Era aquele em que era possível contornar o login de root ao “tentar senha vazia duas vezes”. Foi por volta de 2017 ou 2018

    • Ao inserir o nome de usuário de administrador e tentar fazer login com a senha vazia, primeiro aparecia um aviso de senha incorreta. Se você ignorasse o aviso e clicasse no botão de login pela segunda vez, entrava como aquele usuário
    • Esse problema foi corrigido logo depois de se espalhar nas redes sociais. Ainda assim, parece um erro enorme
    • Parece que ainda há problemas no mecanismo de autenticação do Mac. É interessante ver o sistema de portas mencionado. É um fato pouco conhecido sobre o kernel Mach
  • "ACLs don’t": <a href="https://waterken.sourceforge.net/aclsdont/current.pdf" rel="nofollow">https://waterken.sourceforge.net/aclsdont/current.pdf</a>;

  • Expor um mecanismo pelo qual um processo pode encaminhar consultas ao Keychain para outro processo pode enfraquecer a segurança de todo o sistema

    • Isso parece um caso do problema do representante confuso: <a href="https://en.wikipedia.org/wiki/Confused_deputy_problem" rel="nofollow">https://en.wikipedia.org/wiki/Confused_deputy_problem</a>;
    • Um design baseado em capacidades deveria conseguir evitar esse tipo de problema de forma sistemática
  • Houve uma pequena correção no artigo

    • A verificação de permissões não está na camada Mach do kernel
    • <a href="https://github.com/nmggithub/wts/commit/2bdce1c0c76c7adc360e17a6a42ee547462b99d3" rel="nofollow">https://github.com/nmggithub/wts/…;
    • Foi a alteração de uma única palavra para corrigir um erro factual sobre como o XNU funciona
  • Levou 8 horas, mas este post agora não está mais no top 5 da primeira página (agora é #27, ainda está na primeira página, mas embaixo). Obrigado por todos os comentários

  • Estou curioso se o autor fornece um código PoC de verdade. Quero testar as mitigações. Vi um código de exemplo, mas ele parece incompleto

    • Fico me perguntando qual seria o risco na prática
  • Artigo muito interessante. Eu não sabia que havia tanta história por trás da criação do kernel Mach e do Darwin

  • No momento, o Mach parece uma fonte confiável de bugs no macOS. Sei que a Apple está se esforçando para travar tudo isso, mas fico me perguntando se existe um caminho para se afastar completamente do Mach

  • [morto]