SAML, под хаубата: потписот во внатрешноста на писмото
SAML ве најавува во речиси секоја работна апликација, а неговиот потпис живее во XML-от што го потпишува.
SAML ве најавува во речиси секоја работна апликација, а неговиот потпис живее во XML-от што го потпишува. Под хаубата: танцот за најавување помеѓу апликацијата, прелистувачот и давателот на идентитет, како изгледа тврдењето, зошто канонизацијата мора да се согласи на секој бајт и зошто истата класа на грешки постојано се враќа од 2012 до 2025 година. Поттикнато од „SAML: фрактал на лош дизајн“ на Trail of Bits (312 поени на Hacker News).
Прочитајте го пишаното издание (англиски) ↗
Што покрива ова видео
- SAML: најавата што се потпишува одвнатре
- 2002: четири XML формати, еден комитет, цела индустрија
- Танцот за најавување: апликација → давател на идентитет → назад преку вашиот прелистувач
- Тврдењето: потписот живее во она што го потпишува
- Канонизација: согласете се на секој бајт, или никој не се најавува
Преведен транскрипт
Преведено од оригиналната англиска нарација. Достапното аудио и наслови се контролирани од 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. И целата работа патува преку вашиот прелистувач, што значи, преку корисникот. За да го провери, апликацијата
Канонизација: согласете се на секој бајт, или никој не се најавува
1:11 ги пресоздава точните бајти што биле потпишани. Го отсекува потписот назад, ги нормализира празните места и редоследот на атрибутите и го хешира резултатот. Тоа е канонизација, и ако двете страни не се согласуваат за еден бајт, никој не се најавува. JSON веб-токен го прави тоа поинаку. Заглавјето, товарот и потписот седат еден до друг со точки помеѓу. Ништо не треба да се отсекува прво.
2012: проверувачот и читачот гледаат различни елементи
1:32 Еве ја пукнатината. Кодот што го проверува потписот и кодот што го чита корисничкото име се често два различни дела. Во две илјади и дванаесет, труд наречен „За кршење на SAML“ покажа дека можете да го поместите потпишаното тврдење каде што читачот го игнорира, и да ставите второ каде што гледа. Salesforce и Shibboleth беа меѓу единаесетте што потпаднаа на тоа. Во две илјади и осумнаесет, Duo покажа дека коментар во корисничко име може да натера некои
2018 и 2025: два парсери, два различни одговори
1:55 библиотеки да читаат само половина од името, додека потписот сè уште бил проверен. Во две илјади дваесет и пет, GitHub најде два XML парсери во ruby SAML кои не се согласуваат за истиот документ. Иста грешка, нова деценија. Trail of Bits го нарекува фрактал, бидејќи секое ниво во кое зумирате ја има
Зошто постојано се расипува: фрактал на лош дизајн
2:12 истата мана. Изграден е на XML, потписот е обвиткан, а вистинските најави користат можеби десетина од спецификацијата. И врвниот одговор на Hacker News доаѓа од купувачот. Ако немате SAML поддршка, можам да најдам производ што има. И двете се вистинити, што е проблемот. Значи, понеделник. Прво SHIP IT OpenID Connect, 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



