شکار باگهای SAML با Claude Opus
خلاصهٔ کاملتر
نویسنده که سابقهی کار روی SAML (یه پروتکل قدیمی برای ورود یکپارچه، یا SSO) رو داره میگه این پروتکل به خاطر پیچیدگی XML Digital Signature همیشه مستعد باگ بوده و تقریباً هر کتابخونهای که باهاش کار کرده، یه جایی دور زدن کامل احراز هویت (auth bypass) داشته. بعد از خوندن یه مقاله دربارهٔ پیدا کردن حفرههای امنیتی با مدلهای زبانی، اون از طریق برنامهٔ Cyber Verification آنتروپیک به یه نسخهٔ بدون محدودیت Claude Opus دسترسی گرفته و تصمیم گرفته ادعای «SAML یه پروتکل بده» رو با شواهد ثابت کنه.
هارنسی که ساخته دو فاز داره: فاز «gadget» که دنبال رفتارهای عجیب توی کتابخونههای XML میگرده، و فاز «finding» که چندتا gadget رو ترکیب میکنه و با نوشتن یه اکسپلویت سر-به-سر (end-to-end) تأییدشون میکنه. نتیجهها توی فایلهای JSONL ذخیره میشن و مراحل بعدی روشون فیلتر و اولویتبندی انجام میدن. نویسنده میگه جالبترین یافته این بوده که لازم نبوده به Claude یاد بده چطور هک کنه؛ فقط با دادن یه مدل تهدید (threat model) و آزادی کاوش، نتیجه بهتر از دادن نمونه باگهای قبلی بوده.
با این روش، نویسنده توی چهار پروژه - Authentik، کتابخونهٔ PHP به اسم litesaml/lightsaml، پروژهٔ OneUptime و کتابخونهٔ جاوای saml-client - باگ ورود-به-جای-هرکسی پیدا کرده. مکانیزم غالب این بود که با گنجوندن یه دستورالعمل پردازش (processing instruction) توی فیلد NameID، بخشی از ایمیل کاربر قانونی حذف میشه و پیام امضاشده هنوز معتبر به نظر میرسه، در حالی که ایمیل واقعی فرق کرده - یعنی مهاجم میتونه بهجای یه کاربر دیگه لاگین کنه.
علاوه بر این، توی دهها پروژهٔ دیگه (از جمله samlify توی TypeScript) باگهای دور زدن امضا روی پیامهای کمتر بررسیشده مثل AuthnRequest و LogoutRequest هم پیدا شده که منجر به افشای اطلاعات و خروج اجباری کاربر میشن.
مشکل بعدی، منع سرویس (DoS) بود: چون SAML باید هر سند XML دلخواهی رو که کاربر ناشناس میفرسته پردازش کنه، اکثر کتابخونههای اصلی در برابر مصرف حافظهٔ بیرویه آسیبپذیر بودن. توی Go این مشکل با یه پچ حل شده، ولی به گفتهٔ نویسنده کتابخونههای پایتون و Node هنوز این باگ رو دارن، چون فیلتر کافی روی نوع تبدیلهای XML که به موتور پردازش پاس داده میشه اعمال نمیکنن.
نویسنده میگه گزارش دادن این باگها این روزها سختتر شده، چون نگهدارندههای متنباز زیر سیل گزارشهای واقعی و جعلی (که خودشون هم محصول هوش مصنوعیان) خفه شدن؛ یکی از شرکتها حتی ازش فیلم اسکرینرکورد خواسته تا مطمئن بشه گزارش واقعیه. توی پروژهٔ OneUptime هم هر بار که یه باگ گزارش کرده، یه PR بزرگ و خودکار (بدون تأیید انسانی) اومده که ادعا کرده مشکل رو حل کرده - ولی سه بار پشت سر هم باگ جدیدی جاش مونده، که نشون میده مدلهای زبانی توی نوشتن کد امن SAML هم مثل پیادهسازیهای انسانی مشکل دارن.
نکات کلیدی:
- نتیجهٔ یه هارنس مبتنی بر Claude Opus: باگ ورود-به-جای-هرکسی توی Authentik، litesaml/lightsaml، OneUptime و saml-client جاوا.
- مکانیزم غالب، سوءاستفاده از پردازش «processing instruction» توی فیلد NameID برای جا زدن ایمیل یه کاربر دیگه بوده.
- باگهای DoS ناشی از پردازش نامحدود XML هنوز توی کتابخونههای پایتون و Node برطرف نشدن.
- نویسنده تأکید میکنه پیادهسازی دستی SAML همچنان پرخطره و بهتره بهجاش از OpenID Connect استفاده بشه.




