← back
CVE-2021-3156highunder attackCWE-193

CVE-2021-3156

100Vexday Risk Score

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

ssvc Actcvss 7.8epss 99%
from disclosure to weapon0 days
Published on NVDJan 26
1st PoCJan 26
metasploitJan 26
CISA KEV+435d
exploitation probability
99%top 1% of all CVEs
observed exploitation
yesCISA + VulnCheck
166 public exploit(s)
Action required by CISAfederal deadline: 2022-04-27

Apply updates per vendor instructions.

Summary

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.

Technical detail

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.

How it’s exploited

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).

Versions

Affected
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).
Fixed in
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.

How to protect

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.

How to detect

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.

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.
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
Affected products
n/a · n/a
public PoCs found166
exploitdbwww.exploit-db.com/exploits/49521unverifiedexploitdbwww.exploit-db.com/exploits/49522unverifiedgithubgithub.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/3397f09dbbdcunverifiedvulncheckvulncheck.com/xdb/f074c511a33bunverifiedvulncheckvulncheck.com/xdb/d92fe7f1eb28unverifiedvulncheckvulncheck.com/xdb/dc67aa8e60d4unverifiedvulncheckvulncheck.com/xdb/956619acb26bunverifiedvulncheckvulncheck.com/xdb/8486488deafeunverifiedvulncheckvulncheck.com/xdb/9fbcde6203e1unverifiedvulncheckvulncheck.com/xdb/3ee223200973unverifiedvulncheckvulncheck.com/xdb/b72767d3ef0bunverifiedvulncheckvulncheck.com/xdb/b2ee85cf4e76unverifiedvulncheckvulncheck.com/xdb/ff18a04b19fbunverifiedvulncheckvulncheck.com/xdb/8a16e063dbd5unverifiedvulncheckvulncheck.com/xdb/dd12494d2728unverifiedvulncheckvulncheck.com/xdb/1db9ceee140bunverifiedvulncheckvulncheck.com/xdb/300797d10318unverifiedvulncheckvulncheck.com/xdb/25def691895eunverifiedvulncheckvulncheck.com/xdb/d818ae56992aunverifiedvulncheckvulncheck.com/xdb/1e5a3258d388unverifiedvulncheckvulncheck.com/xdb/33b2727e22e2unverifiedvulncheckvulncheck.com/xdb/81c88fb24bd9unverifiedvulncheckvulncheck.com/xdb/67522d547498unverifiedvulncheckvulncheck.com/xdb/e63e0be85a72unverifiedvulncheckvulncheck.com/xdb/6b4c5b3f6b0eunverifiedvulncheckvulncheck.com/xdb/314b3ed04db3unverifiedvulncheckvulncheck.com/xdb/73a26a137f38unverifiedvulncheckvulncheck.com/xdb/c60ebdc30c29unverifiedvulncheckvulncheck.com/xdb/0573a1989e58unverifiedvulncheckvulncheck.com/xdb/1add099f19fcunverifiedvulncheckvulncheck.com/xdb/6f8a62e9dc05unverifiedvulncheckvulncheck.com/xdb/f80704f9c087unverifiedvulncheckvulncheck.com/xdb/bdfb7b3c721cunverifiedvulncheckvulncheck.com/xdb/84e3dea90796unverifiedvulncheckvulncheck.com/xdb/12b9978dfd35unverifiedvulncheckvulncheck.com/xdb/4e52e6bd25cfunverifiedvulncheckvulncheck.com/xdb/791107725e9bunverifiedvulncheckvulncheck.com/xdb/d82fe374addcunverifiedvulncheckvulncheck.com/xdb/22cb903c9959unverifiedvulncheckvulncheck.com/xdb/5cd3a38f312aunverifiedvulncheckvulncheck.com/xdb/8f873fe619f2unverifiedvulncheckvulncheck.com/xdb/98bc51c674a1unverifiedvulncheckvulncheck.com/xdb/42c098e8e2ccunverifiedvulncheckvulncheck.com/xdb/748cab143d91unverifiedvulncheckvulncheck.com/xdb/664271a6cb02unverifiedvulncheckvulncheck.com/xdb/1ded723ada65unverifiedvulncheckvulncheck.com/xdb/b625d38ee231unverifiedvulncheckvulncheck.com/xdb/de59d87d7443unverifiedvulncheckvulncheck.com/xdb/cb038c4634e2unverifiedvulncheckvulncheck.com/xdb/a36a6349c87bunverifiedvulncheckvulncheck.com/xdb/a7e527112fb0unverifiedvulncheckvulncheck.com/xdb/c5972ce378fcunverifiedvulncheckvulncheck.com/xdb/94ac175265dbunverifiedvulncheckvulncheck.com/xdb/c7646cc24cf1unverifiedvulncheckvulncheck.com/xdb/20f15e46bf13unverifiedvulncheckvulncheck.com/xdb/5fa314f8b37funverifiedvulncheckvulncheck.com/xdb/bfb260e80a93unverifiedvulncheckvulncheck.com/xdb/c1fae139d5d4unverifiedvulncheckvulncheck.com/xdb/e970e6dec7b1unverifiedvulncheckvulncheck.com/xdb/a3fcd264aa62unverifiedvulncheckvulncheck.com/xdb/172fcbe73544unverifiedvulncheckvulncheck.com/xdb/750ce3551defunverifiedvulncheckvulncheck.com/xdb/a2e62b6d17d1unverifiedvulncheckvulncheck.com/xdb/f3a81abb3ba0unverifiedvulncheckvulncheck.com/xdb/42c8e43d9038unverifiedvulncheckvulncheck.com/xdb/45a30e5e36feunverifiedvulncheckvulncheck.com/xdb/85981dac158cunverifiedvulncheckvulncheck.com/xdb/64d475da2992unverifiedvulncheckvulncheck.com/xdb/e559a5756f19unverifiedvulncheckvulncheck.com/xdb/574e35cbc6bcunverifiedvulncheckvulncheck.com/xdb/5fb557d581faunverifiedvulncheckvulncheck.com/xdb/ac997bc9135dunverifiedvulncheckvulncheck.com/xdb/c07ba8b1fa83unverifiedvulncheckvulncheck.com/xdb/07e3d18545fbunverifiedcve_referencepacketstormsecurity.com/files/161160/Sudo-Heap-Based-Buffer-Overflow.htmlunverifiedcve_referencepacketstormsecurity.com/files/161230/Sudo-Buffer-Overflow-Privilege-Escalation.htmlunverifiedcve_referencepacketstormsecurity.com/files/161270/Sudo-1.9.5p1-Buffer-Overflow-Privilege-Escalation.htmlunverifiedcve_referencepacketstormsecurity.com/files/161293/Sudo-1.8.31p2-1.9.5p1-Buffer-Overflow.htmlunverifiedcve_referencepacketstormsecurity.com/files/176932/glibc-syslog-Heap-Based-Buffer-Overflow.htmlunverified
⚠ Public resources, to assess the exposure of systems you control or are authorized to test. Test only with authorization.