یک بستهٔ مخرب کوچک میتواند هشارهای امنیتی جعلی را در خروجی عامل هوش مصنوعی شما بپاشد و شما را متقاعد کند که به یک محیط آلوده اعتماد کنید. در ۷ آگوست ۲۰۲۶، توسعهدهندهای به نام Cor (Skyblue Soft) ابزار claude-hookscanner را منتشر کرد تا با این نوع خاص از حملات زنجیره تأمین که عاملهایی مثل Claude Code و VS Code را هدف قرار میدهند، مقابله کند.
این آسیبپذیری از یک نقص بنیادین در نحوه مدیریت «اعتماد» در ابزارهای عاملمحور ناشی میشود. در حال حاضر، اعتماد یک تصمیم کلی و سطحپایین است؛ یعنی وقتی شما به یک پوشه اعتماد میکنید، عامل فرض میکند تمام هوکها (Hooks) — که شبیه به دکمههای میانبری هستند که در شرایط خاص یک دستور را اجرا میکنند — و پیکربندیهای داخلی آن مشروعاند. دقیقاً همانطور که یک کرم npm سنتی ممکن است برای سرقت اعتبارنامهها طراحی شده باشد، کرمهای مدرن هوش مصنوعی از این هوکها استفاده میکنند تا در لحظاتی مانند شروع نشست (SessionStart) یا باز کردن پوشه (folderOpen) فعال شوند و با بهرهبرداری از اعتماد موجود در ویرایشگر، کدهای مخرب خود را اجرا کنند.
همانطور که در پوشش پیشین ما از امنیت مدلهای بازمتن دیدیم، اعتماد بیش از حد به ورودیهای سیستمی همواره نقطه ضعف اصلی بوده است. این چالش با یافتههای اخیرمان همسو است که نشان داد بسیاری از مخازن پیشرو در حوزه AI دارای لایههای دستوری پنهانی هستند که میتوانند مسیر اجرای دستورات را تغییر دهند. Cor اشاره میکند که اگر اعتماد به فضای کاری و اعتماد به وابستگیها هر دو تصمیماتی کلی و یکباره باشند، اضافه شدن محرکهای خودکار جدید بر روی این لایه اعتماد باعث میشود مفهوم «اعتماد به محیط» معنای خاص خود را کاملاً از دست بدهد. مشکل اصلی این است که یک بسته مخرب میتواند پیکربندی هوک را در لایههای عمیق وابستگیها (مثلاً سه پوشه پایینتر در یک وابستگی گذرا یا Transitive Dependency) پنهان کند؛ تکنیکی که در آن پیکربندیهای قابل اجرا در node_modules مخفی میشوند، جایی که هیچ انسانی انتظار دیدن یا بررسی آنها را ندارد.

به نقل از مستندات پروژه، این شکاف زمانی کشف شد که Cor یک یادداشت امنیتی جعلی را در خروجی ابزار خودش دید. او پیشتر یک هوک PreToolUse به Claude Code اضافه کرده بود تا نصب بستهها را در برابر یک اسکنر بررسی کند. در حین یک آزمایش، خروجی ابزار ادعا کرد که یک بسته در بررسی ثبت (Registry Check) شکست خورده و به او توصیه کرد که آن را حذف کند. اما در واقعیت، هیچ بستهای در آن لحظه نصب نشده بود؛ دستوری که اجرا شده بود صرفاً یک بررسی سینتکس ساده با استفاده از ast.parse و bash -n بود.
او در ابتدا تصور کرد با یک «باگ تجزیه» (Parsing Bug) در هوک خودش مواجه است. اما وقتی دقیقاً همان دستور را از طریق کد واقعی هوک بازپخش کرد، متوجه شد که هیچ هدفی یافت نشده است و در واقع هوک او اصلاً اجرا نشده بود. این کشف تکاندهنده بود: چیزی دیگر یک هشدار امنیتی جعلی را در خروجی ابزار تزریق کرده بود تا وانمود کند کد خود اوست. این اتفاق یک شکست بحرانی را برجسته کرد: اگر یک توسعهدهنده نتواند با اطمینان تفاوت بین کد خودش و یک کد تزریقی (Plant) را تشخیص دهد، یک بررسی روتین وابستگیها قطعاً نمیتواند این کار را انجام دهد.
طبق اعلام سازنده، claude-hookscanner برای حل این مشکل، لایهای از اعتبارسنجی را پیاده میکند تا مفهوم «امضا نشده» معنای عملی و دقیق پیدا کند. این ابزار از اعتماد ضمنی فاصله گرفته و به سمت مدلی از تأیید صریح حرکت میکند:
- امضای HMAC: هر هوک نوشته شده توسط کاربر با استفاده از HMAC-SHA256 و یک کلید مخفی (Shared Secret) که در هنگام نصب تولید میشود، امضا میگردد. این کلید در یک مکان تصادفی و غیرثابت ذخیره میشود تا از دسترسی کدهای مخرب عمومی که از مسیرهای پیشبینیپذیر برای یافتن کلید استفاده میکنند، جلوگیری شود.
- کامنتهای نگهبان (Sentinel): یک کامنت به شکل
# sentinel-hmac: <hex>مستقیماً در اسکریپت جاسازی میشود. از آنجایی که مهاجمی که فقط قادر به ریختن فایلها روی دیسک است، هیچ راهی برای دسترسی به کلید مشترک ندارد، نبود یا اشتباه بودن این امضا بهطور قابل اعتمادی نشاندهنده یک اسکریپت تزریقی است. - پرچمهای اکتشافی (Heuristics): برای فایلهای شخصثالث که امکان امضای HMAC برای آنها نیست، ابزار از تحلیلهای اکتشافی استفاده میکند:
- هرگونه پیکربندی
.claudeکه در داخل پوشهnode_modules/یافت شود، علامتگذاری میشود. - دستورات هوکی که با الگوهای پرریسک (مانند
curl | bashیاevalیاbase64 -d) مطابقت دارند، علامتگذاری میشوند. - اسکریپتهای هوکی که خارج از دایرکتوری مورد انتظار هوکها اجرا یا حل (Resolve) میشوند، علامتگذاری میگردند.
- هرگونه پیکربندی
- لیست سفید هش محتوا (Content-Hash Ack-list): کاربران میتوانند لیستی از هشهای محتوایی برای مواردی که خودشان سالم تشخیص دادهاند نگه دارند. این کار باعث میشود در هر بار اسکن، نیازی به بررسی مجدد بقایای وابستگیهای تکراری نباشد.
- یادآوریهای پس از نوشتن (Post-Writing Nudges): ابزار یک یادآور
PostToolUseرا پیاده میکند که به محض نوشته شدن یک هوک، به عامل یادآوری کند آن را امضا کند. این کار بازه زمانیای را که در آن یک هوک جدید از یک هوک مخرب غیرقابل تشخیص است، حذف میکند.
این رویکرد مدل امنیتی را به طور کلی از «اعتماد به فضای کاری» به «اعتماد به امضا» تغییر میدهد. برای تقویت این لایهی دفاعی، توصیه میشود تنظیمات حیاتی برای جلوگیری از دور زدن حفاظهای امنیتی در Claude Code را نیز در کنار این ابزار پیادهسازی کنید.
البته این ابزار یک راهکار مطلق یا «گلوله نقرهای» نیست. Cor تأکید میکند که این ابزار برای مقابله با کرمهای فرصتطلب زنجیره تأمین طراحی شده است؛ یعنی آن دسته از کدهای مخربی که بهصورت انبوه توزیع میشوند و برای پایین نگه داشتن هزینهها، تنها لیست کوتاهی از مسیرهای شناخته شده را بهصورت سختافزاری (Hardcode) هدف قرار میدهند. این سیستم طراحی نشده است تا جلوی یک مهاجم هدفمند را بگیرد که مستندات را خوانده و میداند دقیقاً باید دنبال چه کلیدی بگردد.
یک فایل ۶۴ کاراکتری هگزا در دایرکتوری هوکها، صرفنظر از نامش، از نظر شکل و مکان قابل شناسایی است. علاوه بر این، اگر یک میزبان بهطور کامل در سطح Root مورد تهاجم قرار گرفته باشد، کل این طرح شکست میخورد، زیرا کاربر Root میتواند کلید HMAC را بخواند. او صریحاً هشدار میدهد که «بالا بردن سطح دشواری در برابر حملات عمومی» با «شکستناپذیر بودن» (Unbreakable) یکسان نیست.
برای جامعه توسعهدهندگان، این یک چرخش در مدل تهدیدات عاملهای هوش مصنوعی است؛ جایی که خودِ عامل به بردار اصلی اجرای حملات پیچیده و ماندگار زنجیره تأمین تبدیل میشود. در واقع، این ابزار مکمل حفاظهای فنی برای جلوگیری از تخریب مخازن توسط عاملها است تا ریسکهای اجرای خودکار کد کاهش یابد.
اگر از لینوکس (از جمله نسخه WSL برای ویندوز) استفاده میکنید، میتوانید این دفاع را با کلون کردن مخزن https://github.com/c0ri/claude-hookscanner.git و اجرای دستور ./install.sh مستقر کنید. این اسکریپت تمام مراحل جایگذاری کلید، پشتیبانگیری و اتصال هوک یادآور به فایل ~/.claude/settings.json را مدیریت کرده و فوراً یک اسکن اولیه انجام میدهد. همچنین یک پرچم --uninstall دارد تا کاربر نیازی به به خاطر سپردن مکان تصادفی کلید برای حذف آن نداشته باشد.
گام بعدی شما
- اگر از Claude Code یا ابزارهای مشابه برای مدیریت پروژهها استفاده میکنید، سریعاً مخزن مذکور را بررسی و نصب کنید.
- تمام هوکهای موجود در پوشه
.claudeرا بازبینی کرده و هر مورد مشکوک درnode_modulesرا حذف کنید. - در اسکریپتهای خود از امضاهای دیجیتال برای توابع حساس استفاده کنید تا از تزریق کدهای Third-party جلوگیری شود.
این تنها آغاز ماجراست؛ اثر موجگونهی این تصمیم بر اکوسیستم متنباز و امنیت عاملها را در گزارش بعدی بررسی خواهیم کرد.




گفتگو