
Exploitation of CVE-2018-18925 a Remote Code Execution against the Git self hosted tool: Gogs.
Exploração do CVE-2018-18925, uma Execução Remota de Código contra a ferramenta Git auto-hospedada: Gogs.
Gogs é baseado no framework Macaron. O sistema usado para gerenciar sessão é muito semelhante ao que o PHP faz. O identificador de sessão no cookie é mapeado para um arquivo no sistema de arquivos. Quando o servidor web recebe uma requisição com um identificador de sessão (como cookie), ele procura pelo arquivo no sistema de arquivos.
A vulnerabilidade é uma simples travessia de diretório ao recuperar o arquivo usado para a sessão no sistema de arquivos. Você pode, por exemplo, definir o cookie i_like_gogits para ../../../../../../etc/passwd para obter um erro do servidor.

Para explorar o bypass de sessão, precisaremos de uma maneira de enviar um arquivo especialmente criado, então usaremos este arquivo como nosso ID de sessão; podemos criar nosso próprio arquivo de ID de sessão personalizado com https://github.com/RyouYoo/CVE-2018-18925/blob/main/main.go.
go run main.go
Ao criar a cópia do repositório localmente, o Gogs coloca os arquivos em /data/gogs/data/tmp/local-repo/[REPO_ID]/[FILENAME] (este repositório é criado apenas quando você usa a funcionalidade 'Upload file').

Onde [FILENAME] é o nome do arquivo que você envia e [REPO_ID] é o identificador do repositório que pode ser encontrado usando o link Fork:

Onde 5 é o ID do repositório.
Por padrão, as sessões são armazenadas em /data/gogs/data/sessions/. Portanto, você pode usar o seguinte caminho relativo para seu ID de sessão: ../tmp/local-repo/[REPO_ID]/[FILENAME]. Ao usar este caminho em seu cookie i_like_gogits, você deve estar logado como administrator.

Para obter RCE, você pode usar a funcionalidade de git hooks em um determinado repositório para executar um script de shell.

Em pre-receive injete seu código:

Em seguida, faça uma solicitação de push, com git ou com a função de criar arquivo, para que o hook seja executado.