← voltar
CVE-2021-3156highsob ataqueCWE-193

CVE-2021-3156

100Vexday Risk Score

Corrija agora. Ela está sob exploração confirmada pelo CISA e tem exploit funcional público.

ssvc Actcvss 7.8epss 99%
da publicação à arma0 dias
Publicada no NVD26 de jan.
1ª PoC26 de jan.
metasploit26 de jan.
CISA KEV+435d
probabilidade de exploração
99%top 1% das CVEs
exploração observada
simCISA + VulnCheck
164 exploit(s) público(s)
Ação exigida pela CISAprazo federal: 2022-04-27

Apply updates per vendor instructions.

Resumo

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.

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

Como é explorada

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

Versões

Afetadas
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).
Corrigidas em
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.

Como se proteger

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.

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

Pesquisado e redigido com IA a partir do advisory do fornecedor e de análises públicas, com as fontes acima. Confira sempre a versão corrigida no advisory oficial antes de agir.
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
Produtos afetados
n/a · n/a
PoCs públicas encontradas164
exploitdbwww.exploit-db.com/exploits/49522não verificadoexploitdbwww.exploit-db.com/exploits/49521não verificadogithubgithub.com/blasty/CVE-2021-31561017githubgithub.com/worawit/CVE-2021-3156801githubgithub.com/stong/CVE-2021-3156430githubgithub.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/apogiatzis/docker-CVE-2021-31567githubgithub.com/PurpleOzone/PE_CVE-CVE-2021-31567githubgithub.com/1N53C/CVE-2021-3156-PoC7githubgithub.com/teamtopkarl/CVE-2021-31567githubgithub.com/dinhbaouit/CVE-2021-31565githubgithub.com/yaunsky/cve-2021-31565githubgithub.com/Mhackiori/CVE-2021-31565githubgithub.com/lmol/CVE-2021-31564githubgithub.com/baka9moe/CVE-2021-3156-Exp4githubgithub.com/ph4ntonn/CVE-2021-31563githubgithub.com/kal1gh0st/CVE-2021-31563githubgithub.com/elbee-cyber/CVE-2021-3156-PATCHER3githubgithub.com/Q4n/CVE-2021-31562githubgithub.com/musergi/CVE-2021-31562githubgithub.com/calonnuotcabe/CVE-2021-31562githubgithub.com/lypd0/CVE-2021-3156-checker2githubgithub.com/SantiagoSerrao/ScannerCVE-2021-31561githubgithub.com/nobodyatall648/CVE-2021-31561githubgithub.com/TheLeopard65/CVE-2021-3156-Baron-Samedit1githubgithub.com/BearCat4/CVE-2021-31561githubgithub.com/DASICS-ICT/DASICS-CVE-2021-31561githubgithub.com/donghyunlee00/CVE-2021-31561githubgithub.com/TheFlash2k/CVE-2021-31561githubgithub.com/binw2018/CVE-2021-3156-SCRIPT1githubgithub.com/q77190858/CVE-2021-31561githubgithub.com/RodricBr/CVE-2021-31561githubgithub.com/unauth401/CVE-2021-31561githubgithub.com/0x7183/CVE-2021-31561githubgithub.com/ngtuonghung/CVE-2021-31560githubgithub.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/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/gmldbd94/cve-2021-31560githubgithub.com/oneoy/CVE-2021-31560githubgithub.com/capturingcats/CVE-2021-31560githubgithub.com/ajtech-hue/CVE-2021-3156-Mitigation-ShellScript-Build0githubgithub.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/arvindshima/CVE-2021-31560githubgithub.com/hycheng15/CVE-2021-31560githubgithub.com/mutur4/CVE-2021-31560githubgithub.com/Sebastianbedoya25/CVE-2021-31560githubgithub.com/czeti/baron-samedit0githubgithub.com/Sornphut/CVE-2021-3156-Heap-Based-Buffer-Overflow-in-Sudo-Baron-Samedit-0githubgithub.com/shishirpandey18/CVE-2021-31560githubgithub.com/Shuhaib88/Baron-Samedit-Heap-Buffer-Overflow-CVE-2021-31560githubgithub.com/Superliverbun/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/ymrsmns/CVE-2021-31560githubgithub.com/nexcess/sudo_cve-2021-31560vulncheckvulncheck.com/xdb/3397f09dbbdcnão verificadovulncheckvulncheck.com/xdb/f074c511a33bnão verificadovulncheckvulncheck.com/xdb/d92fe7f1eb28não verificadovulncheckvulncheck.com/xdb/dc67aa8e60d4não verificadocve_referencepacketstormsecurity.com/files/161160/Sudo-Heap-Based-Buffer-Overflow.htmlnão verificadocve_referencepacketstormsecurity.com/files/161230/Sudo-Buffer-Overflow-Privilege-Escalation.htmlnão verificadocve_referencepacketstormsecurity.com/files/161270/Sudo-1.9.5p1-Buffer-Overflow-Privilege-Escalation.htmlnão verificadocve_referencepacketstormsecurity.com/files/161293/Sudo-1.8.31p2-1.9.5p1-Buffer-Overflow.htmlnão verificadocve_referencepacketstormsecurity.com/files/176932/glibc-syslog-Heap-Based-Buffer-Overflow.htmlnão verificadovulncheckvulncheck.com/xdb/956619acb26bnão verificadovulncheckvulncheck.com/xdb/8486488deafenão verificadovulncheckvulncheck.com/xdb/9fbcde6203e1não verificadovulncheckvulncheck.com/xdb/3ee223200973não verificadovulncheckvulncheck.com/xdb/b72767d3ef0bnão verificadovulncheckvulncheck.com/xdb/b2ee85cf4e76não verificadovulncheckvulncheck.com/xdb/ff18a04b19fbnão verificadovulncheckvulncheck.com/xdb/8a16e063dbd5não verificadovulncheckvulncheck.com/xdb/dd12494d2728não verificadovulncheckvulncheck.com/xdb/1db9ceee140bnão verificadovulncheckvulncheck.com/xdb/300797d10318não verificadovulncheckvulncheck.com/xdb/25def691895enão verificadovulncheckvulncheck.com/xdb/d818ae56992anão verificadovulncheckvulncheck.com/xdb/1e5a3258d388não verificadovulncheckvulncheck.com/xdb/33b2727e22e2não verificadovulncheckvulncheck.com/xdb/81c88fb24bd9não verificadovulncheckvulncheck.com/xdb/67522d547498não verificadovulncheckvulncheck.com/xdb/e63e0be85a72não verificadovulncheckvulncheck.com/xdb/6b4c5b3f6b0enão verificadovulncheckvulncheck.com/xdb/314b3ed04db3não verificadovulncheckvulncheck.com/xdb/73a26a137f38não verificadovulncheckvulncheck.com/xdb/c60ebdc30c29não verificadovulncheckvulncheck.com/xdb/0573a1989e58não verificadovulncheckvulncheck.com/xdb/1add099f19fcnão verificadovulncheckvulncheck.com/xdb/6f8a62e9dc05não verificadovulncheckvulncheck.com/xdb/f80704f9c087não verificadovulncheckvulncheck.com/xdb/bdfb7b3c721cnão verificadovulncheckvulncheck.com/xdb/84e3dea90796não verificadovulncheckvulncheck.com/xdb/12b9978dfd35não verificadovulncheckvulncheck.com/xdb/4e52e6bd25cfnão verificadovulncheckvulncheck.com/xdb/791107725e9bnão verificadovulncheckvulncheck.com/xdb/d82fe374addcnão verificadovulncheckvulncheck.com/xdb/22cb903c9959não verificadovulncheckvulncheck.com/xdb/5cd3a38f312anão verificadovulncheckvulncheck.com/xdb/8f873fe619f2não verificadovulncheckvulncheck.com/xdb/98bc51c674a1não verificadovulncheckvulncheck.com/xdb/42c098e8e2ccnão verificadovulncheckvulncheck.com/xdb/748cab143d91não verificadovulncheckvulncheck.com/xdb/664271a6cb02não verificadovulncheckvulncheck.com/xdb/1ded723ada65não verificadovulncheckvulncheck.com/xdb/b625d38ee231não verificadovulncheckvulncheck.com/xdb/de59d87d7443não verificadovulncheckvulncheck.com/xdb/cb038c4634e2não verificadovulncheckvulncheck.com/xdb/a36a6349c87bnão verificadovulncheckvulncheck.com/xdb/a7e527112fb0não verificadovulncheckvulncheck.com/xdb/c5972ce378fcnão verificadovulncheckvulncheck.com/xdb/94ac175265dbnão verificadovulncheckvulncheck.com/xdb/c7646cc24cf1não verificadovulncheckvulncheck.com/xdb/20f15e46bf13não verificadovulncheckvulncheck.com/xdb/5fa314f8b37fnão verificadovulncheckvulncheck.com/xdb/bfb260e80a93não verificadovulncheckvulncheck.com/xdb/c1fae139d5d4não verificadovulncheckvulncheck.com/xdb/e970e6dec7b1não verificadovulncheckvulncheck.com/xdb/a3fcd264aa62não verificadovulncheckvulncheck.com/xdb/172fcbe73544não verificadovulncheckvulncheck.com/xdb/750ce3551defnão verificadovulncheckvulncheck.com/xdb/a2e62b6d17d1não verificadovulncheckvulncheck.com/xdb/f3a81abb3ba0não verificadovulncheckvulncheck.com/xdb/42c8e43d9038não verificadovulncheckvulncheck.com/xdb/45a30e5e36fenão verificadovulncheckvulncheck.com/xdb/85981dac158cnão verificadovulncheckvulncheck.com/xdb/64d475da2992não verificadovulncheckvulncheck.com/xdb/e559a5756f19não verificadovulncheckvulncheck.com/xdb/574e35cbc6bcnão verificadovulncheckvulncheck.com/xdb/5fb557d581fanão verificadovulncheckvulncheck.com/xdb/ac997bc9135dnão verificadovulncheckvulncheck.com/xdb/c07ba8b1fa83não verificadovulncheckvulncheck.com/xdb/07e3d18545fbnão verificado
⚠ Recursos públicos, para você avaliar a exposição de sistemas que controla ou está autorizado a testar. Teste apenas com autorização.