"누구나 localhost 라 주장할 수 있어. 운영체제만 그걸 증명할 수 있고."
PIN 이 건너뛰어지는 유일한 곳
Firelink 는 정확히 하나의 no-PIN 경로를 줘. 진짜로 같은 머신에 있는 브라우저. 사무실 박스에 앉아, loopback URL 을 열면, family PIN 을 안 넣고 durable local write 세션을 얻어 — 명백히 local 이니까. 문제 전부가 '명백히'를 어떻게 증명하느냐야. 그걸 틀리면 no-PIN 경로가 원격 우회가 되고; 맞추면 물리적으로 키보드 앞에 있는 한 사람을 위한 안전한 편의야.
주장이 아니라 socket 을 믿어
증거는 연결이 실제로 도착한 socket 주소 — loopback socket(127.0.0.0/8 또는 IPv6 ::1 peer)으로 loopback host 에게. socket 은 연결이 이뤄질 때 운영체제가 설정해; 클라이언트가 위조 못 해. 클라이언트가 위조할 수 있는 건 Host header 야 — 'localhost' 포함 원하는 아무 hostname 이나 보낼 수 있어. 그래서 Firelink 는 local 출처 확립에 요청된 host 를 절대 안 믿어. 요청된 host 는 결정을 좁힐 수만 있고(loopback socket 은 loopback host 와도 얘기해야 함), 원격 socket 을 local 로 절대 못 바꿔. 신뢰는 OS-확립 socket 에서 흐르고; 클라이언트-제공 header 는 뺄 수만 있지 더할 순 없어.
왜 '좁히되 넓히지 않음'이 트릭 전부인가
이 비대칭이 안전 속성이야. 원격 공격자는 Host: localhost 로 요청을 온종일 보낼 수 있어 — 그리고 절대 local 로 취급 안 돼, socket 이 원격이고 header 가 그걸 못 넓히니까. 한편 진짜 local 브라우저는 자기 loopback socket 으로 확인돼. 규칙의 방향이 중요해. 클라이언트가 통제하는 정보(header)는 신뢰를 더 작게 만들도록만 허용되고; 클라이언트가 통제 못 하는 정보(socket)가 그걸 부여하도록 허용돼. 클라이언트-제공 값이 신뢰를 늘릴 수 있는 어떤 auth 규칙도 안에 우회가 기다리는 규칙이야.