Translated message

A translation of this page exists in English.

Truncamento de número inteiro e vulnerabilidades de excesso em Git (CVE-2016-2315, CVE-2016-2324)

A Red Hat Product Security tomou conhecimento de vulnerabilidades em Git onde uma falha de truncamento de número inteiro(CVE-2016-2315) e uma falha de excesso de número inteiro (CVE-2016-2324) pode levar a um estouro de buffer baseado em heap e consequentemente à execução de código remota.

Visão Geral

Git utiliza um formato especial para compartilhar informações de repositório entre servidor e clientes. Isto é conhecido como o formato packfile

Um invasor pode criar um packfile especialmente elaborado que, quando enviado a um servidor vulnerável ou cliente, pode acionar um truncamento de número inteiro ou estouro quando estiver sendo processado, em última instância resultando em corrupção de memória.

Informações Gerais

Git é um sistema de controle de versão distribuído com um arquitetura descentralizada. Ao contrário de sistemas de controle de versão centralizados com um modelo cliente-servidor, Git garante que cada cópia de trabalho de um repositório Git é uma cópia exata com histórico de revisão completo. Isto não só permite ao usuário trabalhar e contribuir em projetos sem a necessidade de ter permissão para empurrar as alterações aos repositórios oficiais deles, mas também possibilita ao usuário a trabalhar sem conexão de rede.

Versões Afetadas

As versões do Git que foram lançadas e suportadas pela Red Hat para o Red Hat Enterprise Linux e Red Hat Software Collections estão afetadas, conforme observado na lista de produtos afetados na seção de Resolução abaixo. Além disso, todas as versões upstream do Git anteriores às versões 2.4.11, 2.5.5, 2.6.6, e 2.7.4 são também afetadas por estas falhas.

Descrição do ataque e impacto

As causas-raízes da vulnerabilidade são um truncamento de número inteiro e um problema de excesso de número inteiro na função path_name() no arquivo de origem revision.c, que é utilizado pelo Git para processar informação de caminho. O ponto fraco é que essa função falha ao limpar completamente os possíveis dados maliciosos que foram recebidos, como parte de um packfile de Git especialmente elaborado e enviado por um invasor, antes de processá-lo, o que pode levar a uma corrupção de memória e a uma possível execução de código arbitrário.

O formato do packfile é usado pelo Git internamente para compartilhar com eficácia informações de repositório. O Git utiliza várias ferramentas de ajuda para gerar packfiles e enviar e receber arquivos através dos pontos de extremidades do Git, um invasor pode criar um packfile especialmente elaborado que contém um nome de caminho longo (231 bytes, roughly 2 gigabytes) ou uma árvore de elementos de caminho que acionariam as vulnerabilidades na função path_name()quando estiver sendo processada.

Tal packfile foi criado e postado publicamente. Pode ser utilizado para atacar ambos clientes e servidores.

Para atacar um servidor vulnerável, um invasor teria que agir como um cliente de Git e enviar o packfile especialmente elaborado para o servidor vulnerável, por exemplo como parte de uma operação push (empurrar). O servidor vulnerável receberia um packfile malicioso de um cliente Git malicioso e, quando processasse as informações de caminho contidas ali, acionaria as vulnerabilidades na função path_name(). Geralmente, uma operação deste tipo requer autenticação. O invasor teria que passar com êxito nesta autenticação para que o ataque tenha sucesso.

Para atacar um cliente, um invasor poderia estabelecer um repositório Git malicioso em um servidor Git e enganar um usuário desavisado a clonar o repositório. O cliente teria então que baixar o packfile malicioso do servidor e, posteriormente, acionar as vulnerabilidades quando tentasse processá-las.

Apesar de ser bruto e de tamanho descompactado o packfile teria cerca de 2 gigabytes devido à necessidade de enormes dados de caminho, isto não significa que um invasor teria que enviar múltiplos gigabytes de dados através da rede. Devido à compressão utilizada pelo formato do packfile internamente, e talvez ainda mais compressão dependendo do mecanismo de transporte (por exemplo SSH), talvez seja possível explorar as vulnerabilidades com apenas 200 megabytes do total de dados transferidos pela rede.

Resolução

Todos usuários Git são aconselhados a atualizar para estes pacotes atualizados, que contenham backported patches para corrigir estes problemas. Antes de aplicar esta atualização, certifique-se de que todas as erratas relevantes que foram anteriormente emitidas para seu sistema foram aplicadas.

Produto Pacote Aviso
Red Hat Enterprise Linux 6 git RHSA-2016-0496
Red Hat Enterprise Linux 7 git RHSA-2016-0496
Red Hat Software Collections git19-git RHSA-2016-0497

Perguntas Frequentes

Eu executo um servidor Git. Qual é o meu risco ?

Você está vulnerável se um invasor for capaz de empurrar dados maliciosos para um repositório Git hospedado. Se isto necessitar uma autenticação, o invasor teria que passar com êxito na autenticação.

Eu executo um cliente Git. What's my exposure?

Um invasor poderia te enganar e você clonar a partir de um repositório Git comprometido ou não confiável para explorar esta vulnerabilidade.