← voltar
CVE-2025-48384highsob ataqueCWE-436CWE-59

Git allows arbitrary code execution through broken config quoting

73Vexday Risk Score

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

ssvc Actcvss 8.1epss 2.8%
da publicação à arma0 dias
Publicada no NVD8 de jul.
1ª PoC8 de jul.
CISA KEV+48d
probabilidade de exploração
2.8%top 15% das CVEs
exploração observada
simCISA + VulnCheck
68 exploit(s) público(s)
Ação exigida pela CISAprazo federal: 2025-09-15

Apply mitigations per vendor instructions, follow applicable BOD 22-01 guidance for cloud services, or discontinue use of the product if mitigations are unavailable.

Resumo

Falha no parsing de arquivos de configuração do Git (.gitmodules) permite execução arbitrária de código ao clonar um repositório malicioso com submódulos. O Git remove CR/LF ao ler um valor de config, mas não citava (quota) valores com CR final ao escrever — criando uma divergência que permite mascarar o caminho real de um submódulo. Está no catálogo KEV da CISA com exploração confirmada, mas o vetor exige interação do usuário (clone recursivo) e checkout de um submódulo malicioso, não é RCE remoto sem ação da vítima.

Detalhamento técnico

O bug está na camada de leitura/escrita de config do Git. Ao ler um valor de configuração, o parser descarta qualquer CRLF/CR final à direita. Ao escrever um valor de config que termine em CR, o Git não envolve o valor em aspas — então essa proteção que deveria preservar o CR é perdida na próxima leitura. O resultado prático: um caminho de submódulo definido em .gitmodules com um CR final é gravado sem quoting no config interno e, quando lido de volta, o CR desaparece silenciosamente, alterando efetivamente o caminho resultante do submódulo em relação ao que o atacante originalmente declarou.

Como é explorada

O atacante cria um repositório com um submódulo cujo path em .gitmodules contém um CR à direita. Quando a vítima clona esse repositório de forma recursiva (com --recurse-submodules, ou faz `git submodule update --init` depois), o Git inicializa o submódulo no caminho alterado (sem o CR) em vez do caminho declarado. Se o repositório também contém um symlink que aponta esse caminho alterado para o diretório .git/hooks/ do submódulo, e o submódulo possui um hook post-checkout executável, esse hook pode ser executado sem intenção explícita da vítima logo após o checkout — resultando em execução de código com os privilégios do usuário que fez o clone.

Versões

Afetadas
v2.50.0; v2.49.0; v2.48.0–v2.48.1; v2.47.0–v2.47.2; v2.46.0–v2.46.3; v2.45.0–v2.45.3; v2.44.0–v2.44.3; v2.43.6 e anteriores.
Corrigidas em
v2.43.7, v2.44.4, v2.45.4, v2.46.4, v2.47.3, v2.48.2, v2.49.1 e v2.50.1. Backports de distribuição: Debian 11 (bullseye) em 1:2.30.2-1+deb11u5 (DLA-4323-1). Apple corrigiu a cópia do Git distribuída com Xcode 26 (sem número de versão específico do Git divulgado pela Apple).

Como se proteger

A correção definitiva é atualizar o Git para a versão corrigida do ramo correspondente. Como paliativo quando não é possível atualizar imediatamente, o advisory oficial recomenda evitar clonar recursivamente submódulos de repositórios não confiáveis (não usar --recurse-submodules nem `git submodule update --init` em repositórios de origem desconhecida). Não existe flag de configuração ou controle de linha de comando documentado que neutralize a falha sem a correção de código — a mitigação real é a atualização binária do Git ou a abstenção de operações recursivas com submódulos em fontes não confiáveis. Distribuições backportaram a correção em pacotes próprios (ex.: Debian 11 em 1:2.30.2-1+deb11u5, via DLA-4323-1); a Apple corrigiu o Git empacotado no Xcode 26.

Como detectar

Procure em repositórios clonados por entradas em .gitmodules cujo campo `path` termine em caractere de controle (CR, 0x0D) — isso não é visível em editores comuns e exige inspeção binária/hexdump do arquivo. Outro sinal é a presença de symlinks dentro do repositório apontando para dentro do diretório .git/hooks/ de um submódulo, combinada com um hook post-checkout executável no submódulo — essa combinação é o indicador estrutural do ataque. Não há assinatura de rede confiável, pois a exploração ocorre inteiramente no processamento local do repositório clonado; monitorar execução inesperada de processos filhos do `git` (via hooks) após operações de clone/submodule update em ambientes de CI é o sinal comportamental mais prático.

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.
Git is a fast, scalable, distributed revision control system with an unusually rich command set that provides both high-level operations and full access to internals. When reading a config value, Git strips any trailing carriage return and line feed (CRLF). When writing a config entry, values with a trailing CR are not quoted, causing the CR to be lost when the config is later read. When initializing a submodule, if the submodule path contains a trailing CR, the altered path is read resulting in the submodule being checked out to an incorrect location. If a symlink exists that points the altered path to the submodule hooks directory, and the submodule contains an executable post-checkout hook, the script may be unintentionally executed after checkout. This vulnerability is fixed in v2.43.7, v2.44.4, v2.45.4, v2.46.4, v2.47.3, v2.48.2, v2.49.1, and v2.50.1.
CVSS:3.1/AV:N/AC:H/PR:L/UI:R/S:C/C:H/I:H/A:H
Produtos afetados
git · git
PoCs públicas encontradas68
githubgithub.com/acheong08/CVE-2025-4838452githubgithub.com/liamg/CVE-2025-4838421githubgithub.com/zr0n/CVE-2025-48384-main1githubgithub.com/zr0n/CVE-2025-48384-sub1githubgithub.com/IK-20211125/CVE-2025-483841githubgithub.com/vinieger/vinieger-CVE-2025-48384-Dockerfile1githubgithub.com/beishanxueyuan/CVE-2025-48384-test1githubgithub.com/ppd520/CVE-2025-483840githubgithub.com/NigelX/CVE-2025-483840githubgithub.com/greatyy/CVE-2025-48384-p0githubgithub.com/testdjshan/CVE-2025-483840githubgithub.com/altm4n/cve-2025-483840githubgithub.com/altm4n/cve-2025-48384-hub0githubgithub.com/p1026/CVE-2025-483840githubgithub.com/simplyfurious/CVE-2025-48384-submodule_test0githubgithub.com/Anezatraa/CVE-2025-48384-submodule0githubgithub.com/elprogramadorgt/CVE-2025-483840githubgithub.com/f1shh/CVE-2025-483840githubgithub.com/fluoworite/CVE-2025-483840githubgithub.com/fluoworite/CVE-2025-48384-sub0githubgithub.com/beishanxueyuan/CVE-2025-483840githubgithub.com/replicatorbot/CVE-2025-483840githubgithub.com/replicatorbot/CVE-2025-48384-POC0githubgithub.com/eliox01/CVE-2025-483840githubgithub.com/jacobholtz/CVE-2025-48384-poc0githubgithub.com/jacobholtz/CVE-2025-48384-submodule0githubgithub.com/butyraldehyde/CVE-2025-48384-PoC-Part20githubgithub.com/butyraldehyde/CVE-2025-48384-PoC0githubgithub.com/arun1033/CVE-2025-483840githubgithub.com/s41r4j/CVE-2025-483840githubgithub.com/s41r4j/CVE-2025-48384-submodule0githubgithub.com/vignesh21-git/CVE-2025-483840githubgithub.com/vignesh21-git/CVE-2025-48384-submodule0githubgithub.com/DayDayDayDreaming/backup-exec-cve-483840githubgithub.com/sathish46-lab/CVE-2025-48384-submodule0githubgithub.com/ECHO6789/CVE-2025-48384-submodule0githubgithub.com/Fomovet/cve-2025-483840githubgithub.com/nguyentranbaotran/cve-2025-48384-poc0githubgithub.com/admin-ping/CVE-2025-48384-RCE0githubgithub.com/fishyyh/CVE-2025-483840githubgithub.com/kallydev/cve-2025-48384-hook0githubgithub.com/fishyyh/CVE-2025-48384-POC0githubgithub.com/liamg/CVE-2025-48384-submodule0vulncheckvulncheck.com/xdb/583eeb993f62não verificadovulncheckvulncheck.com/xdb/696491bce452não verificadovulncheckvulncheck.com/xdb/820b0dfc1e72não verificadovulncheckvulncheck.com/xdb/e8327a39e5a8não verificadovulncheckvulncheck.com/xdb/c44ed6b9f03bnão verificadovulncheckvulncheck.com/xdb/4b879217fcabnão verificadovulncheckvulncheck.com/xdb/a0f8a326d3danão verificadovulncheckvulncheck.com/xdb/5e1fdf8f7625não verificadovulncheckvulncheck.com/xdb/4e8aef84594cnão verificadovulncheckvulncheck.com/xdb/7af8ce70961bnão verificadovulncheckvulncheck.com/xdb/7144f44519e1não verificadovulncheckvulncheck.com/xdb/524ca30fc382não verificadovulncheckvulncheck.com/xdb/93bba35073c8não verificadovulncheckvulncheck.com/xdb/fe9eebc482d0não verificadovulncheckvulncheck.com/xdb/1f087a80ac05não verificadovulncheckvulncheck.com/xdb/3f2582c2d65bnão verificadovulncheckvulncheck.com/xdb/072dd40624a7não verificadovulncheckvulncheck.com/xdb/23fc2dbed681não verificadovulncheckvulncheck.com/xdb/1b8612e9755bnão verificadovulncheckvulncheck.com/xdb/83191f028f8dnão verificadovulncheckvulncheck.com/xdb/4d2d6d214e95não verificadovulncheckvulncheck.com/xdb/d7a347c87e0cnão verificadovulncheckvulncheck.com/xdb/3a7d4c49b3c9não verificadovulncheckvulncheck.com/xdb/e40fcc37d9a0não verificadovulncheckvulncheck.com/xdb/85ecac734ebanão verificado
⚠ Recursos públicos, para você avaliar a exposição de sistemas que controla ou está autorizado a testar. Teste apenas com autorização.