← voltar
CVE-2023-28434highsob ataqueCWE-269

MinIO is vulnerable to privilege escalation on Linux/MacOS

76Vexday Risk Score

Priorize a correção. Ela está sob exploração confirmada pelo CISA e tem prova de conceito pública.

ssvc Actcvss 8.8epss 6.7%
da publicação à arma1 dias
Publicada no NVD22 de mar.
1ª PoC+1d
CISA KEV+181d
probabilidade de exploração
6.7%top 7% das CVEs
exploração observada
simCISA + VulnCheck
3 exploit(s) público(s)
Ação exigida pela CISAprazo federal: 2023-10-10

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

Resumo

Falha de bypass de controle de acesso no MinIO (framework de object storage multi-cloud) que permite a um usuário autenticado escrever objetos em qualquer bucket, incluindo buckets internos/reservados do sistema, ao abusar do endpoint PostPolicyBucket. O CVSS 8.8 é alto, mas a exploração exige duas pré-condições específicas — credenciais com permissão `arn:aws:s3:::*` e Console/Browser API habilitado — que reduzem a superfície real de exposição, ainda que não sejam raras em ambientes que usam políticas amplas.

Detalhamento técnico

O MinIO usa um handler central, `setRequestValidityHandler` (cmd/generic-handlers.go), para bloquear acesso a buckets reservados e ao bucket de metadados interno (`.minio.sys`). Esse bloqueio é liberado seletivamente para certos tipos de requisição legítimos — chamadas RPC internas, health checks, métricas, requisições admin/KMS e requisições de browser (`guessIsBrowserReq`). O problema é que o roteamento do endpoint `PostPolicyBucket` (upload via formulário multipart, usado por navegadores e integrações) usava, antes da correção, um casamento frouxo de Content-Type (`strings.Contains` com o substring "multipart/form-data") em vez de validar a assinatura AWS Signature V4 do PostPolicy propriamente. Essa inconsistência entre a lógica de roteamento e a lógica de verificação de bucket reservado abria uma janela: uma requisição craftada podia ser roteada para o handler de PostPolicy e, ao mesmo tempo, ser classificada de forma a escapar da checagem de `isMinioReservedBucket`/`isMinioMetaBucket`.

O resultado prático é a possibilidade de o atacante enviar um objeto para qualquer bucket do namespace, inclusive o bucket de metadados do sistema, driblando a checagem de nome de bucket que deveria impedir escrita fora do escopo autorizado. A CISA classifica isso como CWE-269 (Improper Privilege Management / gerenciamento inadequado de privilégios) — o mecanismo de restrição existe, mas é aplicado de forma inconsistente entre duas camadas do código (roteador HTTP e verificador de assinatura).

A correção (PR #16849, commit 67f4ba1) resolve o problema em duas frentes: o roteador passa a exigir explicitamente que a requisição tenha uma assinatura PostPolicy V4 válida (`isRequestPostPolicySignatureV4`) para ser despachada ao handler, e essa própria função de verificação passa a usar `mime.ParseMediaType` para comparar o media type de forma exata (`multipart/form-data`), em vez de uma verificação de substring que podia ser manipulada com variações de Content-Type.

Como é explorada

O vetor é uma requisição HTTP POST multipart/form-data para o endpoint de PostPolicy, manipulando o Content-Type e/ou o nome do bucket de destino de forma a explorar a divergência entre o roteador e a checagem de bucket reservado, conseguindo depositar um objeto em um bucket que deveria estar bloqueado — incluindo o bucket interno de metadados. Não é uma falha pré-autenticação: o atacante precisa de credenciais válidas no MinIO cuja política conceda `arn:aws:s3:::*` (acesso amplo, tipo wildcard sobre todos os buckets), e a instância precisa ter a API de Console/Browser habilitada (ou seja, `MINIO_BROWSER` não configurado como `off`).

Dado que muitas implantações mantêm o console web ativo por padrão e que políticas com wildcard `s3:::*` são comuns em contas de serviço com propósito genérico, a barreira prática de exploração é mais baixa do que a redação da CVE sugere isoladamente — mas ainda exige que o atacante já tenha pé dentro do ambiente com algum nível de credencial válida, não é acesso anônimo.

O impacto final depende do que o atacante consegue sobrescrever ao escrever no namespace interno: potencialmente configuração, políticas IAM ou outros artefatos de estado do servidor, abrindo caminho para escalação de privilégio dentro do próprio MinIO. A CVE está no catálogo KEV da CISA (adicionada em 19/09/2023, prazo de remediação 10/10/2023), confirmando exploração ativa observada, e há PoC pública circulando — mas a CISA não classifica uso conhecido em campanhas de ransomware ('Unknown').

Versões

Afetadas
Todas as versões do MinIO anteriores a RELEASE.2023-03-20T20-16-18Z (advisory do fornecedor lista 'Affected versions: all').
Corrigidas em
RELEASE.2023-03-20T20-16-18Z e versões posteriores.

Como se proteger

Atualizar para RELEASE.2023-03-20T20-16-18Z ou posterior é a correção definitiva — o patch ajusta tanto o roteamento quanto a validação de Content-Type do PostPolicy. Não há indicação de backport para ramos antigos: o MinIO segue versionamento único por data de release, sem branches LTS separados.

Se a atualização não for imediata, o controle compensatório documentado pelo fornecedor é desabilitar a API de Console/Browser (`MINIO_BROWSER=off`), já que a exploração depende dela estar habilitada. Isso reduz a superfície de ataque mas tem custo funcional: remove o acesso ao console web de administração, forçando uso exclusivo de linha de comando (`mc`) ou SDKs. Vale notar que a redação do texto oficial sobre o workaround é ambígua/contraditória ('enable browser API access and turn off MINIO_BROWSER=off'); a leitura consistente com a pré-condição descrita na própria vulnerabilidade é desabilitar o Console (setar `MINIO_BROWSER=off`), não habilitá-lo.

Revisar e restringir políticas IAM que concedem `arn:aws:s3:::*` também reduz a exposição, já que essa permissão amplíssima é pré-requisito do ataque — não é mitigação contra a falha em si, mas reduz o número de identidades capazes de explorá-la. Restringir Content-Type ou bloquear multipart/form-data em um proxy reverso na frente do MinIO não é uma mitigação confiável, pois a falha está na lógica de roteamento interna do próprio binário, não em algo filtrável de forma genérica sem entender a assinatura V4 esperada.

Como detectar

Nos logs de acesso do MinIO, procurar por requisições POST com Content-Type multipart/form-data direcionadas a nomes de bucket reservados/internos (ex.: variações relacionadas a `.minio.sys`) ou por chamadas ao endpoint de PostPolicyBucket vindas de credenciais com política `arn:aws:s3:::*` fora do padrão normal de upload via console. Vale também auditar criação de objetos inesperados dentro do namespace de metadados do sistema.

Não há assinatura de rede única e confiável para essa exploração, porque o abuso ocorre inteiramente dentro da lógica de validação HTTP do próprio MinIO usando um formato de requisição legítimo (multipart/form-data assinado); a diferenciação entre uso normal e exploração depende de correlacionar o bucket de destino com a política do usuário autenticado, não do payload em si.

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.
Minio is a Multi-Cloud Object Storage framework. Prior to RELEASE.2023-03-20T20-16-18Z, an attacker can use crafted requests to bypass metadata bucket name checking and put an object into any bucket while processing `PostPolicyBucket`. To carry out this attack, the attacker requires credentials with `arn:aws:s3:::*` permission, as well as enabled Console API access. This issue has been patched in RELEASE.2023-03-20T20-16-18Z. As a workaround, enable browser API access and turn off `MINIO_BROWSER=off`.
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Produtos afetados
minio · minio
⚠ Recursos públicos, para você avaliar a exposição de sistemas que controla ou está autorizado a testar. Teste apenas com autorização.