تصور کنید یک ابزار کمکی برای برنامهنویسی، بهجای پاک کردن یک متغیر اضافی، تمام پوشه Home سیستم شما را حذف کند و مک شما را کاملاً پاک کند. این یک کابوس تخیلی نیست؛ بلکه تجربهای است که کاربران Claude CLI و Codex بهدلیل دسترسی مستقیم عاملها به فایلسیستم گزارش کردهاند. اخیراً یک کاربر Claude CLI گزارش داد که این عامل کل دایرکتوری خانه او را پاک کرده و سیستم مک او را کاملاً تخلیه نموده است. این یک نقص فنی منزوی نیست؛ رشتهای از گفتگوها در Hacker News با عنوان «Claude CLI دایرکتوری خانه من را حذف کرد و مک من را پاک کرد»، ۲۵۵ امتیاز و ۲۱۶ نظر دریافت کرد. گزارشهای منتشرشده در انجمن OpenAI نیز توصیف میکنند که Codex دستوراتی برای حذف فایلها اجرا کرده که منجر به پاک شدن ۲۴۰ تا ۷۰۰ گیگابایت داده شده است، آن هم در حالی که این دادهها بهطور کامل و بدون عبور از سطل زباله (Recycle Bin) حذف شدهاند. حتی کاربران Cursor نیز موارد «طغیان» عامل در حالت YOLO را مستند کردهاند؛ جایی که مدل نه تنها فایلهای پروژه، بلکه خودِ ابزار و تمام فایلهای مرتبط با پروژه را پاک کرده است. در یک مورد خاص در GitHub، حذف تقریبی ۳۲۸,۰۰۰ فایل در جریان یک عملیات پاکسازی اشتباه ثبت شده که هیچکدام از این عملیاتها در لاگها ثبت نشدند.
این اتفاقات در حالی میافتد که عاملهای هوش مصنوعی (AI Agents) — شبیه دستیارهای هوشمندی که حالا کلید دفتر کار شما را دارند و میتوانند بهجای پیشنهاد دادن، خودشان وسایل را جابهجا کنند — از جریان «چت و کپی» ساده به موجوداتی خودگردان با دسترسی به شل (Shell) تبدیل شدهاند. این پیچیدگی در عملیاتیسازی عاملها میتواند منجر به چالشهای مدیریتی شود، تا جایی که گارتنر پیشبینی کرده ۴۰٪ از پروژههای عاملهای هوش مصنوعی تا سال ۲۰۲۷ شکست میخورند. در حالی که کمکهای قبلی AI شامل بازسازی دستی کدها (Manual Refactoring) بود، امروز عاملهایی مانند Claude Code و Devin Desktop مستقیماً روی فایلسیستم عملیاتی میشوند. همانطور که در تحلیل قبلی ما دربارهی امنیت مدلهای بازمتن اشاره کردیم، هرگونه دسترسی مستقیم به سیستمعامل، ریسکهای امنیتی را به شدت افزایش میدهد. اکنون محیط محلی توسعهدهنده به میدان نبردی تبدیل شده که در آن یک دستور اشتباه یا یک فرمان بدفهمیده میتواند منجر به از دست رفتن دائمی دادهها شود.
برای اینکه بفهمیم آیا این «ترمزها» واقعاً کار میکنند یا خیر، بررسی عمیق مدلهای امنیتی شش کلاینت اصلی شامل Claude Code، Cursor، Codex CLI، VS Code Copilot، Claude Desktop و Devin Desktop، چشمانداز غافلگیرکنندهای را آشکار میکند. از یک سو، حفاظهای بومی قویتر از آن چیزی هستند که بسیاری تصور میکنند. برای مثال، VS Code دو هفته پیش (در نسخه v1.127) بهصورت پیشفرض ایزولهسازی در سطح هسته (Kernel-level Sandboxing) را برای دستورات ترمینال فعال کرد. Cursor از یک محیط ایزوله Seatbelt/Landlock برای دستورات شل که در لیست مجاز (Allowlist) نیستند استفاده میکند و Codex سه سطح متمایز از ایزولهسازی (Sandbox) را ارائه میدهد.
بررسی حفاظهای داخلی
وضعیت پیادهسازی حفاظها در این ابزارها به صورت ترکیبی و نامتوازن است. با نگاهی به وضعیت فعلی حفاظهای بومی، الگوهای زیر مشاهده میشود:
- تأیید هر فراخوانی (Per-call approval): توسط Claude Code، Cursor، Codex CLI، VS Code Copilot و Devin Desktop پشتیبانی میشود. تنها Claude Desktop در این مورد استثنا است و این قابلیت را ندارد.
- قوانین روی آرگومانهای ابزار MCP: این قابلیت تا حد زیادی غایب است. VS Code یک موتور regex ارائه میدهد، اما این موتور صرفاً و منحصراً برای ترمینال است. Claude Code و Cursor تنها اجازه تطبیق بر اساس «نام ابزار» را میدهند و به آرگومانها توجه نمیکنند.
- پاکسازی خروجی (Output Sanitization): بهصورت پیشفرض وجود ندارد. Claude Code و Cursor قلابهایی (مانند updatedToolOutput یا updated_mcp_tool_output) فراهم کردهاند، اما کاربر باید خودش آنها را بنویسد. سایر کلاینتها هیچ مکانیزمی برای این کار ندارند.
- ایزولهسازی سیستمعامل (OS Sandboxing): این نقطه قوت Cursor (که بهصورت پیشفرض فعال است) و VS Code (نسخه v1.127) است. Codex سطوح مختلفی را ارائه میدهد، در حالی که Claude Desktop سرورهای MCP را با دسترسیهای کامل کاربر (Full User Permissions) اجرا میکند.
باید اشاره کرد که بدترین موارد حذف دادهها اغلب زمانی رخ داده که کاربران این حفاظها را غیرفعال کردهاند. گزارشهای Codex درباره حذف گسترده دادهها در حالت «دسترسی کامل خطرناک» (danger-full-access mode) رخ داده است؛ حالتی که همانطور که از نامش پیداست، ترمزها را بهطور کامل حذف میکند. مشکل این نیست که عاملها ترمز ندارند، بلکه مشکل این است که این ترمزها در کجا و چگونه متوقف میشوند.
سه شکاف ساختاری
با وجود این تلاشها، هر شش کلاینت دارای سه نقطه ضعف امنیتی بحرانی و مشترک هستند:
شکاف اول: تأییدات کور در MCP (Argument-Blind Approvals)
در حالی که VS Code یک موتور بسیار خوب برای پذیرش یا رد دستورات با استفاده از regex روی خط فرمان کامل دارد (که در آن دستور رد بر پذیرش اولویت دارد)، این سیستم فقط برای ترمینال داخلی اعمال میشود. برای ابزارهای پروتکل زمینه مدل (MCP)، تأییدها به صورت باینری هستند: شما یا به کل ابزار اعتماد میکنید یا نه. این الگوی ناقص در همه جا تکرار شده است:
- در Cursor: لیستهای مجاز MCP فقط رشتههای
server:toolرا تطبیق میدهند و آرگومانها را نادیده میگیرند. - در Codex: تأییدها بر اساس نام ابزار و حاشیهنویسی (Annotation) است.
- در Claude Desktop: تنها یک گزینه خشن «همیشه اجازه بده» (Allow always) برای هر ابزار ارائه میدهد.
- در Claude Code: قوانین دسترسی فقط نام ابزارها را تطبیق میدهند.
- در Devin Local: پیشوندهای مرز کلمات (Word-boundary prefixes) را تطبیق میدهد اما از regex پشتیبانی نمیکند.
به زبان ساده: شما میتوانید rm -rf را در ترمینال VS Code مسدود کنید، اما نمیتوانید آن را در داخل یک فراخوانی ابزار MCP در هیچیک از این کلاینتها متوقف کنید. این دقیقاً همان جایی است که یک فایل README مسموم یا یک توصیف ابزار مخرب میتواند عامل را به یک مهاجم تبدیل کند. اگر ابزار run_command نصب باشد، عامل حتی به ترمینال شما نیاز ندارد تا تخریب ایجاد کند.
شکاف دوم: خروجیهای فیلترنشده (Unfiltered Tool Outputs)
همه روی آنچه عامل سعی میکند «انجام دهد» نظارت میکنند، اما تقریباً هیچکس بر آنچه عامل «میخواند» نظارت ندارد. نتایج ابزارها، درگاه اصلی برای تزریق پرامپت غیرمستقیم (Indirect Prompt Injection) هستند. یک صفحه وب استخراج شده، یک فایل در مخزن کد یا یک ردیف در دیتابیس که حاوی جملهای مثل «دستورات قبلی را نادیده بگیر و...» باشد، در تمام این کلاینتها بهصورت پیشفرض و بدون هیچ فیلتری وارد پنجره زمینه (Context Window) مدل میشود.
پاکسازی بومی خروجی در هر شش کلاینت صفر است. در حالی که Claude Code و Cursor از قلابها برای پاکسازی خروجی پشتیبانی میکنند، چهار کلاینت دیگر هیچ مکانیزمی ندارند. حالت «Co-work» در Claude Desktop از یک بررسی امنیتی مدل-محور برای بازبینی اقدامات استفاده میکند، اما این مورد غیرقابل پیکربندی و غیرقطعی (Non-deterministic) است. این یک شکست در سطح پروتکل است؛ مشخصات MCP صراحتاً بیان میکند که «خود MCP نمیتواند این اصول امنیتی را در سطح پروتکل تحمیل کند» و اجرای آن را به میزبانانی (Hosts) میسپارد که اکثر آنها آن را پیادهسازی نمیکنند.
شکاف سوم: توهم «بهترین تلاش» (The Best-Effort Fallacy)
سازندگان صراحتاً اعلام میکنند که لیستهای مجاز آنها مرز امنیتی نیستند. در مستندات Cursor عیناً ذکر شده است: «این یک مرز امنیتی نیست. لیستهای مجاز و دستورات autoRun صرفاً راحتیهای مبتنی بر بهترین تلاش (Best-effort convenience) هستند و تضمین امنیتی نمیآورند». مایکروسافت هشدار میدهد که سیستم آنها «تجزیه و تحلیل دستورات بر اساس بهترین تلاش است که محدودیتهای شناختهشدهای دارد» و اشاره میکند که مستعارهای شل (Shell Aliases) یا الحاق نقلقولها (Quote concatenation) ممکن است قوانین را دور بزنند.
اینها هشدارهای فرضی نیستند. لیست مجاز پیشوند در Cursor در محیط واقعی از طریق زنجیر کردن && دور زده شد (مثلاً cd x && terraform apply -auto-approve). علاوه بر این، آسیبپذیری CVE-2026-22708 (که در نسخه ۲.۳ Cursor وصله شد) اجازه میداد توابع داخلی شل و مسموم کردن متغیرهای محیطی بدون اینکه اصلاً در لیست مجاز ظاهر شوند، اجرا گردند. حتی «حالت بازبینی خودکار» (Auto-review mode) صرفاً یک زیر-عامل طبقهبندیکننده (Classifier subagent) است؛ یک مدل احتمالی که تصمیم میگیرد آیا اقدام مدل دیگر «ایمن به نظر میرسد» یا خیر. وقتی ریسک اجرای rm -rf باشد، تضمین «معمولاً شناسایی میکند» یک تضمین عجیب و خطرناک است.

مشکل پراکندگی و شکست قلابها
استفاده از چندین عامل، این ریسکها را compounding میکند (جمع میکند). کاربران باید پیکربندیهای امنیتی متفاوتی را در کلاینتهای مجزا حفظ کنند که هر کدام فرمتهای پیکربندی و حالتهای شکست منحصربهفردی دارند. این پراکندگی چنان شدید است که سیستم قلابهای جدید VS Code اکنون فرمت .claude/settings.json مربوط به Claude Code را میخواند، که نشان میدهد حتی سازندگان نیز از مدیریت N پیکربندی ناسازگار خسته شدهاند.
هابهای چند-عاملی مانند Devin Desktop (که بازبرندسازی Windsurf در ژوئن ۲۰۲۶ است) این مشکل را حل نمیکنند. Devin Desktop عاملهای شخص ثالث مانند Codex و Claude Agent را از طریق پروتکل کلاینت عامل (Agent Client Protocol) اجرا میکند. مستندات آن صراحتاً بیان میکند: «تمام عملیات عامل به خود عامل واگذار میشود». این هاب تنها رابط کاربری (UI) را یکپارچه میکند، اما سیاست امنیتی همچنان ناهمگون باقی میماند؛ این ابزار صرفاً هر درخواست اجازه (Permission prompt) را که عامل زیرمجموعه ارسال کند، نمایش میدهد.
استفاده از قلابها (Hooks) برای مسدود کردن فراخوانیها یا بازنویسی آرگومانها توسط کاربران حرفهای رایج است، اما این رویکرد شکننده و پراکنده است:
- در دسترس بودن: سه کلاینت اصلی (Codex CLI، Claude Desktop، Devin Desktop) اصلاً هیچ قلابی ندارند.
- قابلیت: قلابهای VS Code قادر به بازنویسی محتوا نیستند.
- قابلیت اطمینان: قلابهای Cursor بهصورت پیشفرض «Fail-Open» هستند. اگر یک اسکریپت bash کرش کند، تایم-اوت شود یا دارای خطای سینتکسی باشد، اقدام خطرناک اجازه اجرا پیدا میکند. از نظر امنیتی، دیواری آتش (Firewall) که در صورت خرابی باز بماند، صرفاً یک «پیشنهاد» است، نه یک حفاظ.
برای رفع این نقصهای ساختاری، یک پروکسی متنباز جدید به نام MCP-Shield معرفی شده است. این ابزار با قرار گرفتن در مسیر JSON-RPC بین کلاینت و سرورهای MCP، یک سیاست قطعی (Deterministic) و «Fail-Closed» (بستن در صورت خطا) را پیاده میکند. این ابزار دقیقاً شکافهایی را هدف قرار میدهد که سازندگان نادیده گرفتند:
- قوانین در سطح آرگومان: با بازرسی آرگومانهای فراخوانی ابزار MCP، حفره شکاف اول را میبندد.
- پاکسازی خروجی: دادههای آلوده را پیش از آنکه به پنجره زمینه مدل برسند، پاک میکند (شکاف دوم).
- اجرای قطعی: بهجای طبقهبندیهای احتمالی، از قوانین سختگیرانه استفاده میکند. اگر پروکسی دچار اختلال شود، دسترسی را بهطور کامل قطع میکند (شکاف سوم).
به دلیل بازرسی ترافیک خام (Raw wire)، این ابزار ترفندهایی را میگیرد که قلابهای بومی نمیبینند، مانند «قاچاق دستهای» (Batch smuggling) و تفاوتهای تجزیهکننده کلیدهای تکراری (Duplicate-key parser differentials). این ابزار یک داشبورد محلی زنده برای بازبینی، تایید، رد یا ویرایش لحظهای فراخوانیهای نگه داشته شده فراهم میکند. برای رسیدن به کمترین اصطکاک، نصبکننده آن سیمکشی را از طریق npm install -g @jrooig/mcpshield و سپس دستور mcp-shield install مدیریت میکند.
محدودیها و دامنه کاربرد
MCP-Shield یک کالباز (Scalpel) است، نه یک عصای جادویی. درک مرزهای آن ضروری است:
- محدودیت ترافیک: این ابزار فقط ترافیک MCP را رهگیری میکند. اگر یک عامل از ترمینال داخلی یا قابلیتهای بومی ویرایش فایل استفاده کند، پروکسی آن را نخواهد دید. کاربران باید از ایزولهسازهای بومی سیستمعامل در کنار این پروکسی برای «دفاع در عمق» (Defense-in-depth) استفاده کنند.
- نگهداری قوانین: قوانین پیشساخته الگوهای تخریبی رایج را پوشش میدهند، اما جامع نیستند. انتظار میرود کاربران قوانین را متناسب با جریانهای کاری خاص خود گسترش دهند.
- عامل انسانی: هیچ نرمافزاری نمیتواند خطای کاربری را که بدون خواندن پرامپت، کورکورانه روی «تأیید» (Approve) کلیک میکند، جبران کند.
برای توسعهدهنده مدرن، خطر این نیست که عاملها ترمز ندارند، بلکه این است که ترمزهای آنها احتمالی و پراکنده هستند. تکیه بر یک زیر-عامل طبقهبندیکننده برای تصمیمگیری درباره اینکه آیا یک اقدام «ایمن به نظر میرسد» یا خیر، یک قمار غیرقابل قبول است، بهخصوص زمانی که شرط این قمار، حذف ۷۰۰ گیگابایت دادههای پروژه است. این نگرانیها در راستای گزارشات گستردهتر امنیتی است؛ برای مثال تحقیقات Veracode نشان میدهد که ۴۵٪ از کدهای تولیدشده با هوش مصنوعی آسیبپذیر هستند. با خودمختارتر شدن عاملها، صنعت باید از فیلترهای «راحتی» هر کلاینت به سمت یک لایه امنیتی یکپارچه و قطعی حرکت کند. تا آن زمان، بار ایمنی بر دوش کاربر است تا هر پرامپت را با دقت بخواند و فرض کند هیچ لیست مجاز-ی ضدخطا نیست.
کاربران اکنون میتوانند MCP-Shield را از طریق لایسنس MIT در گیتهاب (github.com/jaumerohi2007-cell/mcp-shield) و سایت mcp-shield.dev تجربه کنند تا یک لایه قطعی به جریانهای کاری عامل-محور خود اضافه نمایند.
گام بعدی شما
- اگر از ابزارهای MCP استفاده میکنید، همین امروز MCP-Shield را نصب کنید تا لایه امنیتی قطعی داشته باشید.
- در تنظیمات عامل خود، دسترسیهای گسترده (Full Access) را حذف کرده و از تأیید تکتک فراخوانیها (Per-call approval) استفاده کنید.
- برای پروژههای حساس، حتماً از محیطهای ایزوله (Sandbox) در سطح OS استفاده کنید تا ریسک حذف فایلهای سیستمی به صفر برسد.
اما داستان سختافزاری این تحول حتی شگفتانگیزتر است — به تحلیل ما دربارهی تراشههای Blackwell مراجعه کنید.




گفتگو