# SAML, пад капотам: подпіс унутры ліста

Published: 2026-09-24

SAML уваходзіць у амаль кожную працоўную праграму, а яго подпіс жыве ўнутры XML, які ён падпісвае. Пад капотам: танец уваходу паміж праграмай, браўзерам і пастаўшчыком ідэнтыфікацыі, як выглядае сцвярджэнне, чаму кананізацыя павінна ўзгадняцца з кожным байтам, і чаму той самы клас памылак пастаянна вяртаецца з 2012 па 2025 год. Падштурхнута артыкулам Trail of Bits "SAML: фрактал дрэннага дызайну" (312 пунктаў на Hacker News).

Canonical: https://thedailydiff.dev/be/video/2026-09-24-saml-under-the-hood/

## Што ахоплівае гэта відэа

- SAML: уваход, які падпісвае сябе знутры
- 2002: чатыры фарматы XML, адзін камітэт, цэлая індустрыя
- Танец уваходу: праграма → пастаўшчык ідэнтыфікацыі → назад праз ваш браўзер
- Сцвярджэнне: подпіс жыве ўнутры таго, што ён падпісвае
- Кананізацыя: пагадзіцеся на кожны байт, інакш ніхто не ўвойдзе

## Раздзелы

- 0:00 SAML: уваход, які падпісвае сябе знутры
- 0:34 2002: чатыры фарматы XML, адзін камітэт, цэлая індустрыя
- 0:46 Танец уваходу: праграма → пастаўшчык ідэнтыфікацыі → назад праз ваш браўзер
- 0:59 Сцвярджэнне: подпіс жыве ўнутры таго, што ён падпісвае
- 1:10 Кананізацыя: пагадзіцеся на кожны байт, інакш ніхто не ўвойдзе
- 1:32 2012: правяраючы і чытальнік глядзяць на розныя элементы
- 1:51 2018 і 2025: два парсеры, два розныя адказы
- 2:08 Чаму ён пастаянна ламаецца: фрактал дрэннага дызайну
- 2:27 Панядзелак: спачатку OIDC, падтрымліваемая бібліятэка, строгія формы
- 2:43 Вердыкт, пад капотам: REVERT

## Перакладзеная стэнаграма

Перакладзена з арыгінальнай англійскай агучкі. Даступнае аўдыя і субтытры кантралююцца 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)](https://blog.trailofbits.com/2026/09/21/saml-a-fractal-of-bad-design/) — blog.trailofbits.com
- [Hacker News thread](https://news.ycombinator.com/item?id=49806335) — news.ycombinator.com
- [Somorovsky et al., "On Breaking SAML: Be Whoever You Want to Be", USENIX Security 2012](https://www.usenix.org/conference/usenixsecurity12/technical-sessions/presentation/somorovsky) — www.usenix.org
- [Duo Labs, SAML vulnerabilities affecting multiple implementations (2018): https://duo.com/blog/duo-finds-saml-vulnerabilities-affecting-multiple-implementations · CERT VU#475445](https://www.kb.cert.org/vuls/id/475445) — www.kb.cert.org
- [GitHub Security Lab, "Sign in as anyone: Bypassing SAML SSO authentication with parser differentials" (Mar 12, 2025)](https://github.blog/security/sign-in-as-anyone-bypassing-saml-sso-authentication-with-parser-differentials/) — github.blog
