# SAML, під капотом: підпис всередині листа

Published: 2026-09-24

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

Canonical: https://thedailydiff.dev/uk/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 Цей документ є твердженням. Він називає користувача, і підпис знаходиться всередині нього, вказуючи на твердження за його ідентифікатором. І все це проходить через ваш браузер, тобто, через користувача. Щоб перевірити його, додаток

### Канонізація: узгодьте кожен байт, інакше ніхто не ввійде

1:11 відновлює точні байти, які були підписані. Він вирізає підпис, нормалізує пробіли та порядок атрибутів, і хешує результат. Це канонізація, і якщо дві сторони розходяться хоча б на один байт, ніхто не входить. Веб-токен 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, я можу знайти продукт, який її має. Обидва твердження вірні, що і є проблемою. Отже, понеділок. Спочатку SHIP OpenID Connect, Fly і Tailscale продають

### Понеділок: спочатку OIDC, підтримувана бібліотека, суворі форми

2:31 підприємствам без SAML взагалі. Якщо клієнт наполягає, використовуйте підтримувану бібліотеку, постійно оновлюйте її, і відхиляйте повідомлення, які не схожі на ті, що надсилають Okta або Google. Ніколи не пишіть власну перевірку підпису.

### Вердикт, під капотом: REVERT

2:43 Вердикт, під капотом. REVERT. Майже двадцять п'ять років, один клас помилок, який ніколи не вмирає, і виправлення, з яким усі погоджуються, — це інший протокол. Минулої суботи я розібрав passkeys, тому скажіть мені, що розкрити далі в коментарях. І це 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
