SAML, เจาะลึก: ลายเซ็นต์ภายในจดหมาย
SAML ทำให้คุณสามารถเข้าสู่ระบบแอปทำงานเกือบทุกแอป และลายเซ็นต์ของมันอาศัยอยู่ภายใน XML ที่มันลงนาม เจาะลึก: การเต้นรำของการเข้าสู่ระบบระหว่างแอป, เบราว์เซอร์ และผู้ให้บริการระบุตัวตน, ลักษณะของ Assertion, ทำไม Canonicalization ต้องเห็นด้วยกับทุกไบต์ และทำไมข้อบกพร่องประเภทเดียวกันถึงกลับมาอีกครั้งตั้งแต่ปี 2012 ถึง 2025 โดยได้รับแรงบันดาลใจจาก "SAML: A fractal of bad design" ของ Trail of Bits (312 คะแนนบน Hacker News)
SAML ทำให้คุณสามารถเข้าสู่ระบบแอปทำงานเกือบทุกแอป และลายเซ็นต์ของมันอาศัยอยู่ภายใน XML ที่มันลงนาม เจาะลึก: การเต้นรำของการเข้าสู่ระบบระหว่างแอป, เบราว์เซอร์ และผู้ให้บริการระบุตัวตน, ลักษณะของ Assertion, ทำไม Canonicalization ต้องเห็นด้วยกับทุกไบต์ และทำไมข้อบกพร่องประเภทเดียวกันถึงกลับมาอีกครั้งตั้งแต่ปี 2012 ถึง 2025 โดยได้รับแรงบันดาลใจจาก "SAML: A fractal of bad design" ของ Trail of Bits (312 คะแนนบน Hacker News)
อ่านฉบับลายลักษณ์อักษร (ภาษาอังกฤษ) ↗
วิดีโอนี้ครอบคลุมอะไรบ้าง
- SAML: การเข้าสู่ระบบที่ลงนามตัวเองจากภายใน
- 2002: สี่รูปแบบ XML, หนึ่งคณะกรรมการ, อุตสาหกรรมทั้งหมด
- การเต้นรำของการเข้าสู่ระบบ: แอป → ผู้ให้บริการระบุตัวตน → กลับผ่านเบราว์เซอร์ของคุณ
- Assertion: ลายเซ็นต์อาศัยอยู่ภายในสิ่งที่มันลงนาม
- Canonicalization: เห็นด้วยกับทุกไบต์ มิฉะนั้นจะไม่มีใครเข้าสู่ระบบได้
บทถอดเสียงที่แปลแล้ว
แปลจากการบรรยายภาษาอังกฤษต้นฉบับ เสียงและคำบรรยายที่มีให้จะควบคุมโดย YouTube
SAML: การเข้าสู่ระบบที่ลงนามตัวเองจากภายใน
0:00 SAML คือ XML ที่ทำให้คุณสามารถเข้าสู่ระบบแอปทำงานเกือบทุกแอปที่คุณเป็นเจ้าของ และลายเซ็นต์ของมันอาศัยอยู่ภายในเอกสารที่มันลงนาม เหมือนกับทนายความที่ใช้เครื่องประทับตราของเขาภายในซองจดหมายที่เขากำลังผนึก สิบปีหลังจากที่คณะกรรมการได้เขียนมันขึ้นมา นักวิจัยได้ทดสอบเฟรมเวิร์ก SAML สิบสี่รายการ สิบเอ็ดรายการล้มเหลว และสัปดาห์นี้โพสต์ของ Trail of Bits ที่เรียกมันว่า "A fractal of bad design" ได้ขึ้นหน้าแรกของ Hacker News หน้าแรกของ Hacker News ในสามนาที: การเต้นรำของการเข้าสู่ระบบทำงานอย่างไร, ลายเซ็นต์ซ่อนอยู่ที่ไหน
0:27 และทำไมการแก้ไขที่ทุกคนเห็นด้วยคือโปรโตคอลที่แตกต่างกัน นี่คือ The Daily Diff, เจาะลึก
2002: สี่รูปแบบ XML, หนึ่งคณะกรรมการ, อุตสาหกรรมทั้งหมด
0:34 ปีสองพันสอง คณะกรรมการความปลอดภัยที่ Oasis ได้รวมรูปแบบ XML สี่แบบของผู้จำหน่ายเข้าด้วยกันเป็นหนึ่งเดียว มหาวิทยาลัยนำไปใช้ก่อน จากนั้น Okta ก็สร้างบริษัทจากมัน เร็วที่สุดเท่าที่เอกสารของคณะกรรมการเคยเปลี่ยนเป็นรายได้ คุณเปิดแอป
การเต้นรำของการเข้าสู่ระบบ: แอป → ผู้ให้บริการระบุตัวตน → กลับผ่านเบราว์เซอร์ของคุณ
0:46 มันไม่รู้ว่าคุณเป็นใคร จึงส่งเบราว์เซอร์ของคุณไปยังผู้ให้บริการระบุตัวตน เช่น Okta ของบริษัทคุณ คุณเข้าสู่ระบบที่นั่น Okta มอบเอกสาร XML ที่ลงนามให้เบราว์เซอร์ของคุณ ซึ่งบอกว่าคุณเป็นใคร และเบราว์เซอร์ก็ส่งกลับไป
Assertion: ลายเซ็นต์อาศัยอยู่ภายในสิ่งที่มันลงนาม
0:59 เอกสารนั้นคือ Assertion มันระบุชื่อผู้ใช้ และลายเซ็นต์อยู่ภายในนั้น ชี้กลับไปที่ Assertion ด้วย ID ของมัน และทั้งหมดนี้ผ่านทางเบราว์เซอร์ของคุณ ซึ่งหมายถึง ผ่านผู้ใช้ เพื่อตรวจสอบ มัน แอปจะ
Canonicalization: เห็นด้วยกับทุกไบต์ มิฉะนั้นจะไม่มีใครเข้าสู่ระบบได้
1:11 สร้างไบต์ที่ถูกลงนามขึ้นมาใหม่ มันตัดลายเซ็นต์ออก, ปรับช่องว่างและลำดับของแอตทริบิวต์ให้เป็นมาตรฐาน และแฮชผลลัพธ์ นั่นคือ Canonicalization และหากทั้งสองฝ่ายไม่เห็นด้วยแม้แต่ไบต์เดียว จะไม่มีใครเข้าสู่ระบบได้ โทเค็นเว็บ JSON ทำต่างออกไป ส่วนหัว, Payload และลายเซ็นต์วางอยู่ข้างกันโดยมีจุดคั่นกลาง ไม่มีอะไรต้องตัดออกก่อน
2012: ตัวตรวจสอบและตัวอ่านมองที่องค์ประกอบที่ต่างกัน
1:32 นี่คือข้อผิดพลาด โค้ดที่ตรวจสอบลายเซ็นต์และโค้ดที่อ่านชื่อผู้ใช้มักจะเป็น สองส่วนที่แตกต่างกัน ในปี 2012 บทความชื่อ On Breaking SAML แสดงให้เห็นว่าคุณสามารถย้าย Assertion ที่ลงนามแล้วไปในที่ที่ผู้อ่านละเลยมัน และวางอันที่สองในที่ที่มัน มองหา Salesforce และ Shibboleth เป็นหนึ่งในสิบเอ็ดที่ตกเป็นเหยื่อ มองหา Salesforce และ Shibboleth เป็นหนึ่งในสิบเอ็ดที่ตกเป็นเหยื่อ ในปี 2018 Duo แสดงให้เห็นว่าความคิดเห็นภายในชื่อผู้ใช้สามารถทำให้
2018 และ 2025: สองตัวแยกวิเคราะห์, สองคำตอบที่ต่างกัน
1:55 ไลบรารีบางตัวอ่านชื่อเพียงครึ่งเดียว ในขณะที่ลายเซ็นต์ยังคงตรวจสอบผ่าน ในปี 2025 GitHub พบว่ามี XML parser สองตัวภายใน Ruby SAML ไม่เห็นด้วยกับเอกสารเดียวกัน ข้อบกพร่องเดิม ทศวรรษใหม่ Trail of Bits เรียกมันว่า fractal เพราะทุกระดับที่คุณซูมเข้าไปจะมี
ทำไมมันถึงพังบ่อยครั้ง: โครงสร้างการออกแบบที่ไม่ดีแบบ Fractal
2:12 ข้อบกพร่องเดียวกัน มันถูกสร้างขึ้นบน XML ลายเซ็นต์ถูกห่อหุ้ม และการเข้าสู่ระบบจริงใช้สเปกเพียงหนึ่งในสิบเท่านั้น และการตอบกลับอันดับต้นๆ บน Hacker News มาจากผู้ซื้อ หากคุณไม่มีการสนับสนุน SAML ฉันสามารถหาผลิตภัณฑ์ที่มีให้ได้ ทั้งสองเป็นจริง ซึ่งเป็นปัญหา ดังนั้น วันจันทร์ SHIP IT OpenID Connect ก่อน Fly และ Tailscale ขายให้กับ
วันจันทร์: OIDC ก่อน, ไลบรารีที่ได้รับการดูแล, รูปแบบที่เข้มงวด
2:31 องค์กรโดยไม่มี SAML เลย หากลูกค้าบังคับ ให้ใช้ไลบรารีที่ได้รับการดูแล, ปรับปรุงให้ทันสมัยอยู่เสมอ และปฏิเสธข้อความที่ไม่เหมือนกับที่ Okta หรือ Google ส่งมา อย่าเขียนการตรวจสอบลายเซ็นต์ของคุณเองเด็ดขาด
คำตัดสิน, เจาะลึก: REVERT
2:43 คำตัดสิน, เจาะลึก REVERT เกือบ 25 ปี ข้อบกพร่องประเภทเดียวที่ไม่เคยตาย และการแก้ไขที่ทุกคนเห็นด้วยคือโปรโตคอลที่แตกต่างกัน วันเสาร์ที่ผ่านมาฉันได้แยกส่วน passkeys ดังนั้นบอกฉันทีว่าฉันควรจะเปิดอะไรต่อไปในช่องแสดงความคิดเห็น ความคิดเห็น และนั่นคือ The Daily Diff สำหรับวันนี้ ฉันชื่อ Niko จาก 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



