A segurança do Linux recebeu mais um lembrete de que as vulnerabilidades mais perigosas nem sempre surgem de um simples erro de programação. Muitas vezes, elas aparecem justamente na interação entre diferentes componentes do sistema. É exatamente esse o caso da CIFSwitch, uma nova vulnerabilidade de escalonamento local de privilégios que afeta a relação entre o cliente CIFS presente no kernel Linux e o utilitário cifs-utils utilizado no espaço de usuário.
O problema foi divulgado pelo pesquisador Asim Manizada e chamou atenção não apenas pelo impacto potencial, mas também pela forma como foi descoberto: utilizando modelos de IA para identificar cadeias complexas de exploração envolvendo múltiplos componentes do sistema.
Embora a falha não afete todas as distribuições Linux da mesma forma, alguns sistemas populares podem permitir que um usuário comum obtenha privilégios de root sem precisar explorar nenhum corrupção de memória, buffer overflows ou qualquer outra técnica tradicional.
O que é o CIFS?
Para entender o problema, primeiro é necessário entender o papel do CIFS. O Common Internet File System (CIFS), também conhecido como SMB, é o protocolo utilizado principalmente por sistemas Windows para compartilhamento de arquivos em rede. Quando um computador Linux acessa uma pasta compartilhada em uma máquina Windows, normalmente está utilizando o cliente CIFS do kernel.
Em ambientes corporativos, esses compartilhamentos frequentemente utilizam autenticação Kerberos. Como implementar todo esse mecanismo diretamente dentro do kernel seria extremamente complexo, o Linux utiliza um componente auxiliar chamado cifs.upcall, fornecido pelo pacote cifs-utils.
É justamente nessa ponte entre kernel e espaço de usuário que a vulnerabilidade aparece.
Onde está o problema?
O funcionamento normal é relativamente simples. Quando o kernel precisa autenticar uma conexão CIFS usando Kerberos, ele solicita uma chave especial chamada cifs.spnego. Essa solicitação dispara automaticamente o programa cifs.upcall, executado com privilégios de root através do sistema request-key do Linux.
O problema descoberto por Manizada é que o kernel não validava adequadamente a origem dessas requisições. Dessa forma, qualquer usuário local podia criar uma solicitação falsa para uma chave cifs.spnego, simulando uma requisição legítima do cliente CIFS do kernel.
Como resultado, o sistema iniciava o cifs.upcall como root, acreditando estar atendendo a uma operação legítima. Até aqui a situação já seria preocupante, mas o verdadeiro problema vem logo depois.
Da falsificação ao acesso root
O utilitário cifs.upcall confia em diversas informações presentes na descrição da chave recebida. Entre elas estão:
- UID do usuário;
- Credenciais utilizadas;
- PID do processo;
- Namespace alvo da operação.
Como essas informações podiam ser falsificadas pelo atacante, tornou-se possível convencer o programa a entrar em namespaces controlados pelo próprio usuário malicioso. Namespaces são uma tecnologia fundamental do Linux moderno, amplamente utilizada por contêineres, sandboxes e ambientes isolados. Normalmente isso não representa um risco.
Entretanto, antes de abandonar seus privilégios de root, o cifs.upcall realiza consultas ao sistema NSS (Name Service Switch), responsável por resolver usuários e grupos. E é aí que a cadeia de exploração se fecha.
Ao entrar em um namespace controlado pelo atacante, o processo passa a enxergar arquivos manipulados por ele, incluindo:
/etc/nsswitch.conf- bibliotecas
libnss_*.so
Com isso, o invasor consegue fazer o helper carregar código arbitrário enquanto ainda está executando como root. O resultado final é a execução de código com privilégios totais no sistema.
Por que a falha é diferente de outras vulnerabilidades?
A CIFSwitch chama atenção porque não depende de corrupção de memória, buffer overflow, use-after-free, nem race conditions. Toda a exploração acontece por meio de uma sequência de decisões legítimas feitas por diferentes componentes do sistema, cada um assumindo que o outro já havia realizado as validações necessárias.
Esse tipo de problema é conhecido como falha de lógica ou “trust boundary issue”, quando dois componentes compartilham informações confiando excessivamente um no outro.
Quais distribuições estão em risco?
O pesquisador classificou os sistemas testados em três categorias. Entre as distribuições consideradas vulneráveis em instalações padrão estão:
- Linux Mint 21.3 e 22.3;
- CentOS Stream 9;
- Rocky Linux 9;
- AlmaLinux 9.7;
- Kali Linux (diversas versões recentes);
- SLES 15 SP7.
Outras distribuições podem ser exploradas apenas caso o pacote cifs-utils esteja instalado, incluindo:
- Ubuntu 18.04, 20.04, 22.04 e 24.04;
- Debian 11, 12 e 13;
- Pop!_OS;
- openSUSE Leap;
- Oracle Linux;
- Amazon Linux 2023.
Por outro lado, sistemas mais recentes como Fedora 40 a 44, Ubuntu 26.04, CentOS Stream 10 e openSUSE Tumbleweed possuem políticas de SELinux ou AppArmor que bloqueiam a cadeia completa de exploração por padrão. Isso não significa que sejam totalmente imunes, mas sim que as configurações padrão dificultam significativamente o ataque.
Como se proteger?
A correção já foi integrada às atualizações mais recentes de versões ainda mantidas do kernel Linux e amplamente distribuída pelas distros. O patch adiciona uma validação que impede que processos comuns criem descrições falsas do tipo cifs.spnego, reservando essa capacidade exclusivamente ao cliente CIFS legítimo do kernel.
Enquanto as atualizações não chegam aos repositórios de todas as distribuições, algumas medidas podem reduzir significativamente o risco:
- Instalar as atualizações de segurança assim que estiverem disponíveis;
- Remover o pacote cifs-utils se ele não for necessário;
- Desabilitar o módulo CIFS caso compartilhamentos SMB não sejam utilizados;
- Desativar namespaces de usuário não privilegiados em ambientes controlados;
- Revisar regras relacionadas ao request-key e ao cifs.upcall.
Um alerta para o futuro
Um aspecto curioso foi a forma como a vulnerabilidade foi encontrada. Segundo o pesquisador, a descoberta surgiu após utilizar modelos de linguagem para construir grafos semânticos que mapeavam relações de confiança entre componentes do kernel e programas em espaço de usuário.
Isso permitiu identificar uma cadeia de exploração envolvendo múltiplas etapas que dificilmente seria encontrada por ferramentas tradicionais. Se esse método se mostrar eficaz em larga escala, podemos estar entrando em uma nova fase da pesquisa de segurança: uma era em que inteligências artificiais não apenas ajudam a corrigir vulnerabilidades, mas também descobrem falhas complexas escondidas nas interações entre componentes legítimos do sistema.
Fique por dentro das principais novidades da semana sobre tecnologia e Linux: receba nossa newsletter!