Resumo Rápido

  • O kernel Linux continha uma falha lógica que permitia a usuários não privilegiados "roubarem" descritores de arquivo de arquivos protegidos pelo root, como chaves privadas SSH e o arquivo /etc/shadow.
  • Ao explorar uma breve janela de tempo durante a saída de um processo, após sua memória ser limpa mas antes de seus arquivos serem fechados, um atacante pode usar a chamada de sistema pidfd_getfd para contornar verificações de segurança que normalmente protegem processos SUID sensíveis.
  • Embora essa falha de projeto específica de "roubo de FD" tenha sido explicitamente apontada por um pesquisador de segurança em outubro de 2020, ela permaneceu sem correção no kernel Linux estável por aproximadamente seis anos. Além disso, o padrão de codificação específico no utilitário ssh-keysign que permite seu uso como alvo para esse exploit permanece inalterado desde 2002.

Exploit FD-Theft: O Bug de 6 Anos no Kernel Linux

Uma nova correção de segurança acaba de ser lançada para o kernel Linux. Não se trata de um exploit típico de "root instantâneo" que chama atenção. Em vez disso, é uma engenhosa vulnerabilidade de "Roubo de Descritor de Arquivo (FD)" que faz parte do design do kernel há 6 anos.

Linus Torvalds recentemente enviou uma correção para um erro lógico em como o kernel lida com processos em saída. Embora a correção seja agora oficial, a história de como esse bug funciona, e por quanto tempo ficou escondido, é uma visão fascinante dos internals do kernel.

O que Exatamente é a Vulnerabilidade de Roubo de Descritor de Arquivo (FD)?

A maioria das notícias de segurança Linux foca em "Escalação de Privilégio", onde um usuário se torna root. Esse bug é diferente. É um exploit de acesso a arquivos.

FD-Theft (Roubo de Descritor de Arquivo) refere-se ao processo de um atacante "roubar" ou duplicar descritores de arquivo ativos de um processo privilegiado enquanto ele está no meio de sua saída. Essa técnica permite que um usuário não privilegiado ganhe acesso a arquivos sensíveis que foram abertos enquanto o processo alvo ainda possuía autoridade de root.

Um atacante pode usar essa falha para "roubar" links ativos para arquivos sensíveis, como chaves privadas SSH ou o arquivo de senhas /etc/shadow, enquanto um programa privilegiado tenta fechá-los.

Se um atacante capturar seu arquivo shadow, ele pode pegar os hashes de senha e quebrá-los offline para eventualmente obter acesso root completo.

A Janela de Segurança no Kernel

Para entender esse bug de roubo de FD, é preciso observar como um programa sai. Quando um programa termina, o kernel Linux limpa seus recursos em uma ordem específica. Essa vulnerabilidade explora uma pequena lacuna de tempo nessa sequência:

  1. A memória é limpa primeiro (exit_mm): O kernel limpa a memória do programa.
  2. A verificação falha: Normalmente, o kernel protege programas de propriedade do root de serem bisbilhotados por usuários comuns. Isso é chamado de verificação "dumpable". Mas por anos, o kernel teve uma política de "falha aberta": se a memória já tivesse sumido, o kernel assumia que o programa era seguro para acessar.
  3. Arquivos permanecem abertos por uma fração de segundo (exit_files): Mesmo que a memória tenha sumido, os arquivos do programa ainda não foram fechados.

Durante essa pequena janela, um atacante pode usar uma ferramenta chamada pidfd_getfd para duplicar esses arquivos abertos. Como o programa originalmente abriu esses arquivos com poder de root, o atacante obtém uma cópia funcional deles.

Alvos do Mundo Real: ssh-keysign e chage

Esse ataque visa um "formato" muito específico de programa. Ele precisa de uma ferramenta de propriedade do root que abre um arquivo sensível, abaixa seus privilégios para um usuário comum e então sai.

  • ssh-keysign: Essa ferramenta abre chaves privadas SSH do host. Por causa desse bug, um atacante pode capturar a chave e então se passar pelo seu servidor para outros usuários.
  • chage: Essa ferramenta gerencia senhas de usuários e abre /etc/shadow. Um atacante pode "correr" contra o programa enquanto ele fecha para roubar seus hashes de senha.

Surpreendentemente, o código em ssh-keysign que torna isso possível permanece exatamente o mesmo desde 2002. O pesquisador de segurança Jann Horn até alertou sobre essa falha de projeto (https://lore.kernel.org/all/[email protected]/) em outubro de 2020, chamando a lógica do kernel de "dúbia do ponto de vista de segurança".

Se você quiser testar esse exploit, confira o repositório ssh-keysign-pwn (https://github.com/0xdeadbeefnetwork/ssh-keysign-pwn) hospedado no GitHub. Ele fornece o código necessário para demonstrar a vulnerabilidade em kernels lançados antes de 14 de 2026.

Linus Torvalds Lançou uma Nova Correção para a Falha

A nova correção de Linus Torvalds, identificada como Commit 31e62c2ebbfd, introduz o que ele chama de lógica "ligeiramente mais sã".

Em vez de o kernel "esquecer" o status de segurança de um programa no momento em que sua memória é limpa, o kernel agora usa uma flag em cache chamada user_dumpable.

Essa flag lembra se o programa estava protegido enquanto ainda estava ativo. Agora, se um atacante tentar capturar um descritor de arquivo durante essa janela de saída, o kernel vê a flag em cache e bloqueia o acesso a menos que o usuário tenha privilégios elevados de CAP_SYS_PTRACE.

Sistemas Linux Afetados

A vulnerabilidade afeta quase todas as principais distribuições Linux rodando um kernel lançado antes de 14 de 2026. Versões afetadas confirmadas incluem:

  • Ubuntu (22.04, 24.04, 26.04)
  • Debian 13
  • Arch Linux
  • CentOS 9
  • Raspberry Pi OS (Bookworm)

Corrigindo o Exploit FD-Theft

Atualize seu kernel assim que sua distribuição fornecer a correção de segurança mais recente. Quando você estiver em uma versão que inclui a correção de Torvalds, essa "janela de segurança" estará fechada para sempre.

Leitura Sugerida:

Outros tokens: https://ostechnix.com/linux-kernel-ptrace-fd-theft-vulnerability-fix/ https://ostechnix.com/tag/file-descriptor-theft/ https://ostechnix.com/tag/ssh-keysign-exploit/ https://ostechnix.com/tag/ptrace_may_access/ https://ostechnix.com/tag/fd-theft-exploit/ https://ostechnix.com/tag/cve-2026-41651/ https://ostechnix.com/tag/linus-torvalds/ https://ostechnix.com/tag/linux-security/ https://ostechnix.com/tag/kernel-patch/ https://ostechnix.com/tag/linux-kernel/ https://ostechnix.com/tag/shadow-theft/ https://ostechnix.com/tag/pidfd_getfd/ https://ostechnix.com/tag/security/ https://ostechnix.com/tag/linux/ CVE-2026-41651