چرا نباید به Trusted Publishing اعتماد کنی
خلاصهٔ کاملتر
نویسنده که خودش از سازندگان این قابلیت روی PyPI بوده، از همون اول یک نکته رو روشن میکنه: اسمِ Trusted Publishing گولزنندهست. این «اعتماد» برای ماشینهاست، نه برای تو و من. اگه کسی له یا علیهِ Trusted Publishing استدلال کنه با این استدلال که «من (یک انسان) میتونم یا نمیتونم بهش اعتماد کنم»، داره یک خطای مقولهای مرتکب میشه.
به گفتهٔ نویسنده، Trusted Publishing یک روش احراز هویت روی فدراسیونِ OpenID Connect (OIDC) هست که PyPI سال ۲۰۲۳ عرضه کرد و بعدش npm، RubyGems، crates.io و NuGet هم پذیرفتنش. ایدهش از دو مشاهده میاد: اول اینکه توکنهای بلندعمر سخت امن میشن و معمولاً over-scoped هستن، پس نشتِ یکیشون میتونه آسیب گسترده بزنه؛ دوم اینکه خیلیها فقط برای گذاشتن توکن تو CI/CD اون رو میسازن، در حالیکه خودِ CI/CD میتونه هویت ماشینیش رو با OIDC اثبات کنه.
مکانیزمش اینه: کاربر یکبار «publisherِ مورد اعتماد» (همون هویت ماشینیِ CI/CD) رو ثبت میکنه، و بعد هر وقت CI/CD یک توکن هویتی ارائه بده، ایندکس بررسیش میکنه و یک اعتبارِ انتشارِ کوتاهعمر و کمدامنه صادر میکنه. نویسنده میگه این رویکردِ اعتبارِ کوتاهعمر و self-scoping در عمل موفق بوده، چون کاربرها ترجیح میدن اعتبار رو دستی مدیریت نکنن و انتشار به هویت منبع گره میخوره نه به یک maintainer خاص.
ولی نکتهٔ محوریِ مقاله اینجاست: Trusted Publishing فقط احراز هویته. تنها کاری که میکنه اینه که یک رابطهٔ اعتماد بین هویت ماشینیِ بیرونی و هویتِ پکیج رویِ ایندکس، صرفاً برای احراز هویتِ آپلود، برقرار کنه؛ به تو نمیگه پکیج امنه، باکیفیته یا هر چیز دیگه. چون PyPI عمومیه، هرکسی میتونه آپلود کنه و هرکسی میتونه از Trusted Publisher استفاده کنه، حتی برای آپلودِ بدافزار یا کدِ آسیبپذیر؛ دقیقاً مثل توکنهای API.
به گفتهٔ نویسنده، PyPI خیلی حواسش هست که کاربر رو گمراه نکنه: تو صفحهٔ پروژه هیچ «تیک سبز جادویی» برای وضعیت Trusted Publishing نیست. تنها تیک سبز مربوط به لینکهاییه که PyPI میتونه اثبات کنه از همون منبعِ پکیج اومدن، و اون هم صراحتاً «trusted» توصیف نمیشه. اگه بخوای وضعیت Trusted Publishing یک فایل رو ببینی، باید عمیقاً تو جزئیاتِ فایل دنبال یک «Yes/No» ساده بگردی، که عمداً بیاهمیت رندر شده.
نویسنده یادآوری میکنه که attestationها هم موضوع فنی جداگانهای هستن ولی مثل خودِ Trusted Publishing نشانهٔ اعتماد نیستن؛ چون هرکسی میتونه با هویت ماشینیِ خودش امضا کنه، وجودِ یک attestation تا وقتی جداگانه به اون هویت اعتماد نکردی، اعتمادِ کاربر رو تضمین نمیکنه. جمعبندیش اینه: Trusted Publishing یک ابزار امنیتی مفیده برای کمکردنِ اعتبارهای بلندعمر، ولی نباید بهعنوان معیار امنبودنِ پکیج ازش سوءبرداشت بشه.
نکات کلیدی:
- Trusted Publishing فقط احراز هویت ماشینبهماشین با OIDC هست، نه نشان کیفیت یا امنیتِ پکیج
- جای توکنهای بلندعمر و over-scoped رو با اعتبارِ کوتاهعمر و کمدامنه میگیره
- در PyPI، npm، RubyGems، crates.io و NuGet پذیرفته شده
- هرکسی میتونه ازش استفاده کنه، پس برای آپلود بدافزار هم قابل استفادهست
- PyPI عمداً هیچ «تیک سبز اعتماد»ی نشون نمیده تا سوءبرداشت نشه
- attestationها هم بهتنهایی نشانهٔ اعتماد نیستن




