نموذج التهديد — ما توقفه حدود كاظمه فعلًا
نموذج التهديد — ما توقفه حدود كاظمه فعلًا
Section titled “نموذج التهديد — ما توقفه حدود كاظمه فعلًا”تشغّل كاظمه نموذجًا لغويًا كبيرًا (LLM) قادرًا على تنفيذ الشيفرة وكتابة الملفات وإرسال الرسائل على جهازك. تبيّن هذه الصفحة، آليةً بعد آلية، ما يوقفه كل إجراء وقائي وما لا يوقفه.
كُتبت لتكون مخيّبة للآمال في المواضع الصحيحة. فادّعاء السلامة تساوي قيمتُه ما يقبل صاحبه قوله ضده، وأسرع طريق لخسارة مُراجِع أمني هو وصف حدٍّ بأنه أقوى مما هو عليه. كل حدّ أدناه حقيقي؛ وعدة حدود منها أساسية لا يقوم البناء بدونها؛ ولا شيء منها سجن بالمعنى الذي تُستخدَم به هذه الكلمة عادةً.
لمن هي كاظمه: مشغّل واحد لكل تثبيت
Section titled “لمن هي كاظمه: مشغّل واحد لكل تثبيت”كاظمه برمجية تشغّلها لنفسك. لكل تثبيت مشغّل واحد: الشخص الذي يشغّل الخادم ويحمل مفاتيحه ويعدّل إعداداته. كل ما في هذه الصفحة يحمي المشغّل من الوكيل — من أخطائه، ومن صفحات الويب والمستندات والرسائل غير الموثوقة التي يقرؤها. ولا شيء فيها يحمي التثبيت من مشغّله نفسه.
- المشغّل يملك السيطرة الكاملة. يمكن لمن يشغّل التثبيت إطفاء كل إجراء وقائي مما أدناه. لكل إجراء مفتاحه الخاص، وهو مطفأ افتراضيًا، ومُدرَج مع ما يتوقف عن حمايته تحت مفاتيح تُضعف افتراضًا أمنيًا. تشغيل أحدها قرار المشغّل، ومسؤوليته هو.
- كل من يُدخله المشغّل يتصرف بسلطة المشغّل. يمكن لتسجيل دخول عبر الويب، أو لحساب تيليجرام أو ديسكورد أو سلاك مدرج في قائمة السماح، أن يطلب من الوكيل أي شيء كان المشغّل يستطيع طلبه. لا توجد صلاحيات تفصل بين أشخاص لا يثق بعضهم ببعض (القسم 6).
- ما يفعله الوكيل يفعله المشغّل. المنشور أو البريد الإلكتروني أو الرسالة أو الأمر المُرسَل عبر تثبيت ما هو ملك مشغّله. افتراضيًا تسأل كاظمه قبل أي إجراء خطير وتسجّل ما فعلته؛ لكنها لا تقرر ما يجوز لمشغّلها فعله.
- ليست خدمة مستضافة. تُقدَّم كاظمه كما هي، بموجب رخصة MIT (الرخصة). تشغيلها لصالح أشخاص آخرين، أو تعريضها لأشخاص لا تثق بهم، خارج ما بُنيت هذه الإجراءات الوقائية لأجله؛ والقسم 7 يبيّن ماذا يتطلّب حدٌّ حقيقي.
رُوجِع بتاريخ 2026-09-12 مقابل الكود، لا مقابل ملف README.
الخلاصة المختصرة
Section titled “الخلاصة المختصرة”| الآلية | يوقف | لا يوقف |
|---|---|---|
| موافقة HITL | أداة تعمل دون أن تراها | أي شيء توافق عليه. إنها رضا، لا احتواء |
سجن Docker (python_exec) | الوصول إلى الشبكة، والكتابة على نظام الملفات، وقنابل fork، واستنزاف الذاكرة، ومقتطفًا يقرأ دليلك المنزلي | استغلالًا في النواة. فـ Docker يشاركك نواتك |
قائمة سماح الصدفة (shell_exec) | مفسّرات الصدفة، وenv، والثنائيات المجهولة، والمسارات خارج مساحة العمل | ما تستطيع الثنائيات المدرجة في قائمة السماح فعله — فـ git وuv قويّان |
| سياج التعليمات | نصًا غير موثوق يزوّر السياج؛ ورموز أدوار مزوّرة من خمسة قوالب محادثة معروفة | نموذجًا يختار إطاعة طلب مهذّب داخل السياج |
| الخزنة | الأسرار الساكنة على القرص | عمليةً تستطيع قراءة مفتاح الخزنة من البيئة |
إن أخذت من هذه الصفحة جملة واحدة: الموافقة هي الحدّ الذي يهمّ، وهو حدّ بشري لا تقني.
1. موافقة HITL — رضا، لا احتواء
Section titled “1. موافقة HITL — رضا، لا احتواء”تمرّ كل أداة من مستوى الخطر عبر LocalToolRegistry.execute() ← SafetyMiddleware.check(). هناك 58 أداة في CANONICAL_DANGER_TOOLS. تنشر البوابة طلب موافقة وتنتظر إنسانًا.
ما تمنحه إياك حقًا. لا يحدث شيء خطير بينما لا تنظر. لا تستطيع صفحة ويب أُسيء فهمها التسبب بـ shell_exec في الثانية صباحًا، لأن لا أحد موجودًا ليضغط الزر. هذا هو المنتج، وهو حقيقي: السطح بأكمله يمرّ عبر نقطة اختناق واحدة، وkazma mcp يكشف نقطة الاختناق نفسها للوكلاء الآخرين بدل نقطة ثانية إلى جانبها.
ما لا تمنحه إياك. بمجرد موافقتك، تعمل الأداة بأي قوة تملكها. الموافقة لا تعزل، ولا تضيّق النطاق، ولا تراجع الأمر نيابة عنك. إن وافقت على shell_exec لأمرٍ لم تقرأه، فقد أدّت البوابة وظيفتها، ومع ذلك أنت من شغّل الأمر.
KAZMA_ALLOW_YOLO=1 يطفئ البوابة على مستوى الخيط لأدوات الخطر الكانونية. لا يستطيع تجاوز ALWAYS_HITL_TOOLS (x_post، x_delete_post، x_schedule_post، x_cancel_scheduled_post) ولا أوامر git الكتابية، التي يُعاد إخضاعها للبوابة في كل الأحوال. لكن لكل ما عدا ذلك، يعني وضع YOLO أن الحدّ أعلاه غير قائم.
خادم MCP يسمّي أدواته بنفسه. والاسم ليس موافقة. يقرأ classify_mcp_tool اسم الأداة — الذي يقدّمه خادم الطرف الثالث — والفعلُ مظهرُه الآمن ما يزال يُصنَّف safe (get_file، read_env، get_ssh_key، list_env_vars). تلك التسمية سطر في السجل. لا تتخطى البوابة. لا يعمل الاستدعاء إلا متى أدرج المشغّل تلك الأداة في KAZMA_MCP_SAFE_ALLOWLIST، أو متى وُوفق على هذا الاستدعاء بعينه فعلًا. والعلم الذي يعني فقط أن «الرسم البياني هو جهة HITL النافذة لهذا الدور» ليس موافقة، وKAZMA_PRODUCTION=1 لا يجيز الاسم أيضًا. الخادم الذي وسمه المشغّل trust: trusted قد يشغّل قراءة عادية مثل list_directory من دون بطاقة. أما اسمٌ على هيئة اعتماد (read_env، get_ssh_key) فلا يشغّله ما لم يكن ذلك الاسم على قائمة السماح. وفي الإنتاج يُهمَل وسم الثقة ما لم يُضبط KAZMA_MCP_TRUSTED_IN_PROD=1. أسماء الأدوات تصل عبر القناة نفسها التي تصل عبرها مخرجات MCP.
العملية بلا ناقل تفشل مغلقًا. عملية kazma mcp التي يطلقها محرّر لا تملك ناقل موافقة داخل العملية. تنضم إلى سجل البوابات المشترك عندما تكون نسخة كاظمه حيّة تراقب، وترفض عندما لا تكون هناك واحدة — فهي لا تشغّل أداة خطر أبدًا لأنها لم تجد إنسانًا.
2. سجن تنفيذ الشيفرة — ولماذا «سجن» هي الكلمة الخطأ
Section titled “2. سجن تنفيذ الشيفرة — ولماذا «سجن» هي الكلمة الخطأ”يختار python_exec أول المتاح من ثلاث طبقات:
E2B (Firecracker microVM) — فقط عند ضبط KAZMA_E2B_API_KEY. هذا حدّ آلة افتراضية حقيقي له نواة خاصة به، وهو الطبقة الوحيدة هنا التي تصمد أمام مقتطف عدائي. وهو اختياري ومعطَّل افتراضيًا.
Docker — الافتراضي عندما يكون Docker على PATH. الحاوية مُهيّأة على نحو سليم، وتستحق الأعلامُ القراءةَ لأنها هي الحماية فعلًا:
--network none no egress, no lateral movement--memory / --memory-swap no swap escape from the memory cap--cpus 1 --pids-limit 64 no CPU monopoly, no fork bomb--read-only immutable root filesystem--cap-drop=ALL no Linux capabilities at all--security-opt=no-new-privileges and none can be regained via setuid--tmpfs /tmp:noexec,nosuid (64m) scratch space that cannot execute--user 65534:65534 runs as nobody, not root-v <workspace>:<workspace>:ro your code is visible, not writablepython -I isolated mode; no user site-packagesهذا تخفيض جادّ في نطاق الانفجار. لا يستطيع المقتطف الاتصال بمنزله، ولا الكتابة على قرصك، ولا استنزاف ذاكرة الوصول العشوائي (RAM)، ولا القراءة خارج مساحة العمل.
تُطبَّق فوق ذلك قائمة حظر استيراد، في الحاوية ومحليًا على السواء. لا يستطيع المقتطف استيراد os وsys وsocket وsubprocess وctypes وpathlib وpickle وحوالي ثلاث وثلاثين أخرى، ولا استدعاء exec/eval/compile بنفسه — فقائمة حظر الاستيراد بلا قيمة ما دامت تلك في المتناول. كلاهما ينطبق على شيفرة المقتطف نفسها: فهو يعمل ببنياته المدمجة (builtins) الخاصة به، وتعمل الوحدات التي يستوردها بشكل طبيعي، فالمكتبة القياسية (datetime، وjson، وre، وzoneinfo، وdecimal، …) تعمل. حتى 2026-09-26 كان الحظر يُطبَّق على العملية كلها، وهو ما كسر نظام الاستيراد نفسه — مات 17 من أصل 20 مقتطفًا عاديًا برسالة “exec() is disabled”. ذلك لم يجعل الحظر أقوى قطّ: فـ Python داخل العملية تستطيع بلوغ os عبر كائنات المفسِّر نفسه أيًّا كانت طريقة تطبيق الحظر، لذا فهذا يوقف المقتطف الذي يكتب import os أو exec(...)، لا مقتطفًا بُني للهروب. المقتطف الذي كانت قائمة الحظر سترفضه يُرفض قبل بطاقة الموافقة، مع السبب. هذا تعزيزٌ مزدوج داخل Docker حيث الهروب أصلًا مشكلة النواة لا مشكلة Python، وهو الحماية الوحيدة في الطبقة المحلية أدناه. وهو يعني أيضًا أن مقتطفًا داخل الحاوية لا يستطيع سرد محتويات مساحة العمل التي يراها بكتابة os.listdir.
مع ذلك، ليس حدًّا أمنيًا أمام خصم قدير. يشارك Docker نواتك. الهروب من الحاوية يبعد ثغرةَ نواة واحدة، وثغرات النواة تحدث. من يخبرك أن حاوية Docker تحصر مهاجمًا مصممًا إمّا يبيعك شيئًا وإمّا لم يفكر في الأمر. استخدم E2B إذا كانت الشيفرة غير موثوقة حقًا.
لا شيء من ذلك يغيّر جملة النواة. أُضيف --cap-drop=ALL و--security-opt=no-new-privileges بتاريخ 2026-09-12 بعد أن سمّتها هذه الصفحة ناقصةً — فالحاوية الخالية من الصلاحيات والمحصَّنة ضد setuid تبقى حاوية، ويبقى الحدّ هو النواة التي تشاركك إياها. لهما قيمة، لكنهما لا يرقّيان بـ Docker إلى سجن.
الاحتياطي المحلي — لا عزل إطلاقًا. من دون Docker ومن دون E2B، يعمل python_exec عمليةً فرعية عادية باسمك، على مضيفك. إنه محظور في الإنتاج ووضع تعدد المستخدمين، وKAZMA_CODE_EXEC_ALLOW_LOCAL=1 يعيد تمكينه رغم ذلك. إن ضُبط ذلك المتغير فلا سجن؛ هناك عملية فرعية.
3. shell_exec — باب ضيّق، لا باب مقفل
Section titled “3. shell_exec — باب ضيّق، لا باب مقفل”تعمل shell_exec على المضيف بعد الموافقة. إنها ليست مُحاوَية، وبطاقة HITL تقول ذلك بهذه الكلمات.
ما يقيّدها:
- قائمة سماح للثنائيات، لا قائمة حظر:
lsوcatوgrepوfindوgitوuvوpytestوruffوmypyوjqوحفنة أخرى. - لا مفسّرات صدفة. لا
bashولاshولاcmdولاpowershell— فلا خطوط أنابيب، ولا$(...)، ولا تسلسل أوامر. - لا
envولاpsفي الإنتاج. كلاهما يفرغ الأسرار على بعض الأنظمة، وينبغي ألا تتحول موافقة واحدة إلى تفريغ للاعتمادات. - PATH مقيّد مع تحليل عبر
whichحصرًا في الوضع الصارم. - حارس مسارات يرفض المسارات المطلقة خارج مساحة العمل، بما فيها القيم المختبئة خلف الأعلام (
--file=../../etc/passwd،-oC:\out). - حارس وسائط يمنع أن يُطلَب من ثنائية مسموحة تشغيل برنامج آخر بالاسم — وإلا صارت قائمة السماح زخرفة.
وما لا يقيّده: ما تستطيع الثنائيات المسموحة فعله بشكل مشروع. يستطيع git الدفع. ويستطيع uv تثبيت حزمة وتنفيذ خطافات بنائها. ويشغّل pytest شيفرة اعتباطية في conftest.py. قائمة السماح تخفيضٌ ذو معنى في السطح، لا حدُّ قدرات — ولا شيء من ذلك ينطبق قبل أن توافق على الاستدعاء.
4. سياج التعليمات — تخفيض مُقاس، لا ضمان
Section titled “4. سياج التعليمات — تخفيض مُقاس، لا ضمان”يُغلَّف النص غير الموثوق (صفحات الويب، ونتائج الأدوات، ومخرجات MCP، ومتن المهارات) في سياج بيانات موسوم قبل أن يراه النموذج. خاصية بنيوية واحدة تصمد على كامل المجموعة؛ والثانية قائمة حظر وهي أضعف، وهذا ما يستحق أن يُقال على الشاشة نفسها:
- لا تستطيع أي حمولة في المجموعة تزوير محددات السياج — 35 حمولة هجوم، إضافة إلى 21 عنصر ضبط سليم عبر المسار نفسه (56/56).
- تُنقَّح رموز قوالب المحادثة الأجنبية، فلا يستطيع مستند تزوير دور عند مستوى الـ tokenizer — لكن هذه قائمة حظر من خمسة أنماط تغطي ChatML وLlama 2/3 وMistral وGemma. الشكل
<|…|>وحده عام؛ وعائلة قوالب لم يُعدّها أحد لا تُنقَّح.
تلك خصائص للشيفرة. أما إطاعة النموذج للسياج فخاصية للنموذج، وتُقاس بدل أن تُدَّعى: من 42% إلى 8% على groq/compound-mini، ومن 100% إلى 58% على qwen2.5:7b، ومن 42% إلى 8% على mistral:7b — صف compound-mini قيس قبل تحصين 2026-09-12b ولم يُعَد تشغيله، ولا يملك أي من هذه الفروق نطاق ضجيج مُقاسًا. راجع INJECTION.md، بما فيه إعادة الإنتاج التي يمكنك تشغيلها بنفسك مجانًا، والحمولات التي ما زالت تنفذ.
يقلّل السياج نجاح الهجوم. لا يلغيه، ولا رقم صادق هنا سيكون 0% أبدًا.
5. ما يعنيه إعدادك فعلًا
Section titled “5. ما يعنيه إعدادك فعلًا”الافتراضيات ليست الوضعية الوحيدة، والمتغيرات أدناه تغيّر أي مما سبق ينطبق. تحقّق من إعداداتك:
| الإعداد | الأثر على هذه الصفحة |
|---|---|
KAZMA_CODE_EXEC_DOCKER=force | ينطبق سجن القسم 2؛ وتُطفأ shell_exec على المضيف ما لم يُضبط KAZMA_HOST_SHELL=1 |
KAZMA_CODE_EXEC_DOCKER=0 | لا حاوية. python_exec عملية فرعية على المضيف |
KAZMA_CODE_EXEC_ALLOW_LOCAL=1 | يُعاد تمكين الاحتياطي المحلي حتى في الإنتاج |
ضبط KAZMA_E2B_API_KEY | حدّ العزل الحقيقي الوحيد هنا |
KAZMA_ALLOW_YOLO=1 | القسم 1 مطفأ لأدوات الخطر الكانونية |
KAZMA_PRODUCTION=1 | يحظر python_exec المحلي، ويفعّل قائمة سماح الصدفة الصارمة، ويتطلّب KAZMA_WORKSPACE_ROOT. لأجل MCP يُهمِل فقط الخادم الموسوم trust: trusted ما لم يُضبط KAZMA_MCP_TRUSTED_IN_PROD=1. وهو لا يغلق اسم MCP آمن المظهر: يعمل ذلك الاستدعاء متى كان الاسم على KAZMA_MCP_SAFE_ALLOWLIST أو وُوفق على هذا الاستدعاء، مع هذا العلم أو من دونه |
KAZMA_SHELL_STRICT=0 | يخفّف تقييد PATH وتحليل الثنائيات |
جهاز أحادي المشغّل بـ DOCKER=0 وALLOW_LOCAL=1 وALLOW_YOLO=1 هو وضعية تفضيل الراحة: بوابة الإنسان مطفأة لمعظم الأدوات، وتعمل الشيفرة على المضيف باسمك. خيار قابل للدفاع عنه لمطوّر على جهازه الخاص، وهو ليس الوضعية التي تصفها ادّعاءات السلامة. الأمران صحيحان؛ والغرض من هذه الصفحة أن تعرف أيّهما تعمل به.
6. خارج النطاق، مُصرَّحًا به بوضوح
Section titled “6. خارج النطاق، مُصرَّحًا به بوضوح”- عزل تعدد المستأجرين. نموذج التهديد الافتراضي هو مشغّل واحد على مضيف موثوق. يوجد التأجير في طبقة البيانات (
tenant_idعلى الأسرار والجلسات والبوابات) لكنه لم يخضع لمراجعة عدائية، وهو ليس حدًّا يُعتمد عليه لمستخدمين لا يثق بعضهم ببعض. - مشغّل خبيث. كل شيء هنا يفترض أن الإنسان عند مطالبة الموافقة في صفّك.
- سلسلة التوريد لما توافق عليه. يغطي التوقيع إصدارات كاظمه نفسها (SUPPLY_CHAIN.md). ولا يقول شيئًا عن حزمة يثبّتها
uvبعد موافقتك على الأمر. - مزوّد النموذج. تذهب التعليمات ونتائج الأدوات إلى أي مزوّد تضبطه. تسيّج كاظمه ما يعود؛ ولا تُشفّر ما يخرج.
7. إن أردت حدًّا حقيقيًا
Section titled “7. إن أردت حدًّا حقيقيًا”بترتيب تصاعدي في القوة وفي الإزعاج:
-
KAZMA_CODE_EXEC_DOCKER=force— استخدم سجن القسم 2 فعلًا، واقبل أنshell_execعلى المضيف تُطفأ معه. - اضبط
KAZMA_E2B_API_KEY— آلة افتراضية دقيقة (Firecracker microVM) لكل تنفيذ. هذه هي الطبقة الواجب استخدامها إذا كانت الشيفرة غير موثوقة حقًا. - شغّل كاظمه نفسها داخل آلة افتراضية. الجواب الصادق لحمل عمل عدائي هو أن يكون الحدّ حول كاظمه، لا داخلها.
تُتتبَّع نقاط الضعف المفتوحة عبر المشروع في KNOWN_GAPS.md. أبلِغ عن ثغرة سرًّا — راجع SECURITY.md.