← volver
CVE-2021-3156highbajo ataqueCWE-193

CVE-2021-3156

100Vexday Risk Score

Corrige ahora. Ella está bajo explotación confirmada por CISA y tiene exploit funcional público.

ssvc Actcvss 7.8epss 99%
de la publicación al arma0 días
Publicada en NVD26 ene
1ª PoC26 ene
metasploit26 ene
CISA KEV+435d
probabilidad de explotación
99%top 1% de las CVE
explotación observada
CISA + VulnCheck
166 exploit(s) público(s)
Acción exigida por CISAplazo federal: 2022-04-27

Apply updates per vendor instructions.

Resumen

Baron Samedit é um heap buffer overflow no sudo explorável por qualquer usuário local, sem senha e sem entrada em sudoers, para obter root. A falha existe desde 2011 e afeta praticamente toda instalação padrão de sudo em Linux e outros *nix da época — é uma das poucas CVEs de escalonamento local com CVSS alto que realmente merece o alarde, dado que não exige nenhuma configuração fora do padrão.

Detalle técnico

A causa é um off-by-one (CWE-193) na função set_cmnd(), em plugins/sudoers/sudoers.c, que degenera em heap-based buffer overflow (CWE-122). Quando sudo roda em 'modo shell' (flags MODE_SHELL ou MODE_LOGIN_SHELL), a função parse_args() concatena os argumentos de linha de comando escapando todo metacaractere com uma barra invertida antes de gravá-los em user_args. Mais adiante, set_cmnd() percorre esse buffer removendo o escape: ao encontrar um '\\' seguido de caractere não-espaço, avança o ponteiro 'from' duas vezes assumindo que sempre há um caractere depois da barra.

Se um argumento termina em uma única barra invertida sem escape prévio, from[0] é a barra e from[1] é o terminador nulo da string — que não é espaço. O código avança 'from' além do terminador nulo, copia bytes fora dos limites do argumento original para user_args, e o tamanho do buffer (calculado antes, somando strlen de cada argumento) não contabilizou esse excesso. O resultado é escrita fora dos limites do heap.

Em teoria isso nunca deveria ocorrer, porque quem entra em modo shell já passou pelo escape de parse_args(). Na prática, os pesquisadores da Qualys encontraram uma inconsistência entre as condições que ativam MODE_SHELL em parse_args() (linha 571) e as que chegam ao código vulnerável em set_cmnd() (linha 858): se o binário for invocado como 'sudoedit' em vez de 'sudo', parse_args() força MODE_EDIT automaticamente sem resetar o valid_flags padrão, que já inclui MODE_SHELL. Isso permite setar MODE_SHELL via a opção -s sem passar pelo bloco de escape original, deixando a barra invertida final intocada.

O atacante controla integralmente os argumentos de linha de comando passados a 'sudoedit -s', incluindo o conteúdo copiado além do limite do buffer, o que dá controle suficiente sobre o heap para construir exploits confiáveis de escalonamento de privilégio.

Cómo se explota

O vetor é totalmente local: o atacante precisa apenas de uma sessão no sistema (shell, SSH, processo qualquer) com o binário sudo/sudoedit instalado com bit setuid — não precisa estar no arquivo sudoers, não precisa saber senha de ninguém e não precisa de nenhuma regra de sudo concedida. Basta invocar sudoedit com a flag -s e um argumento de linha de comando terminado em uma única barra invertida.

A Qualys demonstrou exploração completa até root em Ubuntu 20.04 (sudo 1.8.31), Debian 10 (sudo 1.8.27) e Fedora 33 (sudo 1.9.2), e afirma que outras distribuições provavelmente também são exploráveis. A engenharia do heap overflow em um exploit confiável de corrupção de memória tem complexidade técnica real (heap grooming, controle de layout), mas isso já foi resolvido publicamente: há PoCs, módulo Metasploit e a falha está no catálogo KEV da CISA por exploração confirmada. Isso reduz drasticamente a barreira de reprodução — qualquer pessoa com acesso local não privilegiado a um sistema não corrigido pode chegar a root usando ferramentas já existentes.

O impacto final é escalonamento total: execução de comandos como root, sem trilha de auditoria legítima (o log de sudo não registra a exploração como uso normal).

Versiones

Afectadas
Sudo legado de 1.8.2 até 1.8.31p2, e sudo estável de 1.9.0 até 1.9.5p1, em configuração padrão (bug introduzido pelo commit 8255ed69, de julho de 2011).
Corregidas en
Sudo 1.9.5p2. Diversas distribuições publicaram builds com o backport dessa correção em seus próprios esquemas de versionamento (ex.: pacotes específicos do Debian, Red Hat/Fedora, Ubuntu, Gentoo, HardenedBSD) — verificar changelog do pacote da distribuição, não apenas o número de versão upstream do sudo.

Cómo protegerse

A correção definitiva é atualizar para sudo 1.9.5p2 ou para a versão do pacote da distribuição que incorpora o backport dessa correção (Debian, Red Hat, Fedora, Ubuntu, SUSE e outros publicaram atualizações específicas pouco depois do advisory da Qualys, em janeiro/fevereiro de 2021; a Apple corrigiu em macOS Big Sur 11.2.1, Catalina 10.15.7 Supplemental Update e Mojave 10.14.6 Security Update 2021-002, também via atualização do sudo para 1.9.5p2).

Se a atualização não for possível de imediato, o único paliativo real reportado é remover o bit SUID do binário sudo/sudoedit (por exemplo, ajustando as permissões para retirar o setuid), o que neutraliza o vetor de exploração mas também desativa completamente a funcionalidade do sudo até a correção ser aplicada — custo alto para qualquer ambiente que dependa dele para operação diária. Não há flag de configuração do sudo, regra de sudoers ou controle de AppArmor/SELinux documentado como mitigação parcial eficaz; a superfície vulnerável está no parsing interno de argumentos antes de qualquer política ser avaliada.

Restringir sudoers ou remover usuários de grupos administrativos não mitiga a falha, porque a exploração não depende de ter permissão de sudo — é um mito comum: a vulnerabilidade está no binário setuid em si, executável por qualquer usuário local, e não na política de autorização do sudo.

Cómo detectar

Não há assinatura de rede, já que o vetor é 100% local e não gera tráfego. Em nível de host, o sinal mais direto é a execução do binário 'sudoedit' com a flag -s e argumentos anômalos terminando em barra invertida, algo que auditoria de linha de comando (auditd, EDR com captura de argv) pode capturar se configurada para registrar invocações de sudo/sudoedit com granularidade de argumentos.

Exploits mal ajustados frequentemente causam crash (segmentation fault) do processo sudo/sudoedit antes de conseguir corromper o heap com sucesso — múltiplos core dumps ou crashes repetidos de sudoedit em curto intervalo, por um mesmo usuário não privilegiado, é um indicador razoável de tentativa de exploração, embora não seja prova definitiva nem cubra tentativas bem-sucedidas de primeira.

Investigado y redactado con IA a partir del advisory del fabricante y análisis públicos, con las fuentes citadas. Verifica siempre la versión corregida en el advisory oficial antes de actuar.
Sudo before 1.9.5p2 contains an off-by-one error that can result in a heap-based buffer overflow, which allows privilege escalation to root via "sudoedit -s" and a command-line argument that ends with a single backslash character.
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Productos afectados
n/a · n/a
PoCs públicas encontradas166
exploitdbwww.exploit-db.com/exploits/49521no verificadoexploitdbwww.exploit-db.com/exploits/49522no verificadogithubgithub.com/blasty/CVE-2021-31561020githubgithub.com/worawit/CVE-2021-3156804githubgithub.com/stong/CVE-2021-3156429githubgithub.com/LiveOverflow/pwnedit225githubgithub.com/Rvn0xsy/CVE-2021-3156-plus205githubgithub.com/CptGibbon/CVE-2021-3156158githubgithub.com/reverse-ex/CVE-2021-3156112githubgithub.com/0x4ndy/clif100githubgithub.com/0xdevil/CVE-2021-315651githubgithub.com/mbcrump/CVE-2021-315639githubgithub.com/mr-r3b00t/CVE-2021-315635githubgithub.com/PhuketIsland/CVE-2021-3156-centos730githubgithub.com/kernelzeroday/CVE-2021-3156-Baron-Samedit18githubgithub.com/redhawkeye/sudo-exploit17githubgithub.com/jm33-m0/CVE-2021-315616githubgithub.com/chenaotian/CVE-2021-315611githubgithub.com/Maalfer/Sudo-CVE-2021-31568githubgithub.com/PurpleOzone/PE_CVE-CVE-2021-31567githubgithub.com/1N53C/CVE-2021-3156-PoC7githubgithub.com/teamtopkarl/CVE-2021-31567githubgithub.com/apogiatzis/docker-CVE-2021-31567githubgithub.com/dinhbaouit/CVE-2021-31565githubgithub.com/Mhackiori/CVE-2021-31565githubgithub.com/yaunsky/cve-2021-31565githubgithub.com/baka9moe/CVE-2021-3156-Exp4githubgithub.com/lmol/CVE-2021-31564githubgithub.com/elbee-cyber/CVE-2021-3156-PATCHER3githubgithub.com/kal1gh0st/CVE-2021-31563githubgithub.com/ph4ntonn/CVE-2021-31563githubgithub.com/calonnuotcabe/CVE-2021-31562githubgithub.com/lypd0/CVE-2021-3156-checker2githubgithub.com/musergi/CVE-2021-31562githubgithub.com/Q4n/CVE-2021-31562githubgithub.com/unauth401/CVE-2021-31561githubgithub.com/RodricBr/CVE-2021-31561githubgithub.com/SantiagoSerrao/ScannerCVE-2021-31561githubgithub.com/donghyunlee00/CVE-2021-31561githubgithub.com/BearCat4/CVE-2021-31561githubgithub.com/TheFlash2k/CVE-2021-31561githubgithub.com/q77190858/CVE-2021-31561githubgithub.com/nobodyatall648/CVE-2021-31561githubgithub.com/DASICS-ICT/DASICS-CVE-2021-31561githubgithub.com/0x7183/CVE-2021-31561githubgithub.com/TheLeopard65/CVE-2021-3156-Baron-Samedit1githubgithub.com/binw2018/CVE-2021-3156-SCRIPT1githubgithub.com/Shuhaib88/Baron-Samedit-Heap-Buffer-Overflow-CVE-2021-31561githubgithub.com/hycheng15/CVE-2021-31560githubgithub.com/nexcess/sudo_cve-2021-31560githubgithub.com/ymrsmns/CVE-2021-31560githubgithub.com/freeFV/CVE-2021-31560githubgithub.com/Ashish-dawani/CVE-2021-3156-Patch0githubgithub.com/DanielAzulayy/CTF-20210githubgithub.com/cdeletre/Serpentiel-CVE-2021-31560githubgithub.com/perlun/sudo-1.8.3p1-patched0githubgithub.com/Exodusro/CVE-2021-31560githubgithub.com/sbladiamond/CVE-2021-31560githubgithub.com/d3c3ptic0n/CVE-2021-31560githubgithub.com/halissha/CVE-2021-31560githubgithub.com/sharkmoos/Baron-Samedit0githubgithub.com/asepsaepdin/CVE-2021-31560githubgithub.com/DDayLuong/CVE-2021-31560githubgithub.com/wurwur/CVE-2021-31560githubgithub.com/acidburn2049/CVE-2021-31560githubgithub.com/Bad3r/CVE-2021-3156-without-ip-command0githubgithub.com/Sebastianbedoya25/CVE-2021-31560githubgithub.com/czeti/baron-samedit0githubgithub.com/Sornphut/CVE-2021-3156-Heap-Based-Buffer-Overflow-in-Sudo-Baron-Samedit-0githubgithub.com/gmh5225/cve-2021-3156-0githubgithub.com/TopskiyPavelQwertyGang/Review.CVE-2021-31560githubgithub.com/HuzaifaTariqAfzalKhan/CVE-Exploit-Research-Development-ITSOLERA0githubgithub.com/VilmarTuminskii/cve-2021-3156-sudo-lab0githubgithub.com/DakerQirszh/cve-2021-31560githubgithub.com/Rana-Ali93/CVE-2021-3156-Sudo-Buffer-Overflow-Linux0githubgithub.com/Robblackcatchai/porfolio-Baron-Samedit0githubgithub.com/Kranti08/CVE-2021-3156-Baron-Samedit0githubgithub.com/IJBaig/CVE-2021-31560githubgithub.com/WhatsWrongAndWhy/CVE-2021-31560githubgithub.com/Shams-Ul-Mehmood/CVE-2021-3156-Project0githubgithub.com/gmldbd94/cve-2021-31560githubgithub.com/oneoy/CVE-2021-31560githubgithub.com/capturingcats/CVE-2021-31560githubgithub.com/ajtech-hue/CVE-2021-3156-Mitigation-ShellScript-Build0githubgithub.com/mutur4/CVE-2021-31560githubgithub.com/shishirpandey18/CVE-2021-31560githubgithub.com/Superliverbun/cve-2021-3156-0githubgithub.com/ngtuonghung/CVE-2021-31560githubgithub.com/arvindshima/CVE-2021-31560vulncheckvulncheck.com/xdb/3397f09dbbdcno verificadovulncheckvulncheck.com/xdb/f074c511a33bno verificadovulncheckvulncheck.com/xdb/d92fe7f1eb28no verificadovulncheckvulncheck.com/xdb/dc67aa8e60d4no verificadovulncheckvulncheck.com/xdb/956619acb26bno verificadovulncheckvulncheck.com/xdb/8486488deafeno verificadovulncheckvulncheck.com/xdb/9fbcde6203e1no verificadovulncheckvulncheck.com/xdb/3ee223200973no verificadovulncheckvulncheck.com/xdb/b72767d3ef0bno verificadovulncheckvulncheck.com/xdb/b2ee85cf4e76no verificadovulncheckvulncheck.com/xdb/ff18a04b19fbno verificadovulncheckvulncheck.com/xdb/8a16e063dbd5no verificadovulncheckvulncheck.com/xdb/dd12494d2728no verificadovulncheckvulncheck.com/xdb/1db9ceee140bno verificadovulncheckvulncheck.com/xdb/300797d10318no verificadovulncheckvulncheck.com/xdb/25def691895eno verificadovulncheckvulncheck.com/xdb/d818ae56992ano verificadovulncheckvulncheck.com/xdb/1e5a3258d388no verificadovulncheckvulncheck.com/xdb/33b2727e22e2no verificadovulncheckvulncheck.com/xdb/81c88fb24bd9no verificadovulncheckvulncheck.com/xdb/67522d547498no verificadovulncheckvulncheck.com/xdb/e63e0be85a72no verificadovulncheckvulncheck.com/xdb/6b4c5b3f6b0eno verificadovulncheckvulncheck.com/xdb/314b3ed04db3no verificadovulncheckvulncheck.com/xdb/73a26a137f38no verificadovulncheckvulncheck.com/xdb/c60ebdc30c29no verificadovulncheckvulncheck.com/xdb/0573a1989e58no verificadovulncheckvulncheck.com/xdb/1add099f19fcno verificadovulncheckvulncheck.com/xdb/6f8a62e9dc05no verificadovulncheckvulncheck.com/xdb/f80704f9c087no verificadovulncheckvulncheck.com/xdb/bdfb7b3c721cno verificadovulncheckvulncheck.com/xdb/84e3dea90796no verificadovulncheckvulncheck.com/xdb/12b9978dfd35no verificadovulncheckvulncheck.com/xdb/4e52e6bd25cfno verificadovulncheckvulncheck.com/xdb/791107725e9bno verificadovulncheckvulncheck.com/xdb/d82fe374addcno verificadovulncheckvulncheck.com/xdb/22cb903c9959no verificadovulncheckvulncheck.com/xdb/5cd3a38f312ano verificadovulncheckvulncheck.com/xdb/8f873fe619f2no verificadovulncheckvulncheck.com/xdb/98bc51c674a1no verificadovulncheckvulncheck.com/xdb/42c098e8e2ccno verificadovulncheckvulncheck.com/xdb/748cab143d91no verificadovulncheckvulncheck.com/xdb/664271a6cb02no verificadovulncheckvulncheck.com/xdb/1ded723ada65no verificadovulncheckvulncheck.com/xdb/b625d38ee231no verificadovulncheckvulncheck.com/xdb/de59d87d7443no verificadovulncheckvulncheck.com/xdb/cb038c4634e2no verificadovulncheckvulncheck.com/xdb/a36a6349c87bno verificadovulncheckvulncheck.com/xdb/a7e527112fb0no verificadovulncheckvulncheck.com/xdb/c5972ce378fcno verificadovulncheckvulncheck.com/xdb/94ac175265dbno verificadovulncheckvulncheck.com/xdb/c7646cc24cf1no verificadovulncheckvulncheck.com/xdb/20f15e46bf13no verificadovulncheckvulncheck.com/xdb/5fa314f8b37fno verificadovulncheckvulncheck.com/xdb/bfb260e80a93no verificadovulncheckvulncheck.com/xdb/c1fae139d5d4no verificadovulncheckvulncheck.com/xdb/e970e6dec7b1no verificadovulncheckvulncheck.com/xdb/a3fcd264aa62no verificadovulncheckvulncheck.com/xdb/172fcbe73544no verificadovulncheckvulncheck.com/xdb/750ce3551defno verificadovulncheckvulncheck.com/xdb/a2e62b6d17d1no verificadovulncheckvulncheck.com/xdb/f3a81abb3ba0no verificadovulncheckvulncheck.com/xdb/42c8e43d9038no verificadovulncheckvulncheck.com/xdb/45a30e5e36feno verificadovulncheckvulncheck.com/xdb/85981dac158cno verificadovulncheckvulncheck.com/xdb/64d475da2992no verificadovulncheckvulncheck.com/xdb/e559a5756f19no verificadovulncheckvulncheck.com/xdb/574e35cbc6bcno verificadovulncheckvulncheck.com/xdb/5fb557d581fano verificadovulncheckvulncheck.com/xdb/ac997bc9135dno verificadovulncheckvulncheck.com/xdb/c07ba8b1fa83no verificadovulncheckvulncheck.com/xdb/07e3d18545fbno verificadocve_referencepacketstormsecurity.com/files/161160/Sudo-Heap-Based-Buffer-Overflow.htmlno verificadocve_referencepacketstormsecurity.com/files/161230/Sudo-Buffer-Overflow-Privilege-Escalation.htmlno verificadocve_referencepacketstormsecurity.com/files/161270/Sudo-1.9.5p1-Buffer-Overflow-Privilege-Escalation.htmlno verificadocve_referencepacketstormsecurity.com/files/161293/Sudo-1.8.31p2-1.9.5p1-Buffer-Overflow.htmlno verificadocve_referencepacketstormsecurity.com/files/176932/glibc-syslog-Heap-Based-Buffer-Overflow.htmlno verificado
⚠ Recursos públicos, para evaluar la exposición de sistemas que controlas o estás autorizado a probar. Prueba solo con autorización.