← back
CVE-2023-4911highunder attackCWE-122

Glibc: buffer overflow in ld.so leading to privilege escalation

100Vexday Risk Score

Patch now. It under exploitation confirmed by CISA and has a working public exploit.

ssvc Actcvss 7.8epss 81%
from disclosure to weapon1 days
Published on NVDOct 3
1st PoC+1d
metasploitOct 3
CISA KEV+49d
exploitation probability
81%top 1% of all CVEs
observed exploitation
yesCISA + VulnCheck
48 public exploit(s)
Action required by CISAfederal deadline: 2023-12-12

Apply mitigations per vendor instructions or discontinue use of the product if mitigations are unavailable.

Summary

Buffer overflow no dynamic loader (ld.so) da glibc ao processar a variável de ambiente GLIBC_TUNABLES, batizada de 'Looney Tunables' pela Qualys, que a descobriu e publicou a análise. Permite escalonamento de privilégios local: um usuário sem privilégios que execute um binário SUID/SGID com essa variável manipulada pode obter root. A falha é séria porque quase todo binário SUID (su, sudo, mount, passwd, etc.) serve de vetor, e distribuições Linux mainstream com glibc >= 2.34 rodam esse código por padrão — não depende de configuração exótica.

Technical detail

O bug está na rotina que faz o parse da string passada em GLIBC_TUNABLES antes de o loader ativar o binário SUID. O parser processa pares chave=valor separados por dois-pontos e, ao validar o tamanho/conteúdo dos tunables, escreve fora dos limites do buffer alocado — um out-of-bounds write (CWE-787/CWE-120) em memória heap do processo do próprio dynamic loader, que roda com os privilégios elevados do binário SUID antes mesmo do código da aplicação começar a executar.

Segundo a análise da Qualys, a falha foi introduzida em abril de 2021, quando um commit reescreveu a lógica de filtragem de tunables herdados via ambiente para binários AT_SECURE (SUID/SGID), e chegou ao release glibc 2.34. Versões anteriores ao 2.34 não contêm esse trecho de código e, portanto, não são vulneráveis ao mecanismo descrito — mesmo que apareçam listadas em rastreadores de produto por dependência genérica do componente glibc.

O atacante controla integralmente o conteúdo de GLIBC_TUNABLES no ambiente do processo que ele mesmo lança. Como ld.so processa essa variável antes de dropar privilégios ou aplicar qualquer sandboxing da aplicação, o overflow ocorre num contexto já privilegiado (owner do binário SUID), o que torna a corrupção de memória diretamente aproveitável para controle de fluxo.

How it’s exploited

Pré-requisito real: acesso local (shell) na máquina, sem necessidade de privilégio algum (PR:L no vetor CVSS reflete apenas a necessidade de poder executar processos, não privilégio elevado) e sem interação de terceiros. O atacante define a variável GLIBC_TUNABLES no ambiente e invoca qualquer binário instalado com bit SUID que use a glibc afetada — não é preciso vulnerabilidade adicional na aplicação SUID em si, o overflow acontece dentro do próprio ld.so antes de o binário-alvo executar sua lógica.

A Qualys publicou análise técnica detalhada e demonstrou exploração funcional, obtendo root completo em distribuições como Fedora, Ubuntu e Debian com glibc vulnerável, sem divulgar o exploit weaponizado no primeiro momento; PoCs públicas e um módulo Metasploit surgiram depois, reduzindo bastante a barreira de exploração. A CISA incluiu a CVE no catálogo KEV citando exploração confirmada, o que eleva a prioridade de patch mesmo em ambientes sem exposição à internet, já que o vetor é local e serve como etapa de pós-exploração após qualquer acesso inicial (shell de baixo privilégio via outra falha, credencial roubada, container mal configurado com escape parcial etc.).

O resultado final é execução de código com privilégios de root (ou do dono do SUID), sem depender de condição de corrida ou timing preciso — a complexidade de exploração é considerada baixa uma vez compreendido o layout de memória do parser afetado.

Versions

Affected
glibc versões a partir da 2.34 (onde a lógica de filtragem de tunables para binários SUID/AT_SECURE foi introduzida) até versões anteriores à correção. Distribuições com glibc anterior à 2.34 (por exemplo, ramos legados como RHEL 6/7, que usam glibc 2.12/2.17) não contêm o trecho de código vulnerável, ainda que apareçam listadas em rastreadores de CVE por associação ao componente glibc.
Fixed in
Red Hat: glibc-2.34-28.el9_0.4 e correlatos para RHEL 9 / RHEL 9.0 EUS (RHSA-2023:5453, RHSA-2023:5454); glibc-2.28-225.el8_8.6 para RHEL 8 (RHSA-2023:5455); glibc-2.28-189.6.el8_6 para RHEL 8.6 EUS (RHSA-2023:5476); há também RHSA-2024:0033 cobrindo RHEL 9 Virtualization/EUS adicionais. Outras distribuições publicaram seus próprios backports de pacote glibc correspondentes ao fix upstream; verificar o changelog do pacote específico da distro para confirmar a versão exata que contém a correção.

How to protect

Aplicar a atualização de pacote glibc do fornecedor da distribuição é a correção definitiva. Para RHEL, a Red Hat publicou correção em RHSA-2023:5453 (RHEL 9), RHSA-2023:5454 (RHEL 9.0 EUS), RHSA-2023:5455 (RHEL 8) e RHSA-2023:5476 (RHEL 8.6 EUS), com pacotes como glibc-2.34-28.el9_0.4 (RHEL 9.0 EUS), glibc-2.28-225.el8_8.6 (RHEL 8) e glibc-2.28-189.6.el8_6 (RHEL 8.6 EUS). Após instalar o pacote corrigido, é necessário reiniciar todos os serviços vinculados à glibc ou reiniciar o sistema — o advisory da Red Hat destaca isso explicitamente, já que processos já em execução continuam usando a versão antiga carregada em memória.

Como paliativo, se o patch não puder ser aplicado imediatamente: remover ou reduzir a superfície de binários com bit SUID desnecessários no sistema, e monitorar/filtrar a variável de ambiente GLIBC_TUNABLES via PAM ou wrapper de execução para processos privilegiados, mas isso é mitigação incompleta e frágil — não cobre todos os caminhos de invocação e não substitui o patch. Definir GLIBC_TUNABLES vazia no ambiente global não é garantia, porque o atacante controla o próprio ambiente do processo que lança o binário SUID.

O que não funciona: restringir acesso de rede ou colocar WAF na frente de alguma aplicação não tem efeito, já que a exploração é inteiramente local, dentro do processo — não há componente de rede na cadeia de ataque.

How to detect

Não há assinatura de rede a procurar — a exploração é inteiramente local, dentro do processo que carrega o binário SUID. O sinal mais confiável é auditoria de execução de processos (auditd, EDR/HIDS) capturando execve de binários SUID com a variável de ambiente GLIBC_TUNABLES presente e com valores anômalos (strings longas, caracteres de controle, múltiplos separadores ':' fora do padrão esperado de tunables legítimos), especialmente quando o processo pai não é um shell de administração esperado. Crash ou comportamento anômalo (segfault) em binários SUID comuns como su, sudo, passwd, mount também é indício de tentativa de exploração falha, mas ambientes sem logging de linha de comando/variáveis de ambiente detalhado dificilmente terão visibilidade retroativa confiável.

Researched and written with AI from the vendor advisory and public analysis, with the sources above. Always confirm the fixed version in the official advisory before acting.
A buffer overflow was discovered in the GNU C Library's dynamic loader ld.so while processing the GLIBC_TUNABLES environment variable. This issue could allow a local attacker to use maliciously crafted GLIBC_TUNABLES environment variables when launching binaries with SUID permission to execute code with elevated privileges.
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
public PoCs found48
cve_referencewww.exploit-db.com/exploits/52479unverifiedgithubgithub.com/leesh3288/CVE-2023-4911392githubgithub.com/RickdeJager/CVE-2023-4911167githubgithub.com/chaudharyarjun/LooneyPwner43githubgithub.com/hadrian3689/looney-tunables-CVE-2023-491129githubgithub.com/ruycr4ft/CVE-2023-491118githubgithub.com/KernelKrise/CVE-2023-491118githubgithub.com/Green-Avocado/CVE-2023-491115githubgithub.com/Diego-AltF4/CVE-2023-49118githubgithub.com/NishanthAnand21/CVE-2023-4911-PoC7githubgithub.com/jarpex/cve-2023-4911-exploit-optimized3githubgithub.com/puckiestyle/CVE-2023-49112githubgithub.com/xiaoQ1z/CVE-2023-49111githubgithub.com/teraGL/looneyCVE1githubgithub.com/snurkeburk/Looney-Tunables0githubgithub.com/guffre/CVE-2023-49110githubgithub.com/Aryan20057/CVE-2023-49110githubgithub.com/Billar42/CVE-2023-49110githubgithub.com/KillReal01/CVE-2023-49110githubgithub.com/silent6trinity/looney-tuneables0githubgithub.com/0xMOGA/CVE-2023-4911-Lab0githubgithub.com/baeseungwon1010/CVE-2023-49110vulncheckvulncheck.com/xdb/e8ba401a5397unverifiedvulncheckvulncheck.com/xdb/0bfd16ee5c6eunverifiedvulncheckvulncheck.com/xdb/1bf2c7948d0aunverifiedvulncheckvulncheck.com/xdb/7154c8a75572unverifiedvulncheckvulncheck.com/xdb/d7f283c48b1aunverifiedvulncheckvulncheck.com/xdb/847b8ad5421funverifiedvulncheckvulncheck.com/xdb/4a0f3cecfcf5unverifiedvulncheckvulncheck.com/xdb/d9dc0002293funverifiedvulncheckvulncheck.com/xdb/270ec9b3f4c1unverifiedvulncheckvulncheck.com/xdb/794f2256b177unverifiedvulncheckvulncheck.com/xdb/7386501edb9eunverifiedvulncheckvulncheck.com/xdb/60ac54a2a53aunverifiedvulncheckvulncheck.com/xdb/b43d5e2b6b33unverifiedvulncheckvulncheck.com/xdb/208283cc4e70unverifiedvulncheckvulncheck.com/xdb/6dd56d3450b7unverifiedvulncheckvulncheck.com/xdb/c66f71d05ca3unverifiedvulncheckvulncheck.com/xdb/dd2d2990ad7aunverifiedvulncheckvulncheck.com/xdb/c3f0dfef6dc3unverifiedvulncheckvulncheck.com/xdb/912fdfa3ffcbunverifiedvulncheckvulncheck.com/xdb/c1e2b0d1e872unverifiedvulncheckvulncheck.com/xdb/847bf09204caunverifiedcve_referencepacketstormsecurity.com/files/174986/glibc-ld.so-Local-Privilege-Escalation.htmlunverifiedcve_referencepacketstormsecurity.com/files/176288/Glibc-Tunables-Privilege-Escalation.htmlunverifiedvulncheckvulncheck.com/xdb/6ddd35f752a2unverifiedvulncheckvulncheck.com/xdb/24a3ae6b3ae0unverifiedvulncheckvulncheck.com/xdb/e9cc8a9653c6unverified
⚠ Public resources, to assess the exposure of systems you control or are authorized to test. Test only with authorization.