Pular para o conteúdo
Development

Parar diante de um aviso de "tap não confiável" do Homebrew para realmente auditar antes de confiar

Por Victor Da Luz•
securitymacostoolingdev-logdeep-cut-atlas

Eu estava no meio da configuração de um novo servidor MCP para controlar remotamente um iPhone reserva (mirroir-mcp, que aciona o recurso iPhone Mirroring da Apple para que um agente possa tirar screenshots e tocar em um dispositivo real sem que eu esteja na sala), e esbarrei numa parede que eu não esperava: o Homebrew se recusou a instalá-lo.

“Refusing to load formula jfarcand/tap/mirroir-mcp from untrusted tap.”

Meu primeiro instinto foi só rodar o comando de confiança sugerido e seguir em frente. Eu já tinha olhado essa ferramenta uma vez, numa sessão anterior, licença Apache-2.0, repositório ativo, número razoável de estrelas, e decidido que estava tudo bem. Mas “bom o suficiente para entrar no plano” e “bom o suficiente para rodar os scripts de instalação com as permissões do meu usuário” são dois patamares diferentes, e eu não tinha realmente superado o segundo.

Então parei e fiz uma auditoria de verdade antes de cruzar essa linha.

Por que a pausa importou

Acontece que a própria barreira era nova e reativa, não decorativa. O Homebrew lançou o “tap trust” na versão 6.0.0 cerca de um mês antes de eu esbarrar nele, em resposta direta a um incidente real naquele março: alguém usou credenciais comprometidas para publicar uma versão maliciosa de uma ferramenta não relacionada através de um tap personalizado comprometido. A resposta do Homebrew foi parar de confiar em taps de terceiros por padrão, ponto final, até você dizer explicitamente o contrário.

Esse contexto mudou como eu li o aviso. Não era “essa ferramenta específica parece suspeita.” Era “todo tap de terceiros recebe esse tratamento agora, porque um deles já foi comprometido uma vez.” O que significava que a atitude certa não era descartar o aviso, era realmente fazer a verificação para a qual o Homebrew estava me empurrando.

Como foi a auditoria

Algumas coisas concretas, não uma checagem de vibe. O que a ferramenta realmente faz, mecanicamente? Ela usa CGEvent (a API padrão de simulação de entrada da Apple, sem precisar de root) e o framework Vision para OCR. Nenhuma chamada de rede no caminho principal. Tem um modo opcional de visão por IA que passa por ferramentas de linha de comando já autenticadas em vez de fazer suas próprias chamadas de API ou embutir uma chave, e degrada para um stub sem efeito se esse componente não estiver instalado. Quais permissões ela pede? Screen Recording e Accessibility, ambas permissões padrão do macOS, ambas exigindo um clique explícito de aprovação único, ambas revogáveis a qualquer momento em System Settings. Nada mais amplo. Quem está por trás dela? A conta do GitHub do mantenedor existe desde 2009, nome real, perfil vinculado, um longo histórico em open source Java. Não é uma conta recém-criada, não é anônima. É um projeto solo? Sim, essencialmente, 558 commits do mantenedor contra um punhado de bots de CI. Esse é um risco real de bus factor que vale a pena nomear, mesmo que nada mais no projeto parecesse preocupante. Algum problema de segurança conhecido? Zero avisos publicados, nenhum CVE. Binário ou fonte? A fórmula do Homebrew compila a partir do código-fonte em Swift no momento da instalação, em vez de baixar um blob pré-compilado. Isso é auditável, ao menos em princípio, ao contrário de opaco.

Nada disso levou muito tempo. Talvez vinte minutos lendo o README, o arquivo da fórmula em si, e puxando estatísticas de contribuidores via gh api em vez de confiar no que um resumo de página dizia.

Onde cheguei

Autorizar, mas de forma mais restrita do que o padrão sugeria. A própria mensagem de erro do Homebrew empurra você para brew trust jfarcand/tap, que confia em tudo que o dono daquele tap possa publicar ali, para sempre, sem outra revisão. Existe uma versão mais restrita do mesmo comando, brew trust --formula jfarcand/tap/mirroir-mcp, que confia apenas na única fórmula que eu realmente examinei. Também deixei de instalar o componente opcional de visão por IA já que meu caso de uso não precisa dele, um binário nativo a menos vinculado à coisa à qual eu estava prestes a dar permissões de Accessibility.

A lição de verdade

A tentação aqui era tratar o aviso de confiança como um atrito a contornar. Teria levado dez segundos só rodar o comando sugerido e voltar para a tarefa de verdade. Mas “voltar para a tarefa” não é realmente o objetivo quando a tarefa envolve conceder a um binário novo acesso de Accessibility e Screen Recording numa máquina que também guarda o resto da minha infraestrutura. O atrito era o ponto. Eu só precisava realmente usá-lo em vez de descartá-lo.

Leitura relacionada

Você também pode achar útil

Proton

Proton Drive

Armazenamento em nuvem criptografado, da equipe por trás do Proton Mail.

Como parceiro da Proton, ganho com compras qualificadas dos serviços de privacidade e segurança da Proton (Pass, Mail, VPN, Drive).

Saiba mais
Proton

Proton Mail

E-mail criptografado de ponta a ponta, com arquitetura de acesso zero.

Como parceiro da Proton, ganho com compras qualificadas dos serviços de privacidade e segurança da Proton (Pass, Mail, VPN, Drive).

Saiba mais
Proton

Proton Pass

Gerenciador de senhas focado em privacidade, da equipe por trás do Proton Mail.

Como parceiro da Proton, ganho com compras qualificadas dos serviços de privacidade e segurança da Proton (Pass, Mail, VPN, Drive).

Saiba mais