باختصار: ينجح ملف AGENTS.md الخبيث في اختراق وكيل البرمجة (Coding Agent) بمجرد استغلال الغرض الأساسي من الملف؛ فالوكيل يقرأه تلقائيًا عند بدء التشغيل وينفذ ما فيه. وقد رصدت شركة Forever Security في أكتوبر 2026 هجومًا حقيقيًا استهدف مجلد ~/Downloads على جهاز أحد العملاء. ولمنع هذا التهديد، تجنّب تمامًا تشغيل أي وكيل داخل مجلد لا تملكه أو لا تتحكم فيه بالكامل، وعامل ملفات التعليمات بحذر ودقة كمعاملتك للأكواد البرمجية، وامنع تعديل الإعدادات ومسارات الشبكة، وأبقِ بيئة العزل (Sandbox) ومطالبات الموافقة اليدوية مفعلة دائمًا، وراقب ملفات إعدادات الوكيل لكشف أي تغييرات مريبة فور حدوثها.
ما هو هجوم AGENTS.md الخبيث؟
ملف AGENTS.md الخبيث هو ملف تعليمات للمشروع كُتب خصيصًا لتوجيه وكيل البرمجة نحو تنفيذ إجراءات ضارة. تقوم وكلاء ذكية مثل Claude Code وCodex وغيرها بتحميل هذه الملفات تلقائيًا بمجرد تشغيلها داخل المجلد. ولا يتطلب هذا الهجوم استغلال أي ثغرة برمجية، فالوكيل يقرأ الملف عند الإقلاع ويتعامل مع محتواه وكأنه القواعد الرسمية المعتمدة للمشروع.
يبدو الملف ظاهريًا كملاحظات هندسية عادية؛ مثل خطوة «فحص أولي» (Preflight) تثبّت حزمة برمجية، أو ملاحظة حول «بروكسي» تغيّر مسار بيانات الـ API. وبالنسبة للوكيل، لا تختلف هذه التعليمات إطلاقًا عن توجيه بسيط مثل «استخدم pnpm بدلًا من npm».
إذا كان فريق التطوير لديك يعتمد على عدة وكلاء برمجة، فإن منصة Sharkly توفر لهم بيئة موحدة لإسناد المهام ومراجعتها؛ وسنوضح لاحقًا كيف يغير ذلك آلية تحديد مجلد بدء تشغيل الوكلاء.
لماذا ينصاع وكيل البرمجة لما في الملف؟
توضع ملفات التعليمات مباشرة داخل سياق المحادثة (Context) الخاص بالوكيل إلى جانب الأوامر والطلبات التي تدخلها، دون وجود حد فاصل يحمي النظام أو يميّز بين قواعد المشروع وطلباتك الشخصية.
توضح وثائق الذاكرة الخاصة بـ Claude Code أن محتوى ملفات CLAUDE.md وAGENTS.md يُعامل باعتباره «سياقًا إرشاديًا، وليس إعدادات مفروضة إلزاميًا». ويقوم الوكيل بتحميل كل ملف AGENTS.md يجده في مجلد العمل الحالي والمجلدات الأعلى منه في حال غياب ملف CLAUDE.md. أما دليل AGENTS.md الخاص بـ Codex، فيوضح أنه يمسح المسار بدءًا من جذر المشروع وصولًا إلى المجلد الحالي ويدمج ما يعثر عليه بحد أقصى يصل إلى 32 كيبوبايت افتراضيًا. وتحظى الملفات الأقرب لمكان تشغيل الوكيل بالأولوية القصوى لأنها تُدمج في النهاية. وبالتالي، فإن المجلد الذي تبدأ منه يحدد ما سيتم تحميله، والمجلدات الأب تؤثر كذلك.
كيف يسيطر ملف AGENTS.md الخبيث على Codex وClaude Code؟
في 22 أكتوبر 2026، نشرت Forever Security تفاصيل ما رصدته على جهاز محمول لأحد العملاء. حيث حاول وكيل برمجة تثبيت function-color، وهي حزمة npm خبيثة معروفة، وكان مصدر هذه التعليمات ملف AGENTS.md موجودًا في مجلد التنزيلات ~/Downloads، والذي كان يمثل أيضًا مجلد العمل الحالي للوكيل. تمكنت Forever من حظر التثبيت قبل تنفيذ أي كود، ولم تتمكن من الجزم بكيفية وصول ذلك الملف إلى الجهاز.

تكمن خطورة مجلد التنزيلات في كونه المجلد الوحيد الذي يمكن لصفحات الويب الكتابة فيه وتنزيل ملفات إليه دون الحاجة لأي نقرة تأكيد من المستخدم. وقد قامت Forever بعد ذلك بإعادة تمثيل الهجوم مخبريًا وفق الخطوات التالية:
- تقوم صفحة يسيطر عليها المهاجمون بحفظ ملف باسم AGENTS.md داخل
~/Downloads. - يفتح المطور أداة Codex داخل هذا المجلد ويطلب منها تنفيذ أي مهمة برمجية.
- قبل البدء في المهمة، يقوم Codex بإضافة خادم «أدوات المشروع» (Project tools) إلى ملف
~/.codex/config.tomlويثبّت حزمة برمجية من مستودع npm. - نظرًا لأن هذا الإعداد يسري على النظام بأكمله، فإن كل جلسة Codex لاحقة ستقوم بالاتصال بخادم المهاجم، بغض النظر عن المجلد الذي تعمل منه.
أفادت Forever بأن Codex نفّذ الحمولة الخبيثة في أكثر من 90% من المحاولات. واستخدمت معظم التجارب برنامجًا بديلًا غير ضار يقوم بفتح الآلة الحاسبة فقط؛ في حين شُغّلت الحزمة الحقيقية لمرة واحدة داخل آلة افتراضية معزولة تمامًا.
أما Claude Code فكان خداعه أكثر صعوبة؛ إذ نجح دس ملف CLAUDE.md في توجيه حركة بيانات الـ API الخاصة به إلى خادم خاضع لسيطرة Forever، ما أدى إلى تسريب رمز تسجيل الدخول (OAuth token) ومكّن الخادم من الرد متظاهرًا بأنه النموذج الأصلي. وذكرت Forever أن ذلك نجح في نحو 50% من المحاولات. وتجدر الإشارة إلى أن النسبتين ناتجتان عن أسلوبي هجوم مختلفين، ولا ينبغي مقارنتهما كنسبة نجاح واحدة.
الخلاصة الجوهرية التي توصلت إليها Forever هي: لا توجد هنا أي ثغرة برمجية يمكن ترقيعها. المشكلة الحقيقية تكمن في مجلد مفتوح لملفات الويب، يُعامل كما لو كنت أنت من أنشأ محتواه ووثق به. هذا الدرس يتطابق تمامًا مع ما كشفه بحث سابق لشركة Pillar Security بعنوان Rules File Backdoor، والذي أظهر إمكانية إخفاء التعليمات الخبيثة داخل ملفات القواعد باستخدام محارف Unicode غير مرئية يتعذر على المراجع رصدها عند مقارنة التغييرات (Diff).
خمس خطوات للتصدي لهجمات AGENTS.md الخبيثة
تهدف الخطوتان الأوليان إلى منع تحميل الملف من الأساس، بينما تعمل الخطوات الثلاث المتبقية على تحجيم الضرر إذا تمكن أي ملف من التسلل.

1. أين يجب ألا تبدأ تشغيل وكيل البرمجة أبدًا؟
إياك وتشيغله داخل ~/Downloads، أو مجلد المستخدم الرئيسي (Home Folder)، أو أي مجلد لم تقم بإنشائه بنفسك. تشير إحصاءات Forever إلى أن نحو نصف عملائها قاموا بتشغيل وكلاء البرمجة مباشرة داخل مجلد التنزيلات. وإذا دعتك الحاجة لاستخدام الوكيل لفرز وتصنيف ملفات تم تنزيلها، فانقل تلك الملفات أولًا إلى مجلد فارغ وجديد وابدأ العمل منه.
يمكنك استخدام دالة حماية برمجية في الطرفية (Shell guard) لفرض هذه القاعدة تلقائيًا وتجنب نسيانها:
# ~/.zshrc: refuse to start an agent in folders the web can write to
agent_guard() {
case "$PWD" in
"$HOME"|"$HOME/Downloads"*|"/tmp"*)
echo "Refusing to start an agent in $PWD. Use a project folder." >&2
return 1 ;;
esac
}
claude() { agent_guard && command claude "$@"; }
codex() { agent_guard && command codex "$@"; }
2. كيف تراجع ملفات AGENTS.md كما تراجع الأكواد؟
تعامل مع أي ملف تعليمات وكأنه كود تنفيذي بالكامل، حتى وإن كان ضمن مستودع قمت بنسخه (Clone) قبل دقائق معدودة. واجعل عملية الفحص آلية، عبر إدراج ملفات التعليمات في ملف CODEOWNERS لفرض تعيين مراجع محدد لأي طلب سحب (Pull Request) يمس هذه الملفات:
AGENTS.md @your-org/platform
**/AGENTS.md @your-org/platform
CLAUDE.md @your-org/platform
/.claude/ @your-org/platform
/.cursor/rules/ @your-org/platform
أضف فحصًا آليًا في مرحلة التكامل المستمر (CI) يفشل تلقائيًا إذا اكتشف الأنماط التي تعتمد عليها هذه الهجمات: محارف Unicode المخفية، تعديل الروابط الأساسية (Base URLs)، وأوامر التثبيت المباشرة داخل ملفات التعليمات.
#!/usr/bin/env bash
# ci/check-agent-instructions.sh
files=$(git ls-files '*AGENTS.md' '*CLAUDE.md' '.cursor/rules/*')
[ -z "$files" ] && exit 0
fail=0
# zero-width, bidi override and Unicode tag characters
if grep -nP '[\x{200B}-\x{200F}\x{202A}-\x{202E}\x{2066}-\x{2069}\x{E0000}-\x{E007F}]' $files; then
echo "Hidden Unicode in an agent instruction file"; fail=1
fi
if grep -niE 'BASE_URL|chatgpt_base_url|mcp_servers|npx --yes|curl .*\| *(ba)?sh' $files; then
echo "Config, network or install instruction in an agent file: needs review"; fail=1
fi
exit $fail
قد يلتقط أمر grep الثاني بعض الأسطر البرمجية المشروعة، لكن فحصها يدويًا من قِبل مطور يظل أمرًا ضروريًا في كل الأحوال.
3. حظر صلاحيات تعديل الإعدادات الذاتية للوكيل
انتهى كلا سيناريوهي الهجوم بنجاح الوكيل في تعديل إعداداته الخاصة. احرمه من هذه الصلاحية تمامًا. في أداة Claude Code، امنع أي تعديل على مجلدات إعدادات الوكيل، واحجب إمكانية قراءة الأسرار والمفاتيح الحساسة في ملف .claude/settings.json الخاص بالمشروع:
{
"permissions": {
"deny": [
"Edit(./.claude/**)",
"Edit(~/.claude/**)",
"Edit(~/.codex/**)",
"Read(./.env)",
"Read(./.env.*)"
]
}
}
أما على مستوى فرق العمل، فيُفضل فرض هذه القواعد عبر الإعدادات الإدارية المدارة مركزيًا (Managed settings) حتى لا يتمكن أي ملف تابع للمشروع من تجاوزها أو تخفيف قيودها. وتوجه وثائق الذاكرة إلى استخدام الحقول الإلزامية مثل permissions.deny وsandbox.enabled وenv لفرض السياسات الأمنية الحيوية، واستخدام خُطّافات PreToolUse لحظر أي إجراء غير مرغوب فيه بصرف النظر عما يقرره النموذج. ويُعد تثبيت مسارات الـ API داخل متغيرات env الإدارية الحل الحاسم للتصدي لهجمات التلاعب بالرابط الأساسي (Base URL). تأكد دائمًا من مطابقة صياغة القواعد للإصدار المثبت لديك قبل تعميمها.
4. الإبقاء على بيئة العزل ومطالبات الموافقة قيد التشغيل
تنصح Forever بالحفاظ دائمًا على تفعيل بيئات العزل وبوابات التحقق والموافقة، وعدم الوثوق بأي توجيه يطلب من الوكيل تخطيها أو تجاوزها.
حدد بوضوح الإجراءات التي تتطلب دومًا إيقاف الوكيل للحصول على موافقة بشرية مسبقة: مثل تثبيت الحزم، وتعديل إعدادات الوكيل، وإجراء اتصالات شبكية بنطاقات جديدة. يوضح مقالنا حول بوابات الموافقة لوكلاء البرمجة الأماكن المثلى لوضع هذه القيود، بينما يستعرض مقال صلاحيات وكيل البرمجة: المسموح والمحظور النموذج الأمني الأمثل لتطبيقها.
5. مراقبة إعدادات الوكيل وتدوير بيانات الاعتماد عند الاشتباه
تحدد Forever الأماكن الواجب فحصها بدقة؛ ففي ملف ~/.codex/config.toml، ابحث عن أي قسم [mcp_servers.*] غير متوقع أو أي تغيير في chatgpt_base_url. وفي ملف .claude/settings.json الخاص بالمشروع، ابحث عن متغير ANTHROPIC_BASE_URL أو إعدادات بروكسي أو نقاط اتصال (Endpoints) لم تقم بتعيينها بنفسك.
grep -nE '^\[mcp_servers\.|chatgpt_base_url' ~/.codex/config.toml
grep -rnE 'ANTHROPIC_BASE_URL|_PROXY|base_url' ~/.claude/settings.json .claude/settings*.json 2>/dev/null
npm ls -g --depth=0 2>/dev/null | grep -i function-color
إذا اكتشفت أي عنصر مريب، فافترض على الفور أن الرمز البرمجي قد تم تسريبه وعليك تدويره (Rotate) فورًا؛ فرمز OAuth المسروق يمنح المهاجم جلسة نشطة ومستمرة، وليس مجرد اعتراض لطلب منفرد. وإذا عثرت على حزمة function-color، فتعامل مع الجهاز بالكامل باعتباره مخترقًا. وللحصول على خطوات التعافي الشاملة، توفر قائمة التحقق الخاصة بتسريب أسرار وكلاء البرمجة مسؤوليات واضحة ومحددة لكل خطوة في عملية تدوير المفاتيح.
دور منصة Sharkly
لا تقوم منصة Sharkly بفحص ملفات التعليمات أو الحلول محل الصلاحيات الأمنية للوكيل؛ بل يجب الاستمرار في تطبيق الخطوات الخمس السابقة. ما تفعله المنصة هو التحكم في مكان تشغيل الوكلاء وتحديد من يملك صلاحية هذا القرار.
في Sharkly، يعمل الوكيل على جهاز كمبيوتر (Computer) قمت بربطه مسبقًا، ويكون لكل وكيل مجلد عمل افتراضي (Default working directory) محدد في إعداداته. فعند تفعيل خيار «استخدام مجلد مؤقت» (Use temporary directory)، يحصل كل تشغيل للمهمة على مجلد منفصل وشجرة عمل جديدة (Git worktree) للمستودع المرتبط. أما مع خيار «المجلد المحدد» (Specified directory)، فتعتمد المهام على مسارات محلية مسبقة الإعداد تحددها أنت. وتفصل وثائق مجلد العمل الفروق بين كلا النمطين.

يؤدي هذا إلى نقل قرار اختيار المجلد من الطرفية الخاصة بالمطور إلى إعداد إداري يخضع للمراجعة والتدقيق. وفي النمط المؤقت، يبدأ الوكيل عمله دائمًا من نسخة نظيفة ومعزولة تمامًا من المستودع المرتبط، وليس من أي مجلد تصادف وجوده مفتوحًا لدى المستخدم. وتقتصر إدارة المستودعات حصريًا على المستخدمين الذين يتمتعون بصلاحيات إدارة المساحة (Space) أو المؤسسة (Organization). كما تُعد تعليمات الوكيل، التي تُحقن تلقائيًا في كل جلسة تشغيل، مكانًا مثاليًا لإعادة تأكيد القواعد الأمنية مثل «يُحظر تمامًا تعديل ملفات إعدادات الوكيل».
وتُعاد نتائج التنفيذ مباشرة إلى المهمة الأساسية لتتم مراجعتها من قِبل الفريق، وفق ما هو موضح في مقالنا عن مراجعة الأكواد المولدة بالذكاء الاصطناعي بالأدلة على مستوى المهام.
خاتمة
تنجح هجمات AGENTS.md الخبيثة لأن الوكلاء مصممون بطبيعتهم للانصياع لملفات التعليمات، وتستغل صفحات الويب ذلك لدس هذه الملفات داخل مجلدات نثق بها عادة. وعلاج هذا الخطر لا يأتي عبر ترقيع برمجي سريع، بل ببناء طبقات أمنية متكاملة.
ابدأ اليوم بتنفيذ الخطوة الخامسة على أجهزة جميع المطورين للتأكد من خلوها من أي اختراق حالي. وبعدها، إذا كان فريقك يعتمد على عدة وكلاء برمجة، فبادر إلى إعداد منصة Sharkly عبر ربط جهاز ووكيل واحد في النمط المؤقت (Temporary mode)، لضمان بدء كل جلسة عمل من شجرة كود نظيفة وموثوقة تمامًا.
الأسئلة الشائعة
هل يمكن لملف AGENTS.md خبيث اختراق أداة Claude Code؟
نعم. يقرأ Claude Code ملف AGENTS.md تلقائيًا عند غياب ملف CLAUDE.md داخل مجلد العمل أو المجلدات الأعلى منه. وقد نجحت تجربة محاكاة هجوم Claude Code التي أجرتها Forever عبر زرع ملف CLAUDE.md أعاد توجيه بيانات الـ API وسرّب رمز OAuth في قرابة نصف المحاولات التي خضعت للاختبار.
هل هذه ثغرة أمنية ستقوم OpenAI أو Anthropic بإصلاحها عبر ترقيع برمجي؟
تؤكد شركة Forever أنه لا يوجد خلل برمجي يستدعي الترقيع، فالوكلاء يتصرفون تمامًا وفق ما صُمموا لأجله. وتتمثل الحماية الحقيقية في النظافة الرقمية للمجلدات، والمراجعة الصارمة، وإحكام الصلاحيات.
كيف أكتشف التعليمات المخفية داخل ملف AGENTS.md؟
قم بمعاينة الملف كنص أولي خام (Raw file) وليس عبر العرض المنسق (Rendered view)، وابحث عن محارف Unicode المخفية عديمة العرض (Zero-width)، أو علامات تجاوز اتجاه النص (Bidi override)، أو وسوم Unicode الخاصة. ويقوم سكريبت التكامل المستمر الموضح أعلاه برصد هذه الأنماط الثلاثة وإيقافها تلقائيًا.
هل تمنع بيئة العزل (Sandbox) خطر ملفات AGENTS.md الخبيثة؟
تساعد بيئة العزل في تحجيم الأضرار الناتجة ولكنها لا تمنع تحميل الملف ذاته. يمكن لبيئة العزل ومطالبات الموافقة إيقاف تثبيت البرمجيات أو منع عمليات تعديل الإعدادات التي يطلبها الملف، ويجب دمجهما دائمًا مع قواعد حظر صريحة لحماية مجلدات إعدادات الوكيل.
ما الإجراء الصحيح عند العثور على ملف AGENTS.md مزروع على جهازي؟
تجنب تشغيل أي وكيل بالقرب منه. افحص فورًا ملفات إعدادات الوكيل للتأكد من عدم وجود خوادم MCP جديدة أو روابط أساسية مشبوهة، وابحث عن وجود حزمة function-color، ثم قم بتدوير جميع الرموز والمفاتيح الخاصة بالوكيل وأي مفاتيح أمنية كان بمقدوره قراءتها.


