News · OpenAI substitui o certificado de assinatura do macOS depois de uma versão comprometida do Axios ter corrido no seu pipeline de assinatura de aplicações
OpenAI substitui o certificado de assinatura do macOS depois de uma versão comprometida do Axios ter corrido no seu pipeline de assinatura de aplicações
Uma dependência JavaScript comprometida chegou ao workflow que certifica o ChatGPT Desktop, o Codex e o Atlas — e a correção passa por uma atualização forçada do cliente até 8 de maio de 2026.
Uma biblioteca HTTP de frontend acabou dentro do job de assinatura de código
O Axios é um dos clientes HTTP mais utilizados no ecossistema JavaScript — o tipo de dependência que se aloja discretamente na árvore transitiva de inúmeros projetos de frontend e de ferramentas Node. A 31 de março de 2026 (UTC), foi publicada uma versão maliciosa, a 1.14.1, no âmbito de um ataque mais amplo à cadeia de fornecimento.
O que torna a divulgação da OpenAI específica é o local onde essa biblioteca estava a correr. A versão comprometida do Axios foi obtida e executada por um workflow do GitHub Actions usado no processo de assinatura de aplicações macOS da OpenAI — o mesmo job que tinha acesso ao certificado e ao material de notarização do ChatGPT Desktop, Codex, Codex CLI e Atlas. Um pacote JavaScript destinado a fazer pedidos web acabou junto das chaves que garantem ao macOS que estas aplicações são genuinamente da OpenAI.
A lição incómoda é que um pipeline de assinatura só é tão fiável quanto cada pacote que instala no momento da compilação. O certificado é a joia da coroa; o workflow em torno dele herdou a superfície de risco de todo o grafo de dependências do npm.
Duas configurações incorretas concretas identificadas pela OpenAI
A OpenAI é incomummente precisa quanto à causa raiz. O workflow referenciava a action problemática através de uma tag não fixada, em vez de um hash de commit fixo, e não tinha configurado um minimumReleaseAge para novos pacotes.
A action em causa usava uma tag não fixada, em vez de um hash de commit específico, e não tinha um minimumReleaseAge configurado para novos pacotes.Montana Labs
Ambas as falhas são reconhecíveis por quem mantém CI. Uma tag não fixada significa que o workflow aceita silenciosamente aquilo para onde o maintainer — ou um atacante que tenha comprometido o maintainer — redirecionar essa tag. Um minimumReleaseAge teria imposto uma janela de quarentena, recusando pacotes publicados demasiado recentemente para terem sido verificados; se estivesse definido, a versão maliciosa de 31 de março poderia nunca ter sido consumida. Não são defesas exóticas. São o conselho de reforço padrão para fixar e atrasar atualizações de dependências, aplicado aqui a um pipeline cujo raio de impacto acabou por ser um certificado de assinatura.
A correção transfere o custo para o cliente, não para o servidor
A OpenAI concluiu que o certificado provavelmente não foi exfiltrado, citando o momento da carga maliciosa, a sequência de injeção do certificado e outros fatores atenuantes. Não encontrou evidências de notarização indevida, nenhuma modificação não autorizada ao software publicado, nem qualquer compromisso de dados de utilizadores ou chaves de API. Ainda assim, está a tratar o certificado como comprometido e a substituí-lo.
Essa decisão transfere a correção para todos os utilizadores de macOS. As novas compilações assinadas com o certificado atualizado são lançadas como as versões suportadas mais antigas — ChatGPT Desktop 1.2026.051, Codex App 26.406.40811, Codex CLI 0.119.0 e Atlas 1.2026.84.2 — e, após 8 de maio de 2026, as versões mais antigas poderão deixar de funcionar por completo assim que o certificado antigo for totalmente revogado.
A abordagem em fases é deliberada. A OpenAI já bloqueou novas notarizações com o certificado antigo, pelo que uma aplicação falsificada assinada com esse certificado falharia o Gatekeeper por predefinição, a menos que um utilizador contorne manualmente as proteções. A janela de 30 dias antes da revogação total existe para dar tempo aos atualizadores internos das aplicações, e a OpenAI afirma que acelerará a revogação se detetar atividade maliciosa durante esse período.
O que um compromisso no pipeline de assinatura significa para equipas que lançam clientes desktop
A superfície visível destes produtos é uma janela de chat e um editor de código, mas a âncora de confiança é um certificado produzido por um job de build. Este incidente elimina a distinção entre dependências de frontend e segurança em produção: um pacote instalado para suportar ferramentas ficou no mesmo contexto de execução que o material de assinatura, e uma única versão comprometida obrigou a uma substituição de certificado sentida por todos os utilizadores de Mac de quatro aplicações distintas.
Para quem opera pipelines semelhantes, as conclusões práticas são as que a própria OpenAI aponta contra si mesma — fixar as actions a hashes de commit, impor uma quarentena de idade mínima de lançamento a novos pacotes e tratar o workflow que toca em chaves de assinatura como o ambiente de maior privilégio que se opera, isolado das instalações normais de dependências. A substituição do certificado e a atualização forçada do cliente foram a recuperação dispendiosa; a prevenção barata eram duas linhas de configuração de CI.
Find this story relevant to you?
Contact us to find a unique solution
Precisa de um parceiro de engenharia de IA que saiba executar?
Ajudamos equipas em Portugal a integrar IA em produtos, automatizar processos de alto valor e modernizar os sistemas que suportam o negocio.
Leitura relacionada
Mais análises sobre entrega de produto, AI operacional e o trabalho de sistemas que faz com que a implementação funcione na prática.