A empresa Qualys identificou uma vulnerabilidade crítica (CVE-2023-4911) no vinculador ld.so, fornecido como parte da biblioteca C do sistema Glibc (GNU libc). A vulnerabilidade permite que um usuário local eleve suas permissões no sistema ao especificar dados especialmente formatados na variável de ambiente GLIBC_TUNABLES antes de executar um arquivo com a flag suid root, por exemplo, /usr/bin/su.
A possibilidade de exploração bem-sucedida da vulnerabilidade foi demonstrada no Fedora 37 e 38, Ubuntu 22.04 e 23.04, Debian 12 e 13. Acredita-se que a vulnerabilidade esteja presente em outras distribuições que utilizam Glibc. Distribuições baseadas na biblioteca C do sistema Musl, como Alpine Linux, não são afetadas pelo problema. A vulnerabilidade foi corrigida em um patch liberado em 2 de outubro. É possível acompanhar as atualizações de pacotes nas páginas do Debian, Ubuntu, RHEL, SUSE/openSUSE, Fedora, Arch, Gentoo e ALT Linux.
A vulnerabilidade foi causada por uma alteração introduzida em abril de 2021 e incluída no lançamento do glibc 2.34. Devido a um erro no código de análise da string especificada na variável de ambiente GLIBC_TUNABLES, uma combinação incorreta de parâmetros nessa variável resulta na gravação do valor analisado além do buffer alocado. O problema se manifesta quando, em vez das sequências padrão "name=val", os parâmetros são definidos na forma de atribuição dupla "name=name=val". Nesse caso, a atribuição é processada duas vezes, primeiro como "name=name=val" e depois como "name=val". Devido a esse tratamento duplo, resulta-se em "name=name=val:name=val", cujo tamanho excede o tamanho do buffer tunestr.
Pesquisadores desenvolveram um exploit que funciona de maneira estável, permitindo obter privilégios de root ao ser aplicado com praticamente qualquer programa que tenha a flag suid root. As exceções são a ferramenta sudo (que altera o valor do ELF RUNPATH), as ferramentas chage e passwd no Fedora (protegidas por regras específicas do SELinux) e a ferramenta snap-confine no Ubuntu (protegida por regras específicas do AppArmor). O método de exploração proposto também não funciona no RHEL 8 e RHEL 9, embora essas versões estejam suscetíveis à vulnerabilidade (para o ataque é necessário criar um exploit diferente). O código do exploit será publicado posteriormente, após a erradicação generalizada da vulnerabilidade. Para verificar se seu sistema está vulnerável, utilize o comando indicado abaixo, que, caso haja um problema, resultará em uma falha: env -i "GLIBC_TUNABLES=glibc.malloc.mxfast=glibc.malloc.mxfast=A" "Z=`printf ‘192x’ 1`" \/usr\/bin\/su —help
Destaca-se a correção de mais duas vulnerabilidades no Glibc:
- CVE-2023-4806 — acesso a uma área de memória já liberada (use-after-free) na função getaddrinfo(), manifestando-se quando o plugin NSS implementa apenas chamadas de back-end "_gethostbyname2_r" e "_getcanonname_r", mas não suporta a chamada "_gethostbyname3_r". Para explorar a vulnerabilidade, o servidor DNS deve retornar um grande número de endereços IPv6 e IPv4 para o host solicitado, levando à falha do processo que chamou a função getaddrinfo para a família AF_INET6 ao definir as flags AI_CANONNAME, AI_ALL e AI_V4MAPPED.
- CVE-2023-5156 — vazamento de conteúdo de memória ao chamar a função getaddrinfo para a família de endereços AF_INET6 com as flags AI_CANONNAME, AI_ALL e AI_V4MAPPED.
Fonte: opennet.ru
