بث مباشر 18.11 · الدفعة 318 نوفمبر، 19:00 بتوقيت موسكو — ورشة عملية مجانية لوكلاء الذكاء الاصطناعي · الدفعة 3 تبدأ 23.11ورشة 18 نوفمبر ←الدفعة 3 (23.11)
إصدارتحليل · على الرادارArs Technica→ المصدر

Claude Code يسرّب كلمات المرور إلى GitHub: Apiiro تعثر على أسرار في نحو 1100 ملف إعدادات

عندما تضغط في Claude Code على «Yes, and don't ask again»، يُحفظ الأمر كاملًا في الملف .claude/settings.local.json، بما في ذلك كلمة المرور أو الرمز المميز (token) إن كانا موجودين فيه. ومن المفترض أن يكون هذا الملف مدرجًا في .gitignore، لكن هذه القاعدة لا تعمل على مستوى المستودع. وقد عثر باحثو Apiiro على أكثر من 100 000 ملف من هذا النوع في مستودعات GitHub العامة، وفي نحو 1100 منها، تعود إلى 63 مؤسسة، كانت هناك أسرار.

معالج بواسطة الذكاء الاصطناعي من Ars Technica؛ بتحرير Hamidun News
Claude Code يسرّب كلمات المرور إلى GitHub: Apiiro تعثر على أسرار في نحو 1100 ملف إعدادات
المصدر: Ars Technica. كولاج: Hamidun News.
استمع للمقال
بطاقة الحقائق والأرقام
المعيارالتفاصيل
المصدر الأصليArs Technica ↗
رئيس التحرير
حقيقة رئيسية #1عُثر على أسرار في نحو 1100 ملف؛ و215 منها لم تكتشفها أداتا gitleaks وTruffleHog
حقيقة رئيسية #2بلاغات الأخطاء منذ أغسطس 2025 أُغلقت دون أي إجراء بعد 60 يومًا
حقيقة رئيسية #3افحصوا الملف .claude/settings.local.json وأضيفوه إلى .gitignore الخاص بالمستودع

تشغّل Claude Code، فيقترح تنفيذ أمر shell، وكي لا تنشغل عن عملك تضغط «Yes, and don't ask again». أمر مريح. لكن مع هذه الراحة قد تكتب في مشروعك، دون أن تنتبه، كلمة مرور قاعدة بياناتك. وهذا بالضبط ما يحدث في آلاف المستودعات، بحسب باحثين من Apiiro.

كيف يصل السر إلى الملف

الآلية بسيطة. عندما يسمح المستخدم بأمر ما بشكل دائم، يحفظ Claude Code هذا القرار كقاعدة في ملف محلي هو .claude/settings.local.json. أحيانًا تُكتب القاعدة على شكل نمط عام. لكن في كثير من الأحيان يدخل الأمر إلى الملف كما هو، بكل ما كُتب فيه.

تخيّلوا مثالًا نموذجيًا: تطلبون من الوكيل فحص قاعدة البيانات، فيشغّل psql مع سلسلة اتصال تحتوي كلمة المرور صراحةً في النص. أو ينفّذ curl مع رمز API في الترويسة. توافقون على الأمر «إلى الأبد»، فتستقر السلسلة كلها مع السر داخل ملف JSON.

ما دام الملف على جهازك فالأمر محتمل (إذا لم يُخترق الجهاز). تذكر Anthropic في وثائقها أن هذا الملف يُضاف إلى .gitignore العام لدى المطوّر. لكن .gitignore العام موجود على حاسوبك، لا داخل المستودع. وعندما تستنسخ المشروع على جهاز آخر، أو تحوّل المجلد إلى مستودع لاحقًا، أو تعمل ضمن فريق، تزول هذه الحماية. وتشير Apiiro أيضًا إلى أن Claude Code في حالات كثيرة يقوم بنفسه بعمل commit للتغييرات في هذا الملف دون تدخل من المستخدم.

حجم المشكلة ولماذا لا تنقذنا الماسحات

عثر محللو Apiiro على أكثر من 100 000 حالة انتهى فيها ملف إعدادات Claude Code المحلي في مستودع عام على GitHub. معظمها غير ضار. لكن في نحو 1100 ملف تعود إلى 63 مؤسسة ظهرت أسرار حقيقية: رموز API، وكلمات مرور قواعد البيانات، ومفاتيح خاصة، وحتى بيانات دخول root.

ولا يكفي حذف الملف من المستودع. فإذا كان المشروع قد استُنسخ (fork) بالفعل، تبقى الأسرار في النسخ المتفرعة. لذا يجب اعتبار المفتاح مخترقًا منذ لحظة وصوله إلى commit عام ولو مرة واحدة.

ومن المزعج أيضًا أن ماسحات الأسرار المعتادة لا تضمن الحماية. فمن بين نحو 1100 سر عُثر عليها، لم تلحظ 215 منها لا gitleaks ولا TruffleHog. والسبب مفهوم: السر مضمّن في سلسلة الأمر، وليس بالصيغة المألوفة KEY=value.

والتاريخ لا يزيد الثقة. فقد كُتب عن المشكلة في بلاغات أخطاء منذ أغسطس 2025. وذكرت بلاغات أخرى أن الملف أحيانًا لم يكن يُضاف إلى .gitignore، وأن أوامر حساسة قد تُسجَّل في ملف آخر غير محمي إطلاقًا. وقد أُغلقت كل هذه البلاغات دون أي إجراء بعد 60 يومًا من عدم النشاط.

وفي نهاية الأسبوع، في نقاش على Hacker News، ردّ بوريس تشيرني من فريق Claude Code بأن الفريق «يدرس ما يمكن فعله». وبحسب قوله، لا ينبغي لهذه الملفات أن تصل إلى git تقريبًا أبدًا، وتنشأ الحالات الإشكالية عندما تُنشأ الملفات وتُرسل بـcommit يدويًا. ونصح باستخدام auto mode، حيث تقرر المصنِّفات (classifiers) بنفسها أي طلبات الأذونات روتينية. وعندما لاحظ مستخدم آخر أن الأوامر الحساسة قد تُحفظ في الإعدادات حتى في auto mode، أقرّ تشيرني: «ملاحظة جيدة». ويعدّ الفريق إضافة ماسح أسرار مدمج في Claude Code احتمالًا للمستقبل.

ماذا تفعلون اليوم

لا يجدر انتظار الترقيعة. إليكم قائمة قصيرة للمطوّرين وقادة الفرق:

  • أضيفوا .claude/settings.local.json إلى .gitignore الخاص بالمستودع نفسه، وليس إلى العام فقط.
  • افحصوا السجل: git log --all -- .claude/settings.local.json. وإذا سبق أن أُرسل الملف بـcommit، فافتحوه وابحثوا عن كلمات المرور والرموز.
  • أعيدوا إصدار كل ما تجدونه. فحذف الملف لا يلغي المفتاح، خصوصًا مع وجود نسخ متفرعة.
  • لا تكتبوا الأسرار داخل الأوامر التي توافقون عليها «إلى الأبد». استخدموا متغيرات البيئة أو مدير أسرار.
  • فعّلوا ماسح أسرار قبل الـcommit (pre-commit)، ولا تعتبروه حلًا سحريًا: فالـ215 حالة فائتة تُظهر أن أداة واحدة لا تكفي.
  • راجعوا ملف الإعدادات نفسه قبل الـpush. إنه JSON عادي ومن السهل رؤية ما لا يجب أن يكون فيه.

هذه ليست المرة الأولى التي يكشف فيها وكيل ذكاء اصطناعي بيانات عن غير قصد. ففي الشهر الماضي علّقت Meta ميزة المشاركة في وكيلها Muse: إذ تبيّن للباحثين أن روابط المواد المشاركة سهلة التخمين.

والدرس عام لكل أدوات الوكلاء. فكل ما يتذكره الوكيل من أجل راحتك يصبح ملفًا إضافيًا قد ينشره أحدهم عن طريق الخطأ. تعاملوا مع إعدادات الوكلاء بالصرامة نفسها التي تتعاملون بها مع .env.

القصة

أسئلة وأجوبة حول الخبر

ما أبرز التفاصيل حول كيف يصل السر إلى الملف؟

الآلية بسيطة. عندما يسمح المستخدم بأمر ما بشكل دائم، يحفظ Claude Code هذا القرار كقاعدة في ملف محلي هو .claude/settings.local.json. أحيانًا تُكتب القاعدة على شكل نمط عام. لكن في كثير من الأحيان يدخل الأمر إلى الملف كما هو، بكل ما كُتب فيه. تخيّلوا مثالًا نموذجيًا: تطلبون من الوكيل فحص قاعدة البيانات، فيشغّل psql مع سلسلة اتصال تحتوي كلمة المرور صراحةً في النص. أو ينفّذ curl مع رمز API في الترويسة. توافقون على الأمر «إلى الأبد»، فتستقر السلسلة كلها مع السر داخل ملف JSON.

ما أبرز التفاصيل حول حجم المشكلة ولماذا لا تنقذنا الماسحات؟

عثر محللو Apiiro على أكثر من 100 000 حالة انتهى فيها ملف إعدادات Claude Code المحلي في مستودع عام على GitHub. معظمها غير ضار. لكن في نحو 1100 ملف تعود إلى 63 مؤسسة ظهرت أسرار حقيقية: رموز API، وكلمات مرور قواعد البيانات، ومفاتيح خاصة، وحتى بيانات دخول root. ولا يكفي حذف الملف من المستودع. فإذا كان المشروع قد استُنسخ (fork) بالفعل، تبقى الأسرار في النسخ المتفرعة. لذا يجب اعتبار المفتاح مخترقًا منذ لحظة وصوله إلى commit عام ولو مرة واحدة. ومن المزعج أيضًا أن ماسحات الأسرار المعتادة لا تضمن الحماية.

ما أبرز التفاصيل حول ماذا تفعلون اليوم؟

لا يجدر انتظار الترقيعة. إليكم قائمة قصيرة للمطوّرين وقادة الفرق: أضيفوا .claude/settings.local.json إلى .gitignore الخاص بالمستودع نفسه، وليس إلى العام فقط. افحصوا السجل: git log --all -- .claude/settings.local.json. وإذا سبق أن أُرسل الملف بـcommit، فافتحوه وابحثوا عن كلمات المرور والرموز. أعيدوا إصدار كل ما تجدونه. فحذف الملف لا يلغي المفتاح، خصوصًا مع وجود نسخ متفرعة. لا تكتبوا الأسرار داخل الأوامر التي توافقون عليها «إلى الأبد». استخدموا متغيرات البيئة أو مدير أسرار.

ZK
جمال حميدون — مدير المنتجات في Alpina Digital ومدير منتج AlpinaGPT. يبني منتجات الذكاء الاصطناعي منذ 2019. بدأ Hamidun News كمشروع شخصي ثم أصبح مُجمِّعًا إنتاجيًا بأكثر من 6000 قارئ.
✦ Hands-On AI Engineering · Hamidun Academy

Build & Ship Production AI Agents Without Boilerplate Code

Start your free 72-hour trial at Hamidun Academy (academy.hamidun.com) — interactive lessons on Claude Code & Cursor, live Tech Radar, and production agent templates.

Start 72h Free Trial →Vibe-Coding Intensive
ما رأيك؟
جارٍ تحميل التعليقات…