- Você trabalha em uma **empresa de cibersegurança**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
- Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
- **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **Compartilhe suas técnicas de hacking enviando PRs para o [repositório hacktricks](https://github.com/carlospolop/hacktricks) e [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**.
Por padrão, nenhuma política de bloqueio de senha está em vigor, o que torna o Artifactory um alvo principal para ataques de preenchimento de credenciais e pulverização de senhas.
Significa que o "Acesso anônimo" foi habilitado no painel de administração, que é uma configuração comum usada para permitir que aplicativos recuperem artefatos sem problemas, mas permite que você, o atacante, veja mais do que é preferível.
Se houver entradas `repoKey` na solicitação, qualquer pessoa pode implantar nelas, o que é realmente muito ruim. Você definitivamente deve estar autenticado para implantar quaisquer arquivos.
Por algum motivo, listar usuários é um direito reservado apenas para administradores. Eu encontrei uma maneira alternativa de listar usuários (aqueles que estão implantando ativamente pelo menos) que depende do valor "Implantado por" dos artefatos:
[Este script](https://gist.github.com/gquere/347e8e042490be87e6e9e32e428cb47a) simplesmente tenta encontrar recursivamente todos os usuários que implantaram artefatos. Observe que pode levar um tempo para ser concluído se houver muitos repositórios (> 1000).
Este é um pouco antigo e é improvável que você encontre uma versão tão desatualizada do Artifactory. No entanto, é bastante eficaz, pois é uma simples travessia de diretório que permite a execução de código arbitrário no nível do Tomcat.
Esta conta local normalmente é proibida de acessar a interface do usuário ou a API, mas até a versão 6.8.6 do Artifactory, era possível enganá-lo para acreditar que a solicitação emanava localmente se o cabeçalho HTTP `X-Forwarded-For` fosse definido como `127.0.0.1`.
## CVE-2020-7931: Injeção de modelo do lado do servidor (Artifactory Pro) <a href="#cve-2020-7931-server-side-template-injection-artifactory-pro" id="cve-2020-7931-server-side-template-injection-artifactory-pro"></a>
A vulnerabilidade é bastante simples: se um recurso implantado for definido como filtrado, ele será interpretado como um modelo Freemarker, o que dá ao atacante uma janela de ataque SSTI. ![Recurso filtrado](https://www.errno.fr/artifactory/artif_filtered.png)
Esta é uma pequena história de como bati minha cabeça contra a parede por horas, se não dias, durante um pentest. Encontrei um Artifactory desatualizado que sabia que era vulnerável ao CVE-2020-7931. Implantei o modelo SSTI original do advisory e comecei a percorrer o sistema de arquivos. Parecia que o Artifactory havia sido instalado em um local não padrão, o que não é muito incomum, já que os administradores gostam de manter partições separadas entre binários de aplicativos, dados, logs e configuração (isso é uma coisa boa!). Não havia chaves SSH ou senhas no diretório home do usuário que me fornecessem um pivô fácil, então chegou a hora de ser menos discreto e escrever no sistema de arquivos. O envio da carga útil inicial (uma chave pública) para o diretório de upload do Artifactory correu bem, mas eu simplesmente não conseguia movê-la para o diretório de chaves SSH. Então voltei para minha sandbox de exploração, testei novamente e, eis que funcionou bem. Então, tinha que haver uma configuração diferente que me impedisse de concluir o método `renameTo()`. Neste ponto, é sempre uma boa ideia [verificar a documentação](https://docs.oracle.com/javase/8/docs/api/java/io/File.html#renameTo-java.io.File-) ... que claramente afirma que você não pode renomear arquivos em diferentes sistemas de arquivos, o que faz sentido dependendo da implementação do método, ou seja, se ele funciona em um nível de inode. Arg.
Lembre-se do que eu disse sobre os administradores gostarem de partições? Bem, este é um caso de um administrador que endureceu sua configuração sem saber contra minha exploração! Então, tive que cavar em uma espécie de prisão Java para encontrar outro método que me permitisse gravar um arquivo no disco. E isso não foi nada divertido, já que não estou familiarizado com nada do que está envolvido: modelos FTL, Java, Tomcat/Catalina. Descobri rapidamente que as fugas regulares da prisão Java simplesmente não funcionariam, pois a instância de novas classes era proibida. Depois de horas lendo a documentação das classes Java e Catalina, finalmente encontrei um método write() em um objeto ao qual eu poderia chegar. Mas estava limitado ao caminho base da aplicação da web... Então, pensei em combinar a gravação em outro sistema de arquivos e o `renameTo()` através deste novo sistema de arquivos acessível para, esperançosamente, poder gravar em qualquer lugar? E funcionou mais ou menos. Consegui gravar fora do diretório de upload temporário ... mas não tão longe dele, pois agora estava preso em outro sistema de arquivos que era o ponto de montagem para todas as coisas do Artifactory: configuração, aplicação e coisas do tipo. Então, ainda sem chave SSH para mim.
Ok, eu poderia gravar na pasta raiz do artifactory, com certeza eu poderia fazer algo aqui? Ei, o Tomcat padrão automaticamente implanta arquivos WAR escritos em seu caminho de aplicação, não é? Então usei o msfvenom para gerar um shell da web JSP embalado em um arquivo WAR e testei na minha sandbox... bem, ele foi implantado corretamente, mas não me deu execução de comando. Parece que o Tomcat padrão não lida com JSPs. Ugh. Ficando cada vez mais frustrado, procurei outra maneira de executar código no Tomcat e encontrei outro método de execução usando servlets. Não consegui encontrar uma carga útil apropriada, então dane-se, estou tudo dentro neste ponto e [criei o meu próprio que você pode encontrar aqui](https://github.com/gquere/javaWebShell). Testei na sandbox, funciona, ok. Coloquei no alvo, implantei e ... nada. Acontece que havia um proxy na frente do artifactory que reescrevia todos os URLs para /artifactory. Então, mesmo que minha porta dos fundos estivesse implantada e em execução, não havia como acessá-la... Se houvesse alguma execução remota de código a ser alcançada neste ponto, teria que ser no contexto do Artifactory, não do Tomcat.
Na manhã seguinte, estou chorando em minha mesa olhando pela última vez a documentação do Artifactory em vãs esperanças de uma epifania. E então as palavras mágicas "scripts Groovy" apareceram. A
O Artifactory pode precisar armazenar segredos para se identificar em serviços remotos. Esses segredos não são hash, é claro, eles são armazenados criptografados no disco, com a chave ao lado deles. Existem dois tipos de segredos mencionados na [documentação oficial](https://jfrog.com/knowledge-base/what-are-the-artifactory-key-master-key-and-what-are-they-used-for/).
Os segredos externos (como senhas de servidores remotos) são encontrados nos [descritores de configuração](https://www.jfrog.com/confluence/display/JFROG/Configuration+Files#ConfigurationFiles-GlobalConfigurationDescriptor), por exemplo, `/var/opt/jfrog/artifactory/etc/artifactory.config.latest.xml` e parecem:
Esta ferramenta que escrevi pode ser usada offline para descriptografar segredos do Artifactory: [ArtifactoryDecryptor](https://github.com/gquere/ArtifactoryDecryptor).
* mantenha o Artifactory atualizado, especialmente quando atualizações críticas forem emitidas
* implemente uma política de senha sólida (sem senhas padrão, senhas fortes obrigatórias, bloqueios), preferencialmente diferida para um LDAP externo para melhor supervisão
* restrinja acessos (respeite o princípio do menor privilégio), especialmente para o usuário anônimo