브라우저 값은 권한이 아니다
제공된 일반 열람자 계정으로 LeafPeer Review를 블랙박스 방식으로 점검하세요. 브라우저 개발자 도구나 로컬 프록시를 사용해 자신의 세션이 서버로 전달되는 방식을 관찰하고, 계정 역할을 정식으로 변경하지 않은 상태에서 검토 책임자 전용 보관함에 접근할 수 있는지 확인하세요.
의뢰 배경
리프 리뷰 센터는 독립 출판사의 원고 검수를 대행합니다. 어제 신규 계약직이 일반 열람자 계정으로 로그인한 직후 검토 책임자 전용 보관함을 보았다는 신고가 접수됐습니다. 계정 관리 기록에는 역할 승격이나 관리자 작업이 없었고, 해당 보관함에는 출간 전 원고가 포함됩니다. 품질·정보보호팀은 다음 출판사 온보딩 전에 접근 통제 실패 여부를 확인해야 합니다.
이번 목표
일반 열람자 계정으로 검토 책임자 전용 보관함에 접근할 수 있음을 재현하고 역할 불일치 증거를 확보하세요.
- 쿠키가 서버가 아닌 브라우저에 저장되는 값임을 설명한다.
- Base64URL 인코딩과 무결성 검증의 차이를 구분한다.
- 화면 숨김과 서버 측 인가 검사가 다른 통제임을 이해한다.
학습 노트 · 클라이언트가 보관하거나 전송하는 값은 사용자가 바꿀 수 있으므로, 권한의 근거로 단독 사용하면 안 됩니다.
쿠키는 서버가 Set-Cookie 응답 헤더로 제안하고 브라우저가 저장한 뒤, 이후 요청의 Cookie 헤더로 다시 보내는 작은 데이터입니다. 개발자 도구나 프록시를 사용하면 사용자는 자신의 브라우저에 저장된 값을 바꿀 수 있습니다.
Base64URL은 데이터를 읽기 쉬운 문자 집합으로 바꾸는 인코딩일 뿐 암호화나 서명이 아닙니다. 디코딩한 JSON의 role 값을 바꾸고 다시 인코딩할 수 있다면 서버는 원본 여부를 판별할 수 없습니다.
안전한 서비스는 서버 세션에서 권한을 조회하거나, 서명된 값을 검증한 뒤에도 현재 권한을 서버 데이터와 대조합니다. 버튼을 숨기는 JavaScript는 편의 기능이지 접근 통제가 아닙니다.
| 통제 위치 | 사용자 변경 가능 | 보안 판단에 사용 |
|---|---|---|
| 숨겨진 버튼 / disabled 속성 | 가능 | 불가 |
| hidden input | 가능 | 불가 |
| 서명 없는 role 쿠키 | 가능 | 불가 |
| 서버 세션의 role + 자원별 인가 | 직접 변경 불가 | 가능 |
Cookie: leaf_role=eyJyb2xlIjoicmVhZGVyIn0
Base64URL decode
{"role":"reader"}
변조 목표
{"role":"reviewer"}막혔을 때만 열기
다음 단서가 필요할 때만 한 단계씩 확인하세요.
힌트 1 · 브라우저 저장소 확인
Application 또는 Storage 패널에서 이 미션 경로에 설정된 leaf_role 쿠키를 찾으세요.
힌트 2 · 인코딩된 JSON
쿠키 값은 Base64URL로 인코딩된 JSON입니다. 패딩이 없어도 디코딩할 수 있습니다.
힌트 3 · 서버가 기대하는 역할
role 값을 reviewer로 바꾸고 Base64URL로 다시 인코딩한 뒤 페이지를 새로고침하세요.
선행 의뢰가 잠겨 있습니다
이전 단계를 완료하면 자동으로 의뢰 메일과 실습 환경이 열립니다.