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

Não somos responsáveis por qualquer perda de dados, corrupção de dispositivos ou qualquer outro tipo de problema devido ao uso de qualquer informação mencionada em nossos alertas de segurança.