Crate zip de Rust: escalada setuid tem correção na versão 9.0.5
A falha RUSTSEC-2026-0367 no crate zip de Rust (CVSS 7.3, corrigida em 9.0.0) faz o leitor copiar os bits setuid, setgid e sticky do ZIP sem mascará-los; um processo privilegiado que descompacta um arquivo malicioso planta um arquivo setuid-root. Nove dias depois, o mesmo crate divulgou a CVE-2026-115905, falha de "zip cloaking" com CVSS 10.0 em que scanner e extrator leem nomes de entrada diferentes, permitindo sobrescrever arquivos e virar execução remota de código. A versão 9.0.5 corrige as duas falhas; o writeup da Cosmonic recomenda atualizar hoje e isolar a extração de ZIPs não confiáveis.
O que aconteceu
Um writeup da Cosmonic detalhou duas falhas no crate zip de Rust, uma das bibliotecas mais usadas para abrir arquivos .zip na linguagem. A primeira (CVSS 7.3) planta arquivos com privilégios elevados quando um processo privilegiado descompacta um ZIP malicioso. A segunda (CVSS 10.0), divulgada nove dias depois, permite sobrescrever arquivos do sistema e executar código.
Por que importa
Serviços que recebem e extraem uploads de usuários estão expostos, especialmente os que rodam como root: um upload malicioso pode criar um arquivo setuid-root no servidor. Com a segunda falha, o arquivo pode sobrescrever configurações e scripts de inicialização e virar execução remota de código.
O que fazer
Atualizar o crate zip para a versão 9.0.5, que corrige as duas falhas. Revisar onde ZIPs não confiáveis são extraídos e rodar essa extração sem root, em sandbox deny-by-default.
Para o time técnico
- CVE
- CVE-2026-115995
- Afetados
- Projeto zip (Rust) zip (biblioteca de manipulação de arquivos ZIP em Rust) · Crate zip em versões até 9.0.0-pre3 (falha 1). A fonte não lista o intervalo de versões da falha 2 (CVE-2026-115905).
- Exploração
- Sem exploração relatada nas fontes. O writeup da Cosmonic, publicado no r/netsec, demonstra as falhas de forma não weaponizada: archives com arquivos de texto inertes, sem executável nem escalada de privilégio real.
- Correção
- Falha 1 corrigida a partir de zip 9.0.0; a versão 9.0.5 corrige as duas falhas e é a recomendada para fixar. Mitigação complementar: extrair ZIPs não confiáveis sem root e em sandbox deny-by-default.
- Vetor
- Crate zip de Rust. Falha 1 (RUSTSEC-2026-0367, CWE-732): o leitor copia os bits setuid, setgid e sticky da entrada do ZIP na extração, sem mascará-los; o escritor mascara com & 0o777. Condição: um processo privilegiado (uploader de formulário, instalador, job de CI/CD, build de container como root) descompactar um ZIP criado pelo atacante, plantando arquivo setuid-root. Falha 2 (CVE-2026-115905): o ZipArchive confia no diretório central e o read_zipfile_from_stream confia no cabeçalho local, sem reconciliação; o scanner vê um nome e o extrator outro, permitindo sobrescrever arquivo arbitrário e virar RCE.
- Mais detalhes
- RUSTSEC-2026-0367 = GHSA-vv5m-jxxh-4627, CVSS 7.3 (high). CVE-2026-115905 = GHSA-m665-v7pm-7grj, CVSS 10.0 (critical), divulgada nove dias depois da primeira; os bugs não são relacionados entre si. Exemplo do writeup: o diretório central diz release-notes.txt e o cabeçalho local diz config/app.conf. Tese do texto: linguagens memory-safe como Rust não bastam e um sandbox deny-by-default com capabilities contém RCE mesmo em código sem correção.
Linha do tempo
Writeup publicado em r/netsec detalha a falha e a defesa por sandbox.


