← volver
CVE-2025-48384highbajo ataqueCWE-436CWE-59

Git allows arbitrary code execution through broken config quoting

73Vexday Risk Score

Prioriza la corrección. Ella está bajo explotación confirmada por CISA y tiene prueba de concepto pública.

ssvc Actcvss 8.1epss 2.8%
de la publicación al arma0 días
Publicada en NVD8 jul
1ª PoC8 jul
CISA KEV+48d
probabilidad de explotación
2.8%top 15% de las CVE
explotación observada
CISA + VulnCheck
68 exploit(s) público(s)
Acción exigida por CISAplazo 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.

Resumen

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.

Detalle 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.

Cómo se explota

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.

Versiones

Afectadas
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.
Corregidas en
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).

Cómo protegerse

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.

Cómo 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.

Investigado y redactado con IA a partir del advisory del fabricante y análisis públicos, con las fuentes citadas. Verifica siempre la versión corregida en el advisory oficial antes de actuar.
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
Productos afectados
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/583eeb993f62no verificadovulncheckvulncheck.com/xdb/696491bce452no verificadovulncheckvulncheck.com/xdb/820b0dfc1e72no verificadovulncheckvulncheck.com/xdb/e8327a39e5a8no verificadovulncheckvulncheck.com/xdb/c44ed6b9f03bno verificadovulncheckvulncheck.com/xdb/4b879217fcabno verificadovulncheckvulncheck.com/xdb/a0f8a326d3dano verificadovulncheckvulncheck.com/xdb/5e1fdf8f7625no verificadovulncheckvulncheck.com/xdb/4e8aef84594cno verificadovulncheckvulncheck.com/xdb/7af8ce70961bno verificadovulncheckvulncheck.com/xdb/7144f44519e1no verificadovulncheckvulncheck.com/xdb/524ca30fc382no verificadovulncheckvulncheck.com/xdb/93bba35073c8no verificadovulncheckvulncheck.com/xdb/fe9eebc482d0no verificadovulncheckvulncheck.com/xdb/1f087a80ac05no verificadovulncheckvulncheck.com/xdb/3f2582c2d65bno verificadovulncheckvulncheck.com/xdb/072dd40624a7no verificadovulncheckvulncheck.com/xdb/23fc2dbed681no verificadovulncheckvulncheck.com/xdb/1b8612e9755bno verificadovulncheckvulncheck.com/xdb/83191f028f8dno verificadovulncheckvulncheck.com/xdb/4d2d6d214e95no verificadovulncheckvulncheck.com/xdb/d7a347c87e0cno verificadovulncheckvulncheck.com/xdb/3a7d4c49b3c9no verificadovulncheckvulncheck.com/xdb/e40fcc37d9a0no verificadovulncheckvulncheck.com/xdb/85ecac734ebano verificado
⚠ Recursos públicos, para evaluar la exposición de sistemas que controlas o estás autorizado a probar. Prueba solo con autorización.