
Exploit para execução remota de comandos no comando go get do Golang.
Exploit para execução remota de comandos no comando go get do Golang.
Quando você faz go get de um pacote, o Go é projetado para construir e instalar o pacote sem executar nenhum código dele. A intenção é que você possa obter, construir e até mesmo instalar pacotes Go de forma segura, sem confiar neles. Em teoria, parece que isso deveria ser uma tarefa simples para a ferramenta Go, mas na prática, é um verdadeiro desafio. O go get faz muitas coisas internamente, incluindo invocar ferramentas de terceiros como git e clang de maneiras que são fortemente influenciadas pelas configurações do pacote. Garantir que essas invocações sejam seguras é uma batalha difícil que o Go ainda não venceu completamente.
Quando o cgo está habilitado, a etapa de compilação durante o go get invoca o compilador C do host, gcc ou clang, adicionando flags do compilador especificadas nos arquivos fonte do Go. Tanto o gcc quanto o clang suportam um mecanismo de plugins no qual um plugin de biblioteca compartilhada é carregado no compilador, conforme direcionado pelas flags do compilador. Isso significa que um repositório de pacotes Go pode conter um arquivo exploit.so junto com um arquivo fonte Go que diz (por exemplo) // #cgo CFLAGS: -fplugin=exploit.so, fazendo com que o plugin de ataque seja carregado no compilador C do host durante a compilação. Os plugins do gcc e clang são completamente irrestritos em seu acesso ao sistema host.
Go antes de 1.8.7, Go 1.9.x antes de 1.9.4 e pré-lançamentos do Go 1.10 antes do Go 1.10rc2 permitem execução remota de comandos pelo go get durante a compilação do código fonte, aproveitando o recurso de plugin do gcc ou clang, porque os argumentos -fplugin= e -plugin= não foram bloqueados.
Para o Exploit, precisaremos hospedar nosso pacote malicioso. Precisamos de um site com TLS e uma cadeia de certificados válida. Uma maneira fácil de fazer isso é usar o github
Em seguida, você precisará de um arquivo malicioso de plugin/.so. O código em exploit.c deve ajudar com isso.
Nota: Altere o seguinte código em exploit.c para o seu comando
void exploit() {
system("<Seu Comando>");
}
Nota: Compile este arquivo de acordo com a arquitetura da máquina/pc da vítima
Você pode compilar o exploit.so usando o seguinte comando:
gcc -shared -o exploit.so -fPIC exploit.c
Depois de hospedar seu payload completo no Github, você deve conseguir passar o link do pacote para a vítima.