Translated message

A translation of this page exists in English.

On-entry container attack - CVE-2016-9962

Public Date: January 11, 2017, 12:00 am
Updated -
Ongoing Status
Moderate Impact

Foi encontrada uma vulnerabilidade na entrada do container no docker e foi atribuída CVE-2016-9962. A falha aborda um ataque específico que usa ptrace e descarrega indevidamente descritores de arquivo para obter acesso ao conteúdo fora de um contêiner. Esse ataque é apenas um risco ao executar contêineres privilegiados e é mitigado pelo SELinux.

Este problema foi divulgado publicamente em 10 de janeiro de 2017.

Informações gerais

Esta vulnerabilidade surge quando um processo que normalmente seria executado em um namespace é lançado ou movido para um namespace diferente. Namespaces normalmente agem como mecanismo de segurança porque processos dentro namespaces diferentes não podem ver ou manipular um ao outro. O problema é quando um processo é movido para um namespace, ele fica exposto a ações maliciosas de processos que já estão naquele namespace. Vulnerabilidades de entrada atacam processos que juntam-se a containers via nsenter ou docker exec . Um ataque bem-sucedido pode resultar em um processo malicioso que gera acesso ao sistema ou outros privilégios.

Por exemplo, se um processo malicioso tomou conta de um container e conseguiu obter raiz dentro desse contêiner, o processo malicioso pode matar qualquer outro processo que ele possa "ver". Felizmente, o namespacing de contêiner evita que o processo malicioso possa detectar ou matar qualquer processo de host ou qualquer um dos processos em outros containers. No entanto, se um administrador tentar investigar o problema nsenter para mover um shell para o contêiner com mau comportamento, o processo malicioso pode ver e manipular esse shell também (e terminá-lo).

Funcionalidades Linux vulneráveis

As seguintes funcionalidades legítimas do Linux podem ser usadas indevidamente em ataques na entrada. Use mecanismos de segurança Linux, como SELinux e seccomp para evitar to prevent sua exploração.

  • ptrace
    "Process trace" ou ptrace é uma recurso de depuração poderoso que está disponível em Linux. Qualquer processo com permissões adequadas pode ptrace outro processo através da chamada ptrace kernel. ptrace Concede acesso de nível extremamente baixo ao processo, incluindo sua memória, recursos (como descritores de arquivo) e a capacidade de interceptar chamadas de processo de kernel.
  • docker exec
    docker exec é um serviço fornecido pelo daemon do docker que permite que um processo adicional seja lançado dentro de um contêiner existente. Isso é freqüentemente usado para inspecionar ou fazer alterações manuais ao contêiner. Por exemplo, para iniciar um bash shell dentro de um contêiner de mau comportamento para depurar seu comportamento, você pode usar:
    docker exec -it container-name /bin/bash
  • nsenter
    nsenter é um utilitário Linux usado para mover ou iniciar processos dentro de namespaces específicos. Como os contêineres são criados em namespaces Linux, nsenter pode ser usado como uma versão mais genérica de docker exec .
  • funcionalidades de kernel
    no Linux, os poderes especiais tradicionalmente concedidos à conta raiz foram divididos em capacidades individuais e alguns concedem mais de um poder administrativo. Por exemplo, CAP_SYS_TIME concede somente a habilidade de definir o relógio do sistema. CAP_SYS_ADMIN , por outro lado, concede uma variedade de poderes necessários para administrar uma máquina. Cada capacidade do kernel pode ser concedida ou negada a um processo individualmente.
  • seccomp
    A funcionalidade seccomp Linux permite acesso às chamadas de kernel calls numa base individual.

A Red Hat Product Security classificou esta atualização como tendo um impacto de segurança Moderado .

Produtos Impactados

As seguintes versões dos produtos Red Hat estão impactadas:

  • Red Hat Enterprise Linux 7
  • Red Hat Openshift Container Platform
  • RHEL Atomic Host

Impacto

A falha em CVE-2016-9962 ocorre porque falta um mecanismo de segurança a partir do docker exec .

Até o docker upstream 1.12.6, os processos que docker exec lançou puderam ser ptrace dentro do contêiner e mantiveram brevemente seus descritores de arquivo, que estavam ligados a conteúdo fora do contêiner. Isto poderia ser explorado por um processo dentro de um contêiner com habilidades ptrace. Se um processo malicioso agisse com rapidez suficiente, poderia ptrace o processo de entrada e obter acesso ao conteúdo fora do contêiner. Isto foi abordado no docker 1.12.6, impedindo que fizesse o `ptrace`destes processos (através dos atributos de processo DUMPABLE) e por ter processos de entrada liberar seus descritores de arquivo antes de serem movidos.

Mesmo sem o backport, a maioria das instalações não estão em risco:

  • O tempo de execução do docker suprime os contêineres de muitos recursos do kernel por padrão, incluindo CAP_SYS_PTRACE . Isso significa que somente os contêineres para os quais essa capacidade foi explicitamente adicionada (ou que estão sendo executadas com o --privilegiado switch) representam um risco. Além disso, apenas os processos privilegiados dentro desses contêineres representam um risco. Processos de usuário desprivilegiados dentro desses contêineres não têm poderes suficientes para causar danos. Portanto, se você estiver seguindo as práticas de contêiner recomendadas de "não executar contêineres privilegiados" e "não executar processos raiz dentro de contêineres", você está seguro.
  • Nos sistemas Red Hat com o SELinux habilitado, os perigos de contêineres privilegiados são atenuados. O SELinux impede que os processos de contêiner acessem o conteúdo do host mesmo se esses processos de contêiner conseguirem o acesso aos verdadeiros descritores de arquivo.
  • Na maior parte das instalações, nsenter e docker exec são puramente operações manuais. OpenShift usa nsenter para facilitar a porta de encaminhamento, mas sem intervenção manual, vanilla docker nunca irá mover um processo em um contêiner ou entre contêineres.

Diagnostique sua vulnerabilidade

Para verificar se a sua versão do docker já possui a correção backported, baixe e utilize este script .

Intervenções necessárias

Todos os clientes da Red Hat que executam as versões afetadas do docker são recomendados a atualizar quando os patches estão disponíveis. Os detalhes sobre os pacotes impactados, bem como a mitigação recomendada, estão abaixo.

Atualizações para os Produtos Afetados

Produto Pacote Aviso/Atualização
Red Hat Enterprise Linux 7 docker-latest, docker, runc pendente
Red Hat Openshift Container Host docker-latest, docker patch para RHEL7 pendente
RHEL Atomic Host docker-latest, docker, runc RHEL7 patch e respin pendente

Mitigação

ptrace e outras chamadas perigosas do kernel podem ser banidas de seus contêineres. Perfis seccomp personalizados podem ser criados para proibir esse comportamento (suportado pelo vanilla docker, OpenShift e Kubernetes). Isto irá impedir completamente ataques baseados em CVE-2016-9962.

Comments