اگر برای کدنویسی از ابزارهای هوش مصنوعی استفاده میکنید، احتمالاً تصور میکنید اجرای مدل روی سیستم شخصی، امنیت کدهای شما را تضمین میکند. اما یافتههای جدید نشان میدهد که یک لایه نرمافزاری ساده میتواند تمام این حریم خصوصی را به بازی بگیرد.
در ۱۸ سپتامبر ۲۰۲۶، پژوهشگری به نام ferstar کشف کرد که ZCode — اپلیکیشن دسکتاپ کدنویسی شرکت Z.ai — به طور مخفیانه کل فضای کاری محلی کاربران را به ابر منتقل میکند. این ابزار تنها یک کپی از فایلهای باز را نمیفرستد؛ بلکه تمام تاریخچه .git را بستهبندی میکند. این بسته شامل کلیدهای API که پیشتر حذف شدهاند و شاخههایی (branches) است که هنوز به سرور ارسال نشدهاند. تمام این دادهها به Aliyun OSS (سرویس ذخیرهسازی ابری علیبابا) آپلود میشوند.
این کشف در لحظهای حساس برای جامعه هوش مصنوعی محلی رخ میدهد. بسیاری از توسعهدهندگان از خانواده مدلهای وزنهای باز (Open Weights) شرکت Z.ai، مانند GLM-5.3-Flash استفاده میکنند و بر این باورند که اجرای وزنهای مدل به صورت محلی، حریم خصوصی را تضمین میکند. این موضوع در حالی رخ میدهد که شرکت Z.ai پیشتر انتشار وزنهای GLM-5.3 را به دلیل خطرات امنیتی متوقف کرده بود تا از سوءاستفادههای احتمالی جلوگیری کند. اما همانطور که این پرونده نشان میدهد، «هارنس» (Harness) — یعنی همان پوشش نرمافزاری که تعامل شما با مدل را ممکن میکند — میتواند یک جعبه سیاه بسته باشد که امنیت وزنهای بازی را که میزبانی میکند، از بین ببرد. این سردرگمی در فضای مجازی موج زده است؛ چندین کاربر در ابتدا تصور میکردند ZCode نیز متنباز است چون وزنهای GLM باز هستند. اما واقعیت این است که وزنها باز هستند، ولی هارنس بسته است و به عنوان یک ادغام درجه اول (first-party) تبلیغ شده که هیچ ویرایشگر شخص ثالثی نمیتواند با آن رقابت کند.
سازوکار استخراج دادهها
به نقل از مستندات فارنزیک منتشر شده توسط ferstar، این اپلیکیشن از یک پردازش جانبی (sidecar) در سطح میزبان استفاده میکند که کاملاً مستقل از حلقه ابزارهای عامل (Agent) هوش مصنوعی عمل میکند. وقتی کاربر وارد حساب خود میشود، کلاینت از zcode.z.ai درخواست اعتبار میکند. سرور در پاسخ، کلیدهای عمومی RSA، امضاهای فرم OSS، یک کلید شیء (object key)، سقف حجم داده و یک کلید عمومی RSA برای هر دور ارتباطی را ارسال میکند. سپس اپلیکیشن فضای کاری را در یک آرشیو .tar.gz فشرده کرده و آن را با استفاده از الگوریتم AES-256-CTR رمزنگاری میکند.
نکته تکاندهنده این است که کلید متقارن مورد استفاده برای محموله (payload)، با یک کلید عمومی RSA-OAEP که توسط سرور ارائه شده، پوشانده (wrap) میشود. از آنجا که کلید خصوصی متناظر تنها در ابر Z.ai وجود دارد، کاربر نمیتواند فایل رمزنگاریشده ۳۱۳ مگابایتی را که روی دیسک خودش قرار دارد، رمزگشایی کند. ferstar تلاش کرد تا این آرشیو را با تمام کلیدهای خصوصی موجود در سیستم محلی باز کند اما شکست خورد. همانطور که او اشاره کرد، استفاده از کلیدی که فقط سرور به آن دسترسی دارد، تضمین میکند که فروشنده هر زمان که بخواهد میتواند کدهای شما را بخواند.
جزئیات خط لوله فنی
بر اساس بازسازی کدها از فایل app.asar کلاینت، خط لوله آپلود از یک توالی مشخص پیروی میکند:
- مذاکره اعتبار: کلاینت برای دریافت امضاها و کلید عمومی RSA با
zcode.z.aiتماس میگیرد. - بستهبندی محلی: فضای کاری به فرمت
tar.gzفشرده میشود. - رمزنگاری: محموله از طریق AES-256-CTR رمزنگاری شده و کلید متقارن پوشانده میشود.
- آپلود مستقیم: کلاینت آرشیو را مستقیماً از طریق متد POST به گرههای Aliyun OSS ارسال میکند.
- ثبت نهایی: Aliyun OSS یک بازگشت (callback) به بکاند Z.ai میفرستد تا اسنپشات ثبت شود.
در طول آزمایشها، کلاینت در حال اجرا اتصالات مداومی با zcode.z.ai و دو گره مجزای Aliyun OSS برقرار کرده بود. در یک مورد، پژوهشگر هنگام بررسی فرآیند، ۵۶۴ تلاش ناموفق برای آپلود را ثبت کرد.
چه دادههایی دزدیده میشوند؟
در تحلیل یک اسنپشات شامل ۴۲,۴۱۱ فایل، توزیع محموله ۳۱۳ مگابایتی بسیار تکاندهنده بود:
- .git/lfs/: ۱۹۶.۱ مگابایت (۵۶.۸٪)
- .git/objects/: ۱۰۲.۲ مگابایت (۲۹.۶٪)
- .git/logs/: ۰.۶ مگابایت (۰.۲٪)
- کد منبع و مستندات: ۴۶.۲ مگابایت (۱۳.۴٪)
از آنجا که دایرکتوری .git حدود ۸۶.۶٪ از حجم آپلود را تشکیل میدهد، شرکت به تمام تاریخچه پروژه از روز اول دسترسی پیدا میکند. این یک اسنپشات ساده از درخت کاری (working tree) نیست. این بسته شامل نامهای میزبان داخلی، مسیرهای مخزن از فایل .git/config و اعتبارنامههای حساس یا کلیدهای API است که ممکن است در کامیتهای بعدی حذف شده باشند اما همچنان در ذخیره اشیاء گیت (git object store) باقی ماندهاند. حتی نام شاخههای ارسالنشده که میتواند برنامههای محصولات منتشرنشده را فاش کند، استخراج میشود.
توهم کنترل
ferstar تنظیمات رابط کاربری (UI) را با کدهای زیرین مقایسه کرد و دریافت که دکمههای حریم خصوصی عملاً جنبه تزئینی دارند. سوئیچ «بهینهسازی تجربه» (optimizeAgentExperienceEnabled) تنها کنترل میکند که آیا دادهها برای آموزش مدل مجاز هستند یا خیر، اما تأثیری بر این ندارد که آیا دادهها آپلود میشوند یا نه. به همین ترتیب، گزینه «اندکسگذاری اسنپشات مخزن» (repoSnapshotIndexingEnabled) فقط تعیین میکند که آیا سرور پس از استخراج دادهها، آنها را فهرست (index) کند یا خیر.
لاگهای نشست (session logs) نشان داد که در یک جلسه فعال، ۶۲ رویداد کپچر (capture) رخ داده است که قبل از هر پرامپت و پس از اتمام هر تسک فعال میشدند. اسمبلی میزبان، پردازش جانبی کپچر را بدون هیچ شرطی در هنگام استارتآپ اجرا میکند؛ تنها پیشنیاز آن داشتن یک توکن JWT معتبر از ارائهدهنده توکن است.
معماری عامل در برابر میزبان
این خط لوله انتقال داده کاملاً از دید خودِ عامل هوش مصنوعی پنهان است. افشای پرامپت سیستمی ZCode از طریق OrcaPromptVault — که شامل یک پرامپت سیستمی ۱۳۱ کیلوبایتی و ۳۱ ابزار در دسترس ZCode است — نشان داد که اگرچه عامل میتواند فضای کاری را «به عقب برگرداند» (rewind)، اما هیچ ابزاری برای تلهمتری یا آپلود در اختیار ندارد. عبارت «Workspace rewind applied. rewindId, checkpointId, strategy, restoredFiles» پنج بار در پرامپت ظاهر شده است که نشاندهنده لایه ظاهری این خط لوله برای کاربر است.
از آنجا که استخراج دادهها در سطح میزبان (host level) رخ میدهد، عامل هرگز آن را نمیبیند. در میان ۱۳۱ کیلوبایت دستورالعملها، هیچ اشارهای به Aliyun، OSS یا آپلودها نشده است. علاوه بر این، ZCode ابزاری به نام ReadSessionContext را ارائه میدهد که نشستهای ذخیرهشده دیگر ZCode را از طریق ID میخواند؛ این یعنی محتوای نشستها هم به صورت محلی ذخیره شده و هم در ابر کپچر میشوند.
انکار شرکتی و واکنشها
شرکت Z.ai در ژوئیه ۲۰۲۶ ابزار ZCode را به عنوان جایگزینی مبتنی بر اعتماد برای Claude Code (متعلق به Anthropic) معرفی کرد که در آن زمان با جنجالهای تلهمتری روبرو بود. یکی از مدیران Z.ai پیشتر در X ادعا کرده بود که شرکت هیچ نرمافزار جاسوسی فراتر از آنچه در وبسایتشان ذکر شده، پیادهسازی نخواهد کرد. با این حال، اسنپشات گرفتن از فضای کاری در هیچکدام از سیاستهای حریم خصوصی، FAQ یا لیست تغییرات (changelog) ذکر نشده است. سیاستهای آنها تنها به جمعآوری «متن، فایلها و کدهایی که در طول گفتگو ارسال میشوند» اشاره دارد که برای کانتکست استنتاج (inference) استاندارد است.
شرکت Z.ai در ژانویه ۲۰۲۶ در بورس هنگکنگ عرضه شد. در حالی که حساب رسمی شرکت سکوت کرد، حسابی وابسته به تیم ZCode در پاسخ به یافتهها نوشت: «هی، متأسفم که اجازه دادم این را پیدا کنی». این اعتراف باعث ایجاد هشدار گسترده شد. پست ferstar در ۱۳ ساعت بیش از ۲۷۶ هزار بازدید داشت و رشتهتوییت هشدار FeiZ به زبان چینی ۶۳,۸۰۰ بازدید دیگر جذب کرد و به کاربران توصیه کرد «فعلاً ZCode را غیرفعال کنند» و از عاملهای متنباز استفاده کنند. پتری کویتینن، متخصص امنیت، هشدار داد: «توصیه من بوده و هست: هرگز به پوششهای بسته (closed source) هوش مصنوعی اعتماد نکنید».
چگونه آپلودها را متوقف کنیم
حذف آرشیو محلی بیفایده است، زیرا کلاینت در عرض ۳۰ دقیقه دادهها را دوباره بستهبندی کرده و شمارنده تلاش مجدد (retry counter) را افزایش میدهد. تنها راه حل قابل اعتماد، ایجاد یک قفل در سطح سیستمفایل روی دایرکتوری checkpoints است تا پردازش جانبی نتواند آرشیو را بنویسد.
در لینوکس:rm -rf ~/.zcode/v2/checkpointsmkdir -p ~/.zcode/v2/checkpointssudo chattr +i ~/.zcode/v2/checkpoints
در مک (macOS):rm -rf ~/.zcode/v2/checkpointsmkdir -p ~/.zcode/v2/checkpointschflags uchg ~/.zcode/v2/checkpoints
این کار قابلیت «بازگشت به چکپوینت» (checkpoint rollback) در رابط کاربری را غیرفعال میکند — قابلیتی که در وهله اول نیازمند آپلود کد شما بود — اما استخراج دادهها را متوقف کرده و در عین حال چت، تکمیل خودکار (autocomplete) و فراخوانی ابزارها را فعال نگه میدارد. شما میتوانید دایرکتوری را با دستور chattr -i یا chflags nouchg بازیابی کنید.
این حادثه ثابت میکند مدلی که به صورت محلی اجرا میشود اما در یک پوشش متصل به ابر قرار دارد، واقعاً محلی نیست. سطح اعتماد باید فراتر از وزنهای مدل، به محیط اجرا (runtime)، خط لوله بهروزرسانی و اسمبلی دسکتاپ گسترش یابد. برای توسعهدهندگان، درس روشن است: هارنس به اندازه خودِ مدل اهمیت دارد. این نگرانیها با الزامات جدید هسته لینوکس برای برچسبگذاری کدهای تولید شده توسط هوش مصنوعی همسو است که بر اهمیت شفافیت در منشأ کدها تأکید دارد.
اگر از هرگونه دستیار کدنویسی هوش مصنوعی استفاده میکنید، اکنون باید بررسی کنید که محیط اجرای شما هنگام ورود به حساب کاربری چه دادههایی ارسال میکند و تأیید کنید که چه کسی کلیدهای رمزگشایی حافظههای محلی (local caches) شما را در اختیار دارد.
اما داستان سختافزاری این تحول حتی شگفتانگیزتر است — به تحلیل ما درباره تراشههای Blackwell مراجعه کنید.




گفتگو