A CVE-2025-48384 é uma vulnerabilidade crítica no Git, o sistema de controle de versão distribuído amplamente utilizado. Envolve o tratamento inadequado de caracteres de retorno de carro (CR) em valores de configuração, o que pode levar a problemas de path traversal durante checkouts de submódulos. Esta falha permite potencial execução arbitrária de código sob condições específicas. A vulnerabilidade foi divulgada publicamente em 8 de julho de 2025 e modificada pela última vez em 26 de agosto de 2025. Foi adicionada ao catálogo de Vulnerabilidades Exploradas Conhecidas (KEV) da Agência de Segurança Cibernética e de Infraestrutura (CISA) dos EUA em 25 de agosto de 2025, indicando exploração ativa, com data de remediação até 15 de setembro de 2025.
Descrição da Vulnerabilidade
O problema decorre de como o Git processa valores de configuração:
Ao ler um valor de config, o Git remove quaisquer caracteres de retorno de carro e alimentação de linha (CRLF) finais.
No entanto, ao escrever uma entrada de config, valores contendo um CR final não são devidamente citados, fazendo com que o CR seja perdido durante leituras subsequentes.
Essa discrepância pode fazer com que um submódulo seja verificado em um local incorreto se seu caminho incluir um CR final. Se um atacante configurar um link simbólico que aponte esse caminho alterado para o diretório de hooks do submódulo — e o submódulo contiver um hook post-checkout executável — o script do hook poderá ser executado involuntariamente após o checkout, resultando em execução arbitrária de código.
Detalhes Técnicos
A vulnerabilidade explora um conflito de interpretação na análise de config do Git:
Incompatibilidade no Tratamento de Config: CRs finais são removidos na leitura, mas não preservados na escrita sem citação.
Alteração do Caminho de Checkout do Submódulo: Um caminho de submódulo como "submodulo/caminho" pode ser interpretado como "submodulo/caminho" após a perda do CR.
Exploração de Link Simbólico: Um atacante poderia criar um link simbólico do caminho alterado para o diretório de hooks (ex.: .git/hooks/post-checkout), permitindo a execução de hooks maliciosos durante operações como git submodule update ou git clone --recurse-submodules.
Isso é classificado sob:
CWE-436: Conflito de Interpretação (incompatibilidade na forma como os dados são processados).
CWE-59: Resolução de Link Incorreta Antes do Acesso a Arquivo ('Link Following'), devido ao abuso de link simbólico.
O vetor de ataque é baseado em rede (AV:N), com alta complexidade (AC:H), baixos privilégios necessários (PR:L), interação do usuário necessária (UI:R) e escopo alterado (S:C), impactando alta confidencialidade, integridade e disponibilidade (C:H/I:H/A:H).
Versões Afetadas
A vulnerabilidade afeta versões do Git anteriores às seguintes versões corrigidas:
Todas as versões antes de v2.43.7
v2.44.0 a v2.44.3
v2.45.0 a v2.45.3
v2.46.0 a v2.46.3
v2.47.0 a v2.47.2
v2.48.0 a v2.48.1
v2.49.0
v2.50.0
Afeta o Git em várias plataformas, incluindo Linux, macOS e Windows, mas é particularmente relevante em ambientes de desenvolvimento, pipelines CI/CD (ex.: GitHub Actions, GitLab CI) e em qualquer lugar onde submódulos Git sejam clonados de repositórios não confiáveis.
Impacto e Cenários de Exploração
Impacto: Alto risco de execução remota de código (RCE), exfiltração de dados ou comprometimento do sistema. Em fluxos de trabalho de desenvolvimento, isso pode levar a ataques à cadeia de suprimentos se repositórios maliciosos forem clonados.
Requisitos de Exploração:
Um caminho de submódulo especialmente criado com um CR final.
Um link simbólico redirecionando para o diretório de hooks.
Um hook executável (ex.: post-checkout) no submódulo.
Interação do usuário, como clonar um repositório com --recurse-submodules.
Exploração no Mundo Real: Como está no catálogo KEV da CISA, agências federais e infraestrutura crítica devem remediar até 15 de setembro de 2025. Provavelmente está sendo explorado em ataques direcionados a desenvolvedores ou projetos de código aberto. Nenhum proof-of-concept (PoC) público é mencionado no aviso, mas a alta complexidade sugere que requer configuração específica.
Os detalhes CVSS ainda não foram totalmente pontuados no NVD (CVSS 4.0 pendente), mas com base nas métricas CVSS 3.1 do aviso, alinha-se a uma gravidade crítica (CVSS estimado 8.8, conforme observado anteriormente em listas mais amplas de CVEs).
Mitigação e Recomendações
Versões Corrigidas: Atualize o Git para uma das seguintes versões ou posteriores:
v2.43.7
v2.44.4
v2.45.4
v2.46.4
v2.47.3
v2.48.2
v2.49.1
v2.50.1
Soluções Alternativas:
Evite clonar submódulos recursivamente (--recurse-submodules) de repositórios não confiáveis.
Desabilite ou restrinja o uso de links simbólicos nas configurações do Git, se possível.
Use o Git em ambientes com permissões restritas (ex.: setups containerizados).
Conselho Adicional: Para organizações sob diretivas da CISA, aplique patches conforme instruções do fornecedor ou interrompa o uso se não for possível aplicar patches. Varra regularmente repositórios em busca de submódulos suspeitos e monitore execuções inesperadas de hooks.
Créditos e Referências
Créditos: O aviso credita ttaylorr por relatar e publicar detalhes.
Catálogo KEV da CISA: (Integrado aos detalhes do NVD)
Esta vulnerabilidade destaca a importância do tratamento seguro em sistemas de controle de versão, especialmente com submódulos. Se você estiver usando Git em um ambiente de produção ou desenvolvimento, priorize a atualização imediatamente, dado o status de exploração ativa.
PoC Rápido
Pré-requisitos: Docker instalado; este repositório clonado localmente. Nenhuma rede necessária durante o PoC.
Git Vulnerável: Usa Git 2.40.4 (comportamento de confusão de caminho verificado).
URL do Submódulo: .gitmodules aponta para https://github.com/s41r4j/CVE-2025-48384-submodule.git, mas o PoC reescreve para uma cópia local para teste offline.
Execute:
bash scripts/poc.sh
O que faz:
Constrói uma imagem de container com Git 2.40.4.
Cria uma flag em $HOME/flag.txt dentro do container.
Copia malicious-submodule-repo/ para /tmp no container.
Clona este repositório recursivamente com uma reescrita de URL para essa cópia local do submódulo.
Força checkout para acionar o hook post-checkout se a confusão de caminho for bem-sucedida.
Imprime /tmp/flag.txt criado pelo hook.
Notas:
O caminho do submódulo malicioso é um literal sub^M (CR) armazenado como gitlink; o caminho sanitizado sub resolve via um link simbólico para .git/hooks, então o post-checkout rastreado do submódulo cai como um hook real e é executado.
Para redirecionar o gitlink para o commit mais recente do seu submódulo remoto depois de enviá-lo para o GitHub, execute: bash scripts/update-gitlink.sh.