ASA-2019-00273 – Singularity: Escalação de privilégios no namespace e corrupção arbitrária de arquivos


For the English version of this alert, click here.

Allele Security Alert

ASA-2019-00273

Identificador(es)

ASA-2019-00273, CVE-2019-11328

Título

Escalação de privilégios no namespace e corrupção arbitrária de arquivos

Fabricante(s)

Sylabs

Produto(s)

Singularity

Versão(ões) afetada(s)

Singularity versões 3.1.0 anterior a 3.2.0

Versão(ões) corrigida(s)

Singularity versão 3.2.0

Prova de conceito

Desconhecido

Descrição

Um usuário mal-intencionado com acesso local/de rede ao sistema host (por exemplo, ssh) poderia explorar esta vulnerabilidade devido a permissões inseguras que permitem que um usuário edite arquivos em /run/singularity/instances/sing/<user>/<instance>. A manipulação desses arquivos pode alterar o comportamento do programa starter-suid quando as instâncias são associadas, resultando em possível escalação de privilégios no host.

Detalhes técnicos

Singularity 3 usa um programa root setuid chamado `starter-suid` para configurar contêineres do Singularity. A questão é que os contêineres são executados como instâncias de segundo plano, obtendo permissões de diretório ruins no caminho `/run/singularity/instances/sing/<user>/<instance>`. A permissão desses diretórios é definida como “<user>:root” com o modo 0550. Como o usuário não privilegiado é o proprietário do diretório, ele pode alterar o modo para valores arbitrários e, portanto, também o conteúdo do diretório para conteúdo arbitrário.

Um resultado disso é que os links simbólicos podem ser colocados no subdiretório `ns` que será seguido ao juntar a instância do contêiner e assim permitir que usuários não privilegiados entrem em namespaces arbitrários mnt, pid, net, cgroup, uts e ipc. Apenas namespaces de usuário (user namespaces) não podem ser combinado, porque o binário `starter-suid` se recusa a usar namespaces de usuário ao executar no contexto setuid. (`starter-suid` também contém lógica que é destinada apenas para uso quando o programa não carrega um bit root setuid).

Além disso, como o programa `starter-suid` confia no conteúdo do arquivo de configuração JSON encontrado no diretório da instância, um atacante pode modificar esse conteúdo para alterar o comportamento do programa` starter-suid` ao entrar em um contêiner. Desta forma, todos os namespaces desejados podem ser configurados ou até mesmo o campo `noNewPrivileges` pode ser configurado para false, permitindo que um usuário entre no container sem o conjunto de bits `PR_SET_NO_NEW_PRIVS` (veja `prctl ()`).

Ainda mais, durante a criação de uma instância em segundo plano, o usuário não privilegiado pode tentar ganhar uma condição de corrida e colocar um link simbólico no caminho `/run/singularity/instances/sing/<user>/<instance>/<instance>.json`. O programa `starter-suid` seguirá este link simbólico e criará e truncará um arquivo existente no local de destino. Isso permite criar ou sobrescrever arquivos arbitrários no sistema com privilégios de root. O conteúdo gravado no arquivo é apenas parcialmente controlado pelo atacante, porque o início do JSON tem uma estrutura fixa.

Créditos

Desconhecido

Referência(s)

Singularity 3.2.0
https://github.com/sylabs/singularity/releases/tag/v3.2.0

Singularity 3.1.0: CVE-2019-11328: namespace privilege escalation and arbitrary file corruption
https://seclists.org/oss-sec/2019/q2/112

Fix instance directory permission for privacy and exit when container instance doesn’t contain processes
https://github.com/sylabs/singularity/commit/b4dcb0e4d77baa1c7647a4a5705ea824bb4e0dca

CVE-2019-11328.diff
https://repo.sylabs.io/security/2019/CVE-2019-11328.diff

CVE-2019-11328
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-11328

CVE-2019-11328
https://nvd.nist.gov/vuln/detail/CVE-2019-11328

 

Se encontrou algum erro neste alerta ou deseja uma análise compreensiva, entre em contato.

Última modificação: 5 agosto 2019

Não somos responsáveis por qualquer perda de dados, corrupção de dispositivos ou qualquer outro tipo de problema devido ao uso de qualquer informação mencionada em nossos alertas de segurança.