تسريب كلمات المرور في Claude Code عبر خيار «Yes, and don’t ask again»
تسريب كلمات المرور في Claude Code: خيار «Yes, and don’t ask again» ترك أسرارًا في 1122 ملفًا عامًا على GitHub. لنتحقق هل يعنينا الأمر.
هذا المقال بلغات أخرى:DeutschEnglishEspañolFrançaisItaliano日本語Polski简体中文
في هذا المقال
في 5 نوفمبر نشر الباحثان في Apiiro شموليك كوهين وماتان غيلادي تقريرًا عن تسريب كلمات المرور في Claude Code إلى GitHub. في 104,185 نسخة عامة من الملف .claude/settings.local.json وجدا 1122 ملفًا يحتوي على سرّ واحد على الأقل، أي ما مجموعه 1379 كلمة مرور ومفتاح API ورمز وصول مختلفًا.
كيف يحدث تسريب كلمات المرور في Claude Code؟
عندما يطلب Claude Code الإذن لتشغيل أمر في الطرفية، يمكننا اختيار «Yes, and don’t ask again». وبحسب وثائق Claude Code، تُحفظ هذه الموافقة كقاعدة allow في ملف .claude/settings.local.json داخل المشروع.
المشكلة أن القاعدة تحفظ الأمر الموافَق عليه كاملًا، بكل ما كتبناه فيه. فإذا احتوى الأمر على كلمة مرور، مثل PGPASSWORD=… psql … أو أمر curl يحمل مفتاح API في الترويسة، تنتهي كلمة المرور في الملف نصًا مكشوفًا.
اللافت أن هذا ليس اكتشافًا جديدًا. ففي أغسطس 2025 أبلغ أحدهم عن هذه المشكلة بالضبط في البلاغ رقم 5544 (مع أمثلة على مفاتيح API ورموز Jira). وأغلقه روبوت في 3 يناير 2026 بعد 60 يومًا بلا نشاط، بحالة «not planned»، دون أي إصلاح.
إذا كان الملف محليًا، فكيف وصل إلى GitHub؟
الملف خاص من حيث المبدأ. فعند كتابته أول مرة يضيف Claude Code المسار **/.claude/settings.local.json إلى ملف الاستثناءات العام في git حتى لا يدخل في الـ commits (هكذا تصف الوثائق الأمر).
لكن هذه الحماية فيها عدة ثغرات:
- الاستثناء العام يعمل على جهاز واحد فقط ولا ينتقل مع المستودع.
- إذا أنشأنا الملف يدويًا، فلن يستثنيه Claude Code، وعلينا إضافته إلى
.gitignoreبأنفسنا. - قواعد التجاهل لا تنطبق على الملفات التي يتتبعها git أصلًا، لذا فالملف الذي دخل commit مرة يستمر في الدخول في الـ commits اللاحقة.
- حذف الملف من المستودع لا يزيله من السجل ولا من النسخ المتفرعة (forks).
وبحسب iTWire، فقد عُدِّل الملف في 539 من أصل 1105 مستودعات جرى تتبعها عبر commits شارك Claude في تأليفها.
ما حجم المشكلة؟
الأرقام من التقرير (بيانات جُمعت من GitHub العام بين 1 و3 نوفمبر):
- 104,185 نسخة عامة من
settings.local.json، منها 1122 (نحو 1.1%) تحتوي على سرّ واحد على الأقل. - احتوت هذه الملفات على 1379 قيمة مختلفة.
- وبإضافة سجل git والملف المشترك
.claude/settings.jsonوالمحادثات المحفوظة مع الوكيل، يصل العدد إلى 2539 سرًّا في 1994 مستودعًا. - أبلغت Apiiro الشركات في 2 و3 نوفمبر، وأكدت إحداها أن المفتاح المكشوف كان فعّالًا.
تحفّظ واحد: لم تتحقق Apiiro مما إذا كانت بيانات الدخول المكتشفة تعمل. فقد صفّت المرشحين بمرشحات للإنذارات الكاذبة وبتقييم نموذج لغوي، لذا ربما كان بعضها منتهي الصلاحية بالفعل.
لماذا يكثر الحديث عن الأمر؟
مساء السبت وصل التقرير إلى الصفحة الأولى في Hacker News. فالغرض من «don’t ask again» هو ألا يسأل الوكيل عن الشيء نفسه مرارًا، ولذلك من السهل أن ننسى ما الذي حُفظ فعلًا.
وهو أيضًا مثال آخر على أن الأسرار اليوم لا تتسرب من شيفرة التطبيقات فقط، بل من ملفات إعداد الوكلاء أيضًا (كما في تسريب OpenCode). وحتى الآن لا يتضمن ما نشرته وسائل الإعلام أي رد من Anthropic.
ما الذي ينبغي الانتباه إليه مستقبلًا؟
- لنبدأ بإلغاء واستبدال كل كلمة مرور أو مفتاح ظهر يومًا في هذا الملف داخل مستودع عام. وبعد ذلك فقط ننظف السجل.
- لنتحقق مما إذا كان الملف متتبَّعًا:
git ls-files .claude. إن كان كذلك، فلنوقف تتبعه (git rm --cached .claude/settings.local.json) ونضفه إلى.gitignoreفي المستودع نفسه، لا على مستوى الجهاز فقط. - لنراجع أيضًا السجل (
git log --all -- .claude/settings.local.json) والملف المشترك.claude/settings.jsonوالمحادثات المحفوظة مع الوكيل. - لا نكتب كلمات المرور مباشرة في الأوامر. الأفضل تمريرها عبر متغيرات البيئة أو مدير أسرار، واستخدام أنماط في قواعد
allowمثلBash(npm run test *)من الوثائق.
أكتب أكثر عن إبقاء مفاتيح API بعيدًا عن الوكلاء في دليل أمن وكلاء الذكاء الاصطناعي، وأساسيات العمل بالأداة موجودة في دليل Claude Code.
الأسئلة الشائعة
هل يرسل Claude Code كلمات مروري إلى GitHub من تلقاء نفسه؟
لا. يبقى ملف settings.local.json على قرصنا. ولا يحدث التسريب إلا عندما يدخل الملف في commit ثم في مستودع عام.
كيف أتحقق مما إذا كان ملف settings.local.json الخاص بي موجودًا في المستودع؟
يكفي تشغيل git ls-files .claude في مجلد المشروع. إذا ظهر settings.local.json في القائمة، فإن git يتتبعه. ومن المفيد أيضًا فتح الملف نفسه والبحث في قواعد allow عن كلمات مرور ورموز ومفاتيح.
هل يكفي حذف الملف من المستودع؟
لا. يبقى الملف في سجل git وفي النسخ المتفرعة، ولهذا فالأهم هو إلغاء بيانات الدخول المكشوفة واستبدالها.