Nova vulnerabilidade no módulo KSMBD do Kernel Linux

Linux Hacked

Nessa semana uma notícia abalou o mundo da segurança cibernética, uma nova vulnerabilidade crítica no kernel do Linux, mais especificamente no módulo do kernel "KSMBD", que implementa o protocolo SMB3 a nível de kernel.

A exploração dessa vulnerabilidade pode permitir a execução de códigos arbitrários por um usuário não autenticado, motivo pelo qual a vulnerabilidade quando identificada, no dia 22/12/2022 como "zero day", recebeu um score 10 na escala de pontuação CVSS, o nível mais alto de criticidade (ZDI-22-1690). Essa nova vulnerabilidade já recebeu 6 CVEs no Mitre, são elas: CVE-2022-47938, CVE-2022-47939, CVE-2022-47940, CVE-2022-47941, CVE-2022-47942 and CVE-2022-47943.

Informações confusas, incompletas e com erros

Apesar de toda a criticidade do assunto, nós encontramos muitas informações confusas, fragmentadas, incompletas e inclusive com erros, em fóruns, artigos e publicações em redes sociais, levando muitas pessoas ou a um desespero desnecessário ou a uma falsa sensação de segurança.

Essas informações divergentes levaram inclusive a criação e divulgação de scripts que prometem analisar se o kernel está vulnerável mas, no entando, o que vimos por aí são, em sua grande maioria, scripts que testam apenas uma parte do ambiente, gerando falsos positvos ou, ainda pior, falsos negativos, piorando ainda mais a confusão sobre o assunto.

Outro ponto percebido foi o entendimento de que o simples fato de atualizar o kernel para uma versão acima da 5.15.x resolveria. No entanto, a vulnerabilidade está presente em muitas releases das versões superiores também, o que tem gerado mais confusão e falsos negativos na análise do ambiente.

Como testar o seu kernel

As versões vulneráveis do kernel são 5.15.x (menor que 5.15.61), 5.16.x , 5.17.x, 5.18.x, 5.19.x (menor que 5.19.2).

Para analisar se o seu kernel é potencialmente vulnerável, o primeiro passo é ver se a versão está entre as que contem a vulnerabilidade. Para isso pode-se usar o comando: "uname -r". print

Caso o seu kernel esteja em alguma das versões vulneráveis, o próximo passo é verificar se existe o módulo KSMBD. Para isso pode-se usar o comando: "modinfo ksmbd".

Se tiver um retorno como o abaixo, então o módulo existe. print

Caso o módulo exista é preciso, então, verificar se ele está carregado no kernel, afinal, se o módulo vulnerável não for carregado, aquele código com problema não será executado. Para isso pode-se usar o comando: "lsmod | grep ksmbd". print

O que fazer se meu Kernel estiver vulnerável?

Uma boa parte das pessoas não vai passar daqui, mas, caso você esteja na minoria que recebeu um retorno como o abaixo, então dispare o alarme! print

Nesse ponto você tem 2 opções viáveis:

  1. Atualizar o kernel para uma versão contendo a correção para essa vulnerabilidade;

  2. Remover o módulo do kernel e, com isso, parar todo e qualquer serviço que use ele, mais especificamente o compartilhamento de arquivos (share) via SMB. Para isso pode-se usar o comando: "modprobe -r ksmbd" usando "sudo" ou uma conta com privilégios de root.

print

Automatizando o teste da vulnerabilidade

Para facilitar a análise da vulnerabilidade em seu kernel, disponibilizamos um script próprio que pode ser usado para fazer o teste de vulnerabilidade do kernel ao módulo KSMBD.

Você pode acessar o script através do github https://github.com/andrebarretosantos/security/blob/main/check_ksmbd_kernel_vulnerability.sh

Na linha de comando do seu Linux você pode executar a seguinte sequência de comandos:

$ wget https://raw.githubusercontent.com/andrebarretosantos/security/main/check_ksmbd_kernel_vulnerability.sh $ chmod 700 check_ksmbd_kernel_vulnerability.sh $ ./check_ksmbd_kernel_vulnerability.sh

Recomendações finais

Independentemente do seu Kernel estar vulnerável agora ou não, é recomendado mantê-lo atualizado com os patches de segurança, assim como todo o restante do seu sistema operacional GNU/Linux, afinal, ele está sendo cada vez mais usado e, consequentemente, sendo cada mais visado também.

Veja mais em

Artigo completo em: https://www.netsensor.com.br/post/nova-vulnerabilidade-no-kernel-linux

Meu LinkedIn: https://www.linkedin.com/in/andrebarretosantos/ LinkedIn da empresa NETSENSOR: https://www.linkedin.com/company/netsensor/

[LINUX] tentando meus dispositivo agora.

Depois posta aqui o resultado e, se puder, as versões que testou caso tenha usado o script.

Ótimo artigo, será que dispositivos embarcados ou não-pc/servidor correm algum risco? Tenho um game portatil que usa o JELOS, uma distro linux minima pra arm.

Obrigado pelo feedback [@CristianoSword](https://www.tabnews.com.br/CristianoSword), é muito importante! Quando a questão do dispositivo embarcado, independentemente do dispositivo, se usa um kernel Linux pode estar vulnerável sim. O que acontece é que dispositivos embarcados costumam ter um kernel "enxuto", somente com os recursos realmente necessários, o que normalmente não irá incluir o módulo KSMBD, no entanto, no caso de dispositivos com acesso via compartilhamento de arquivos SMB (share), como storage de rede (NAS), esse módulo pode estar sendo usado. Um outro ponto é que, muitas vezes, dispositivos embarcados rodam um kernel mais antigo, ou por ser mais leve ou para evitar toda a personalização de configuração de um kernel novo. Como essa vulnerabilidade foi inserida nos kernels mais novos, há uma grande chance do seu dispositivo embarcado estar rodando um kernel mais antigo, que não tem essa vulnerabilidade, mas que pode ter outras vulnerabilidades já corrigidas em kernels mais novos.

Genial @andrebarreto eu testei o script na minha maquina e rodou delicinha, já dei uma estrelha la no gitgub também! Parabéns pelo artigo!

Obrigado pelo feedback sobre o script, pelas trocas de ideias e pela estrelinha no github (foi minha primeira estrelinha! :) A propósito, poderia informar em qual distro Linux e versão você rodou o script?
Seu artigo já está em 2° lugar nos relevantes!
Que legal! Fico muito feliz em saber que está interessando e ajudando a comunidade! <3

Eu rodei o script que automatiza o teste da vulnerabilidade e tenho certeza de que estou seguro agora!

Resultado do teste:

Resultado do teste

Obs: Sistema que estou usando atualmente é o Fedora 37!


Minhas experiências como um novo usuário de Linux:

Tinha usado Ubuntu durante uma semana depois decidi mudar para o Fedora, para testar os sistemas dos quais mais me interessei, e também porquê estava com um probleminha no Ubuntu que não estava conseguindo baixar um jogo no qual eu jogo, porém acredito fielmente que o erro tenha sido da minha parte (com certeza foi) e não do sistema (foi erro meu mesmo XD), só que como já estava com vontade de explorar o Fedora, pulei direto pra cá e simplesmente estou adorando o Linux (tanto Ubuntu, como o Fedora)! Dá muita liberdade pra customizar o sistema inteiro, tanto aparência como outras coisas mais avançadas que eu não cheguei nem a tentar mexer pra não correr o risco de quebrar tudo.

Não volto nunca mais para o sistema chamado Janelas (traduzido do inglês para o português) XD


Dúvidas:

  1. Qual a diferença do snap, para o flatpak? Não entendi muito bem sobre isso, pois no ubuntu era snap e aqui no Fedora é flatpak (se tem como baixar no fedora através de snap, e no ubuntu através de flatpak, eu realmente não sei).

  2. Gostaria de me aprofundar mais nisso e estudar sobre tudo que eu puder desse universo, quais cursos/vídeos/artigos vocês recomendam para eu aprender mais sobre linux? (Lembrando que eu sou bem iniciante mesmo).

  3. Por que a versão do meu kernel é 6.0.15? Por eu estar no notebook isso muda algo?


Fim

Obrigado @andrebarreto por esse artigo maravilhoso, muito bem explicado, com muitas informações, imagens e que ainda por cima traz uma solução fácil para quem não manja muito, achei bem completo! Show de bola! E já agredecendo de antemão também, muito obrigado a quem responder essas minhas perguntas e sanar minhas dúvidas! E vai me desculpando se fiz alguma pergunta de 'iniciante', ou alguma pergunta idiota, é que eu realmente entrei nesse mundo agora e não sei de muita coisa! Abraços!

Obrigado pelo seu feedback, já vou adicionar essa distro na lista onde o script rodou com sucesso. Quanto as suas perguntas, vou responder apenas a 3a, sobre kernel, para não perder o foco no tema desse artigo. "Por que a versão do meu kernel é 6.0.15? Por eu estar no notebook isso muda algo?" Você está usando a mais nova versão "major" do kernel. A versão major é a mais significativa e, quando muda, significa que mudanças maiores foram aplicadas ao kernel, as vezes até uma quase reestruturação completa. Normalmente as distribuições mais voltadas a servidores são mais conservadoras e aguardam um pouco mais antes de mudar para uma nova versão "major", preocupadas principalmente com segurança e estabilidade. Já as distros mais voltadas a desktop costumam fazer um test drive mais rápido das novas versões de kernel e, em alguns caso, isso irá servir como "aprendizado" para as distros voltadas a servidores. E sendo mais direto na resposta à sua pergunta, a distribuição/versão do kernel basicamente irá funcionar da mesma forma, com as mesmas versões de kernel e software, independentemente de estar em um notebook, servidor físico, máquina virtual ou instância em Cloud. Espero ter ajudado no entendimento.

Distros Linux e versões em que o script foi testado com sucesso até o momento: Ubuntu 22.04 LTS Ubuntu 20.04 LTS Slackware64 14.2 Slackware 10.2 AlmaLinux 8.5 Fedora 37

Se você testou em outra versão comenta aqui e compartilha a informação com a comunidade.