Esta semana, discutiremos as vulnerabilidades de alta diversidade no kernel do Linux.
Dirty Pipe - Escalada do Privilégio Local Linux
CVE-2022-0847 permite a um utilizador não privilegiado do Linux sobrescrever qualquer ficheiro arbitrário só de leitura. Um utilizador poderia aproveitar esta vulnerabilidade injectando código nos processos de raiz e aumentar os seus privilégios para se tornar um utilizador raiz.
Semelhante à omnipresente vulnerabilidade "Vaca Suja", um atacante pode executar a exploração do tubo sujo e escrever texto para um ficheiro. O que torna o Dirty Pipe uma falha mais fácil de explorar é que um utilizador pode escrever texto em qualquer ficheiro arbitrário e, em alguns casos, pode facilmente aumentar os privilégios através de binários SUID.
Causa Raiz - A vulnerabilidade do tubo sujo é causada por uma variável não-inicializada pipe_buffer.flags. Os tubos são ferramentas utilizadas para comunicação interprocessada, uma extremidade empurra os dados para ela enquanto a outra extremidade pode puxar esses dados. Um compromisso não-inicializado de pipe_buffer.flags é uma vulnerabilidade de alta gravidade. Ao injectar PIPE_BUF_FLAG_CAN_MERGE numa referência de página cache, é possível sobrescrever dados na cache de página, simplesmente escrevendo novos dados na tubagem preparada de uma forma especial.
Há algumas advertências quanto a esta vulnerabilidade:
- O atacante deve ter lido as permissões para o ficheiro
- A compensação não deve estar num limite de página
- A escrita não pode atravessar um limite de página
- O ficheiro não pode ser redimensionado
Actualmente, não há atenuações existentes para esta vulnerabilidade. Se estiver numa versão do kernel Linux superior a 5.8, o fornecedor recomenda a aplicação de correcções para as seguintes versões: 5.16.11, 5.15.25 e 5.10.102.
Actualizado a 14 de Março de 2022: O mais recente núcleo de Linode está disponível, o qual fixa o Dirty Pipe.
Fuga de contentores através de cgroups
Os grupos de controlo, ou cgroups, são uma característica do kernel Linux que aloca e reparte a utilização de recursos informáticos para processos. Em alguns casos, estes processos serão então organizados em grupos hierárquicos onde a atribuição de recursos é feita com base no grupo.
Os Cgroups são normalmente utilizados em contentores Linux porque existem múltiplos processos a correr num contentor que precisam de ser agrupados.
CVE-2022-0492 é uma vulnerabilidade de fuga de contentor em que um utilizador pode escapar do contentor e rodar para a máquina anfitriã. Isto só afecta a arquitectura cgroup v1.
Root Cause - A vulnerabilidade envolve o ficheiro release_agent, que é uma característica do cgroups v1. O ficheiro release_agent permite aos administradores configurar um "agente de libertação" que corre quando um processo no cgroup é terminado. O release_agent só é visível no directório raiz do cgroup e afecta todos os seus cgroups filhos. Sempre que um processo morre, o kernel verifica se o seu notifiy_on_release activado, e se o fez, então irá desovar o binário release_agent configurado. A fuga do contentor ocorre porque o Linux não verificou se o processo de configuração do ficheiro release_agent tem privilégios administrativos (por exemplo, a capacidade CAP_SYS_ADMIN ).
Esta vulnerabilidade pode ser atenuada fazendo o seguinte:
- Habilitação de perfis de segurança AppArmor, SELinux, ou Seccomp
- Desactivar espaços de nomes de utilizadores não privilegiados, se não for necessário
- Funcionamento do contentor como um utilizador sem privilégios
Os investigadores de segurança de Palo Alto criaram um teste para determinar se o seu ambiente de recipientes é vulnerável ao CVE-2022-0492:
Há algumas advertências por detrás desta vulnerabilidade. A fim de explorar com sucesso esta vulnerabilidade, é necessário satisfazer as seguintes condições para uma exploração bem sucedida:
- Um contentor precisa de ser executado como um utilizador privilegiado (raiz ou um utilizador com a bandeira no_new_privs )
- AppArmor, SELinux, ou Seccomp precisa de ser desactivado
- O anfitrião precisa de permitir espaços de nomes de utilizadores não privilegiados
- Um recipiente terá de estar numa raiz v1 cgroup
Netfilter Local Privilege Escalation via heap-out-of-bounds escrever
O Netfilter é uma estrutura do kernel Linux que permite a realização de várias operações relacionadas com a rede. Permite a filtragem de pacotes, tradução de endereços de rede (e porta), registo de pacotes, e enfileiramento de pacotes no espaço do utilizador. Pode também construir firewalls na Internet com base na filtragem de pacotes sem estado e com estado.
CVE-2022-25636, é uma vulnerabilidade na qual um utilizador local pode realizar uma pilha de coisas que não tem fronteiras escrever na função nft_fwd_dup_dup_netdev_offload (nf_dup_netdev.c) e ganhar privilégios. Esta vulnerabilidade afecta actualmente as versões 5.4-rc1 até 5.6.10 do kernel.
Root Cause - Na função nft_fwd_dup_dup_netdev_offload, ctx->num_actions++ é usado para compensar na matriz flow->rule->action.entries(nf_dup_netdev.c:67) ao configurar regras de fluxo dup ou fwd numa cadeia com o hardware offload activado. O descasamento ocorre entre o número que o incremento é chamado e o número de entradas atribuídas. O tamanho da matriz alocada baseia-se no número de expressões nftables que têm expr.offload_flags&NFT_OFFLOAD_F_ACTION(nf_tables_offload.c:97), mas apenas o tipo de expressão imediata tem isto (não dup ou fwd). Esta discrepância permite a alguém criar uma regra com expressões dup/fwd sem uma correspondente/precedente imediata, levando a uma matriz de entradas subdimensionada, e a um número arbitrário de escritas fora dos limites da matriz. Alguém pode escrever um guião e executar uma escrita OOB que pode ser transformada num ROP do Kernel / escalonamento de privilégios locais.
É recomendado remendar o seu núcleo para a versão mais recente.
Comentários