SAML، زیر کاپوت: امضا در دل نامه
SAML شما را تقریباً به هر برنامه کاری وارد میکند و امضای آن در دل XML که امضا میکند قرار دارد.
SAML شما را تقریباً به هر برنامه کاری وارد میکند و امضای آن در دل XML که امضا میکند قرار دارد. زیر کاپوت: رقص ورود بین برنامه، مرورگر و ارائهدهنده هویت، یک اظهارنامه چگونه به نظر میرسد، چرا Canonicalization باید بر سر هر بایت توافق کند، و چرا همان کلاس باگ از سال 2012 تا 2025 همچنان بازمیگردد. با الهام از «SAML: A fractal of bad design» از Trail of Bits (312 امتیاز در Hacker News).
نسخه نوشتاری را بخوانید (انگلیسی) ↗
این ویدیو چه مواردی را پوشش میدهد
- SAML: ورود به سیستمی که از داخل خود را امضا میکند
- 2002: چهار فرمت XML، یک کمیته، یک صنعت کامل
- رقص ورود: برنامه ← ارائهدهنده هویت ← بازگشت از طریق مرورگر شما
- اظهارنامه: امضا در دل چیزی که امضا میکند، قرار دارد
- Canonicalization: بر سر هر بایت توافق کنید، در غیر این صورت هیچ کس وارد نمیشود
رونوشت ترجمه شده
ترجمه شده از روایت اصلی انگلیسی. صوت و زیرنویسهای موجود توسط YouTube کنترل میشوند.
SAML: ورود به سیستمی که از داخل خود را امضا میکند
0:00 SAML XMLی است که شما را به تقریباً هر برنامه کاری که دارید وارد میکند، و امضای آن در دل سندی که امضا میکند، قرار دارد، مانند یک دفتردار که مهر خود را در داخل پاکتی که میبندد منگنه میکند. ده سال پس از اینکه یک کمیته آن را نوشت، محققان چهارده فریمورک SAML را آزمایش کردند. یازده مورد از کار افتادند. و این هفته یک پست از Trail of Bits که آن را فراکتالی از طراحی بد میخواند، به صفحه اول Hacker News رسید. در سه دقیقه: رقص ورود چگونه کار میکند، امضا کجا پنهان میشود،
0:27 و چرا راه حلی که همه بر آن توافق دارند، یک پروتکل متفاوت است. این The Daily Diff، زیر کاپوت است.
2002: چهار فرمت XML، یک کمیته، یک صنعت کامل
0:34 سال دو هزار و دو. کمیته امنیتی در Oasis چهار فرمت XML فروشنده را در یک فرمت ادغام میکند. دانشگاهها ابتدا آن را پذیرفتند، سپس Okta شرکتی را بر اساس آن بنا نهاد، سریعترین زمانی که یک سند کمیتهای تا به حال به درآمد تبدیل شده است. شما برنامه را باز میکنید.
رقص ورود: برنامه ← ارائهدهنده هویت ← بازگشت از طریق مرورگر شما
0:46 این برنامه هیچ اطلاعی از هویت شما ندارد، بنابراین مرورگر شما را به ارائهدهنده هویت هدایت میکند، مثلاً Okta شرکت شما. شما در آنجا وارد میشوید. Okta به مرورگر شما یک سند XML امضا شده میدهد که نشان میدهد شما چه کسی هستید، و مرورگر آن را برمیگرداند.
اظهارنامه: امضا در دل چیزی که امضا میکند، قرار دارد
0:59 آن سند، اظهارنامه است. نام کاربر را مشخص میکند، و امضا در داخل آن قرار دارد، که با ID خود به اظهارنامه اشاره میکند. و همه اینها از طریق مرورگر شما انجام میشود، یعنی، از طریق کاربر. برای بررسی آن، برنامه
Canonicalization: بر سر هر بایت توافق کنید، در غیر این صورت هیچ کس وارد نمیشود
1:11 دقیقاً همان بایتهایی را که امضا شده بودند بازسازی میکند. امضا را دوباره برش میزند، فضای خالی و ترتیب صفت را نرمال میکند، و نتیجه را هش میکند. این Canonicalization است، و اگر دو طرف حتی بر سر یک بایت هم اختلاف داشته باشند، هیچ کس وارد نمیشود. یک توکن وب JSON آن را متفاوت انجام میدهد. هدر، محتوا و امضا در کنار یکدیگر با نقاطی در میان قرار میگیرند. چیزی برای برش زدن از ابتدا وجود ندارد.
2012: بررسیکننده و خواننده به عناصر مختلفی نگاه میکنند
1:32 اینجا ایراد کار است. کدی که امضا را بررسی میکند و کدی که نام کاربری را میخواند، اغلب دو قطعه متفاوت هستند. در سال دو هزار و دوازده، مقالهای با عنوان «On Breaking SAML» نشان داد که میتوانید اظهارنامه امضا شده را به جایی منتقل کنید که خواننده آن را نادیده بگیرد، و یک اظهارنامه دوم را در جایی قرار دهید که آن را جستجو میکند. Salesforce و Shibboleth در میان یازده موردی بودند که فریب آن را خوردند. در سال دو هزار و هجده، Duo نشان داد که یک کامنت در داخل نام کاربری میتواند باعث شود برخی
2018 و 2025: دو تجزیهکننده، دو پاسخ متفاوت
1:55 کتابخانهها تنها نیمی از نام را بخوانند، در حالی که امضا همچنان معتبر بود. در سال دو هزار و بیست و پنج، GitHub دو تجزیهکننده XML را در ruby SAML یافت که در مورد همان سند با یکدیگر اختلاف نظر داشتند. همان باگ، دهه جدید. Trail of Bits آن را یک فراکتال مینامد، زیرا هر سطحی که به آن زوم میکنید،
چرا همچنان میشکند: یک فراکتال از طراحی بد
2:12 همان نقص را دارد. بر اساس XML ساخته شده است، امضا محصور شده است، و ورودهای واقعی شاید از یک دهم مشخصات استفاده میکنند. و اولین پاسخ در Hacker News از طرف خریدار میآید. اگر پشتیبانی SAML را ندارید، میتوانم محصولی پیدا کنم که داشته باشد. هر دو درست هستند، که مشکل همین است. بنابراین، دوشنبه. ابتدا OpenID Connect را SHIP IT کنید، Fly و Tailscale به
دوشنبه: ابتدا OIDC، یک کتابخانه نگهداریشده، اشکال سختگیرانه
2:31 شرکتها بدون SAML میفروشند. اگر مشتری آن را تحمیل کرد، از یک کتابخانه نگهداریشده استفاده کنید، آن را به روز نگه دارید، و پیامهایی را که شبیه پیامهای Okta یا Google نیستند، رد کنید. هرگز بررسی امضای خود را ننویسید.
نتیجه، زیر کاپوت: REVERT
2:43 نتیجه، زیر کاپوت. REVERT. تقریباً بیست و پنج سال، یک کلاس باگ که هرگز از بین نمیرود، و راه حلی که همه بر آن توافق دارند، یک پروتکل متفاوت است. شنبه گذشته کلیدهای عبور را بررسی کردم، پس در نظرات بگویید چه چیزی را در ادامه باز کنم. و این The Daily Diff برای امروز است. من نیکو از Axrisi هستم. مسئولانه ادغام کنید.
منابع
- Trail of Bits, "SAML: A fractal of bad design" (Matt Schwager, Sep 21, 2026)blog.trailofbits.com
- Hacker News threadnews.ycombinator.com
- Somorovsky et al., "On Breaking SAML: Be Whoever You Want to Be", USENIX Security 2012www.usenix.org
- Duo Labs, SAML vulnerabilities affecting multiple implementations (2018): https://duo.com/blog/duo-finds-saml-vulnerabilities-affecting-multiple-implementations · CERT VU#475445www.kb.cert.org
- GitHub Security Lab, "Sign in as anyone: Bypassing SAML SSO authentication with parser differentials" (Mar 12, 2025)github.blog



