+− THE DAILY DIFFdev & AI news
REVERT

SAML, pod pokrovom: podpis v pismu

SAML vas prijavi v skoraj vsako delovno aplikacijo, in njegov podpis živi znotraj XML-ja, ki ga podpisuje.

SAML vas prijavi v skoraj vsako delovno aplikacijo, in njegov podpis živi znotraj XML-ja, ki ga podpisuje. Pod pokrovom: ples prijave med aplikacijo, brskalnikom in ponudnikom identitete, kako izgleda trditev, zakaj se mora kanonizacija strinjati glede vsakega bajta, in zakaj se ista vrsta napak vedno znova pojavlja od leta 2012 do 2025. Spodbudila ga je objava "SAML: A fractal of bad design" (312 točk na Hacker News) avtorjev Trail of Bits.

Preberi pisno izdajo (angleščina) ↗

Kaj zajema ta videoposnetek

  • SAML: prijava, ki se podpiše od znotraj
  • 2002: štirje formati XML, en odbor, celotna industrija
  • Ples prijave: aplikacija → ponudnik identitete → nazaj prek vašega brskalnika
  • Trditev: podpis živi znotraj tistega, kar podpisuje
  • Kanonizacija: strinjajte se glede vsakega bajta, sicer se nihče ne prijavi

Preveden prepis

Prevedeno iz izvirnega angleškega pripovedovanja. Razpoložljivi zvok in podnapisi so nadzorovani s strani YouTuba.

SAML: prijava, ki se podpiše od znotraj

0:00 SAML je XML, ki vas prijavi v skoraj vsako delovno aplikacijo, ki jo imate, in njegov podpis živi znotraj dokumenta, ki ga podpisuje, kot notar, ki svoj žig spne v ovojnico, ki jo pečati. Deset let po tem, ko ga je napisal odbor, so raziskovalci preizkusili štirinajst Saml okvirjev. Enajst jih je padlo. In ta teden je objava Trail of Bits, ki ga je poimenovala fraktal slabe zasnove, prišla na naslovno stran Hacker News. V treh minutah: kako deluje ples prijave, kje se skriva podpis,

0:27 in zakaj je rešitev, o kateri se vsi strinjajo, drugačen protokol. To je The Daily Diff, pod pokrovom.

2002: štirje formati XML, en odbor, celotna industrija

0:34 Dva tisoč dve. Varnostni odbor pri Oasis združi štiri formate XML dobaviteljev v enega. Univerze ga najprej sprejmejo, nato Okta na njem zgradi podjetje, najhitreje se je dokument odbora kdajkoli spremenil v prihodek. Odprete aplikacijo.

Ples prijave: aplikacija → ponudnik identitete → nazaj prek vašega brskalnika

0:46 Nima pojma, kdo ste, zato vaš brskalnik preusmeri na ponudnika identitete, recimo Okta vašega podjetja. Tam se prijavite. Okta vašemu brskalniku preda podpisan dokument XML, ki pove, kdo ste, in brskalnik ga objavi nazaj.

Trditev: podpis živi znotraj tistega, kar podpisuje

0:59 Ta dokument je trditev. Imenuje uporabnika, in podpis je v njem, kaže nazaj na trditev po njenem ID-ju. In celotna stvar potuje skozi vaš brskalnik, kar pomeni, skozi uporabnika. Za preverjanje, aplikacija

Kanonizacija: strinjajte se glede vsakega bajta, sicer se nihče ne prijavi

1:11 ponovno zgradi natančne bajte, ki so bile podpisane. Izreže podpis nazaj, normalizira prazne prostore in vrstni red atributov ter zgošči rezultat. To je kanonizacija, in če se dve strani ne strinjata za en sam bajt, se nihče ne prijavi. JSON spletni žeton to dela drugače. Glava, vsebina in podpis sedijo drug ob drugem s pikami vmes. Ničesar ni treba najprej izrezati.

2012: preverjevalnik in bralnik gledata različne elemente

1:32 Tukaj je razpoka. Koda, ki preverja podpis, in koda, ki bere uporabniško ime, sta pogosto dva različna dela. Leta 2012 je članek z naslovom On Breaking Saml pokazal, da lahko podpisan trditev premaknete tja, kjer jo bralnik ignorira, in postavite drugo tja, kjer jo išče. Salesforce in Shibboleth sta bila med enajstimi, ki so se ujeli. Leta 2018 je Duo pokazal, da lahko komentar znotraj uporabniškega imena povzroči, da nekatere

2018 in 2025: dva parserja, dva različna odgovora

1:55 knjižnice preberejo le polovico imena, medtem ko je podpis še vedno veljaven. Leta 2025 je GitHub našel dva XML parserja v ruby Saml ki se nista strinjala glede istega dokumenta. Ista napaka, novo desetletje. Trail of Bits ga imenuje fraktal, ker ima vsaka raven, v katero se približate,

Zakaj se vedno znova lomi: fraktal slabe zasnove

2:12 isto napako. Zgrajen je na XML-ju, podpis je ovit, in dejanske prijave uporabljajo morda desetino specifikacije. In najboljši odgovor na Hacker News prihaja od kupca. Če nimate podpore za Saml, lahko najdem izdelek, ki jo ima. Oboje je res, kar je problem. Torej, ponedeljek. SHIP IT OpenID Connect najprej, Fly in Tailscale prodajata

Ponedeljek: najprej OIDC, vzdrževana knjižnica, stroge oblike

2:31 podjetjem brez Saml sploh. Če ga stranka zahteva, uporabite vzdrževano knjižnico, jo redno posodabljajte, in zavračajte sporočila, ki niso videti kot tista, ki jih pošiljajo Okta ali Google. Nikoli ne pišite lastnega preverjanja podpisa.

Sodba, pod pokrovom: REVERT

2:43 Sodba, pod pokrovom. REVERT. Skoraj petindvajset let, ena vrsta napak, ki nikoli ne umre, in rešitev, o kateri se vsi strinjajo, je drugačen protokol. Prejšnjo soboto sem razstavil passkeys, zato mi povejte, kaj naj naslednje odprem v komentarjih. In to je The Daily Diff za danes. Sem Niko iz Axrisija. Merge responsibly.

Viri

  1. Trail of Bits, "SAML: A fractal of bad design" (Matt Schwager, Sep 21, 2026)blog.trailofbits.com
  2. Hacker News threadnews.ycombinator.com
  3. Somorovsky et al., "On Breaking SAML: Be Whoever You Want to Be", USENIX Security 2012www.usenix.org
  4. 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
  5. GitHub Security Lab, "Sign in as anyone: Bypassing SAML SSO authentication with parser differentials" (Mar 12, 2025)github.blog

Povezani videoposnetki