+− THE DAILY DIFFdev & AI news
REVERT

SAML, 내부 들여다보기: 서명은 편지 안에

SAML은 거의 모든 업무 앱에 로그인하게 해주며, 그 서명은 서명하는 XML 내부에 있습니다.

SAML은 거의 모든 업무 앱에 로그인하게 해주며, 그 서명은 서명하는 XML 내부에 있습니다. 내부 들여다보기: 앱, 브라우저, ID 공급자 간의 로그인 과정, 어설션이 어떻게 생겼는지, 왜 정규화가 모든 바이트에 동의해야 하는지, 그리고 왜 2012년부터 2025년까지 동일한 버그 클래스가 계속해서 돌아오는지. Trail of Bits의 "SAML: A fractal of bad design" (Hacker News에서 312점)에 의해 촉발되었습니다.

서면판 읽기 (영어) ↗

이 동영상에서 다루는 내용

  • SAML: 내부에서 스스로 서명하는 로그인
  • 2002년: 4가지 XML 형식, 하나의 위원회, 전체 산업
  • 로그인 과정: 앱 → ID 공급자 → 브라우저를 통해 다시
  • 어설션: 서명이 서명하는 것 안에 존재한다
  • 정규화: 모든 바이트에 동의해야 로그인 가능

번역된 스크립트

원래 영어 내레이션에서 번역되었습니다. 사용 가능한 오디오 및 캡션은 YouTube에서 제어합니다.

SAML: 내부에서 스스로 서명하는 로그인

0:00 SAML은 거의 모든 업무 앱에 로그인하게 해주는 XML이며, 그 서명은 서명하는 문서 내부에 있습니다. 마치 공증인이 봉인하는 봉투 안에 도장을 찍는 것과 같습니다. 위원회가 이를 작성한 지 10년 후, 연구원들은 14개의 SAML 프레임워크를 테스트했습니다. 11개가 실패했습니다. 그리고 이번 주, Trail of Bits의 게시물은 SAML을 나쁜 디자인의 프랙탈이라고 부르며 Hacker News의 첫 페이지를 장식했습니다. 3분 안에: 로그인 과정이 어떻게 작동하는지, 서명이 어디에 숨어 있는지,

0:27 그리고 모두가 동의하는 해결책이 왜 다른 프로토콜인지. 여기는 The Daily Diff, 내부 들여다보기입니다.

2002년: 4가지 XML 형식, 하나의 위원회, 전체 산업

0:34 2002년. Oasis의 보안 위원회가 4가지 공급업체 XML 형식을 하나로 통합했습니다. 대학들이 먼저 채택했고, 그 다음 Okta가 이를 기반으로 회사를 설립했습니다. 위원회 문서가 수익으로 전환된 가장 빠른 사례입니다. 앱을 엽니다.

로그인 과정: 앱 → ID 공급자 → 브라우저를 통해 다시

0:46 앱은 당신이 누구인지 모르므로, 당신의 브라우저를 ID 공급자, 즉 당신 회사 Okta로 보냅니다. 거기서 로그인합니다. Okta는 당신의 브라우저에 당신이 누구인지 알려주는 서명된 XML 문서를 전달하고, 브라우저는 이를 다시 게시합니다.

어설션: 서명이 서명하는 것 안에 존재한다

0:59 그 문서가 어설션입니다. 사용자 이름을 명시하고, 서명이 그 안에 있으며, 자신의 ID로 어설션을 다시 가리킵니다. 그리고 이 모든 것이 당신의 브라우저를 통해, 즉, 사용자를 통해 전달됩니다. 이를 확인하기 위해 앱은

정규화: 모든 바이트에 동의해야 로그인 가능

1:11 서명된 정확한 바이트를 재구성합니다. 서명을 다시 잘라내고, 공백과 속성 순서를 정규화한 다음 결과를 해시합니다. 이것이 정규화이며, 만약 양측이 단 한 바이트라도 일치하지 않으면, 아무도 로그인할 수 없습니다. JSON 웹 토큰은 다르게 작동합니다. 헤더, 페이로드, 서명이 점으로 구분되어 나란히 놓여 있습니다. 먼저 잘라낼 것이 없습니다.

2012년: 검사자와 리더가 다른 요소를 본다

1:32 여기에 문제가 있습니다. 서명을 확인하는 코드와 사용자 이름을 읽는 코드는 종종 두 개의 다른 부분입니다. 2012년, 'On Breaking Saml'이라는 논문은 독자가 무시하는 곳으로 서명된 어설션을 이동시키고, 독자가 찾는 곳에 두 번째 어설션을 놓을 수 있음을 보여주었습니다. Salesforce와 Shibboleth는 이로 인해 무너진 11개 중 일부였습니다. 2018년, Duo는 사용자 이름 내의 주석이 일부 라이브러리가 이름의 절반만 읽게 할 수 있지만,

2018년 및 2025년: 두 개의 파서, 두 개의 다른 답변

1:55 서명은 여전히 유효하다는 것을 보여주었습니다. 2025년, GitHub은 Ruby SAML 내에서 두 개의 XML 파서가 동일한 문서에 대해 의견이 일치하지 않는 것을 발견했습니다. 같은 버그, 새로운 시대. Trail of Bits는 이를 프랙탈이라고 부릅니다. 확대하는 모든 레벨에서

왜 계속 고장나는가: 나쁜 디자인의 프랙탈

2:12 동일한 결함이 있기 때문입니다. XML을 기반으로 하며, 서명은 봉투 안에 있고, 실제 로그인은 사양의 10분의 1 정도만 사용합니다. 그리고 Hacker News의 상위 댓글은 구매자로부터 왔습니다. SAML 지원이 없다면, 다른 제품을 찾을 수 있습니다. 둘 다 사실이라는 것이 문제입니다. 그래서, 월요일. OpenID Connect를 먼저 배포하십시오. Fly와 Tailscale은 SAML 없이도

월요일: OIDC 우선, 유지 관리되는 라이브러리, 엄격한 형식

2:31 기업에 판매합니다. 고객이 강제한다면, 유지 관리되는 라이브러리를 사용하고, 패치를 적용하며, Okta나 Google이 보내는 것과 다르게 보이는 메시지는 거부하십시오. 절대 자신만의 서명 확인 코드를 작성하지 마십시오.

결정, 내부 들여다보기: REVERT

2:43 판결, 내부 들여다보기. REVERT. 거의 25년, 결코 죽지 않는 하나의 버그 클래스, 그리고 모두가 동의하는 해결책은 다른 프로토콜입니다. 지난 토요일에 패스키를 분석했습니다. 다음에는 무엇을 열어볼지 댓글로 알려주세요. 이것이 오늘의 차이점입니다. 저는 Axrisi의 Niko입니다. 책임감 있게 병합하세요.

출처

  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

관련 동영상

under-the-hood · ko · 2026. 9. 19.

패스키, 내부 동작 원리

패스키는 당신의 기기가 만들어내고, 당신에게 절대 보여주지 않으며, 당신을 포함한 누구에게도 넘겨주기를 거부하는 비밀번호입니다. 내부 동작 원리는 다음과 같습니다: WebAuthn 의식 (사이트별 키 쌍, 챌린지, 서명), 브라우저가 피싱을 막기 위해 작성하는 단 하나의 필드 (origin), 기기 고정형 vs 동기화된 키, AAGUID, 그리고 "피싱 불

3:12 ↗
under-the-hood · ko · 2026. 9. 21.

Claude가 RSA-896을 인수분해했습니다. 실제 RSA가 깨지는 방법은 다음과 같습니다

9월 19일, Anthropic 엔지니어는 오픈소스 CADO-NFS 체의 GPU 포트인 Claude와 함께 270자리 난수 RSA-896을 인수분해했으며, Cognition의 Devin이 RSA-260을 인수분해한 지 16일 후 2,048개의 유휴 GPU에서 10일 동안 약 30 GPU-년이 소요되었습니다. 내부 정보: 인수분해 기록이 실제로 설정되는 방법

3:39 ↗