For the English version of this alert, click here.
Allele Security Alert
ASA-2019-00128
Identificador(es)
ASA-2019-00128
Título
Vulnerabilidade de validação de entrada via submódulos do Git
Fabricante(s)
Atlassian
Produto(s)
Sourcetree
Versão(ões) afetada(s)
Sourcetree para macOS iniciando com 1.2 anterior a versão 3.1.1
Sourcetree para Windows iniciando com 0.5a anterior a versão 3.0.17
Versão(ões) corrigida(s)
Sourcetree para macOS versão 3.1.1
Sourcetree para Windows versão 3.0.17
Prova de conceito
Sim
Descrição
Sourcetree para macOS antes da versão 3.1.1 e Sourcetree para Windows antes da versão 3.0.17 eram ambos vulneráveis ao CVE-2018-17456. Um atacante remoto com permissão para se comprometer com um repositório git vinculado no Sourcetree para macOS ou Windows é capaz de explorar esse problema para obter a execução de código no sistema.
Detalhes técnicos
O arquivo .gitmodules é exibido da seguinte maneira:
[submodule "x:x"] path = x:x url = -u./payload
O comando atual que está sendo injetado é definido pela url, -u./payload aponta a flag upload-pack do git clone para o payload do shell script. Observe também: dentro do caminho, essa parte é necessária para realmente executar o payload do shell script.
O caminho terminará como a URL do repositório na operação clone subsequente:
execve("/usr/lib/git-core/git", ["/usr/lib/git-core/git", "clone", "--no-checkout", "--progress", "--separate-git-dir", "/tmp/huhu/.git/modules/x:x", "-u./payload", "/tmp/huhu/x:x"],...
Como a URL real de .gitmodules é interpretado como o argumento -u.
Os dois pontos se deve ao fato de que o caractere de ‘:’ nos deixa passar por essas linhas em transport.c:
} else if (url_is_local_not_ssh(url) && is_file(url) && is_bundle(url, 1)) { struct bundle_transport_data *data = xcalloc(1, sizeof(*data)); transport_check_allowed("file"); ret->data = data; ret->vtable = &bundle_vtable; ret->smart_options = NULL;
url_is_local_not_ssh retornará false devido aos dois pontos no caminho. E, portanto, mais tarde, no código, as smart_options que contêm a configuração do uploadpack ainda estão em vigor:
} else { /* Unknown protocol in URL. Pass to external handler. */ int len = external_specification_len(url); char *handler = xmemdupz(url, len); transport_helper_init(ret, handler); } if (ret->smart_options) { ret->smart_options->thin = 1; ret->smart_options->uploadpack = "git-upload-pack"; if (remote->uploadpack) ret->smart_options->uploadpack = remote->uploadpack; ret->smart_options->receivepack = "git-receive-pack";1 if (remote->receivepack) ret->smart_options->receivepack = remote->receivepack; }
A restrição para ter dois pontos no caminho parece dificultar a exploração no Windows como um sinal de dois pontos é um caractere proibido dentro de um caminho no Windows. No entanto, conforme observado por algumas pessoas durante a divulgação: O Git em execução no Windows Subsystem para Linux ou cygwin permitirá a exploração em hosts Windows.
Créditos
Terry Zhang (Tophant)
Referência(s)
Sourcetree Security Advisory 2019-03-06
https://confluence.atlassian.com/sourcetreekb/sourcetree-security-advisory-2019-03-06-966678691.html
Input validation vulnerability via Git in Sourcetree for Mac – CVE-2018-17456
https://jira.atlassian.com/browse/SRCTREE-6394
Input validation vulnerability via Git in Sourcetree for Windows – CVE-2018-17456
https://jira.atlassian.com/browse/SRCTREEWIN-11292
[Announce] Git 2.14.5, 2.15.3, 2.16.5, 2.17.2, 2.18.1, and 2.19.1
https://marc.info/?l=git&m=153875888916397&w=2
CVE-2018-17456
https://gist.github.com/joernchen/38dd6400199a542bc9660ea563dcf2b6
RCE via Git submodules PoC
https://github.com/joernchen/poc-submodule
CVE-2018-17456
https://github.com/xichawai/CVE-2018-17456
CVE-2018-17456
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-17456
CVE-2018-17456
https://nvd.nist.gov/vuln/detail/CVE-2018-17456
Se encontrou algum erro neste alerta ou deseja uma análise compreensiva, entre em contato.
Última modificação: 12 março 2019