← 전체 학습 경로
CASE 02 · 입문

브라우저 값은 권한이 아니다

제공된 일반 열람자 계정으로 LeafPeer Review를 블랙박스 방식으로 점검하세요. 브라우저 개발자 도구나 로컬 프록시를 사용해 자신의 세션이 서버로 전달되는 방식을 관찰하고, 계정 역할을 정식으로 변경하지 않은 상태에서 검토 책임자 전용 보관함에 접근할 수 있는지 확인하세요.

CLIENT리프 리뷰 센터
TARGET SERVICELeafPeer Review
TARGET ADDRESShttps://wargame.hanplanet.com/leaf/inbox
ESTIMATED TIME25 MIN
CLIENT DOSSIER

의뢰 배경

리프 리뷰 센터는 독립 출판사의 원고 검수를 대행합니다. 어제 신규 계약직이 일반 열람자 계정으로 로그인한 직후 검토 책임자 전용 보관함을 보았다는 신고가 접수됐습니다. 계정 관리 기록에는 역할 승격이나 관리자 작업이 없었고, 해당 보관함에는 출간 전 원고가 포함됩니다. 품질·정보보호팀은 다음 출판사 온보딩 전에 접근 통제 실패 여부를 확인해야 합니다.

MISSION OBJECTIVE

이번 목표

일반 열람자 계정으로 검토 책임자 전용 보관함에 접근할 수 있음을 재현하고 역할 불일치 증거를 확보하세요.

  • 쿠키가 서버가 아닌 브라우저에 저장되는 값임을 설명한다.
  • Base64URL 인코딩과 무결성 검증의 차이를 구분한다.
  • 화면 숨김과 서버 측 인가 검사가 다른 통제임을 이해한다.
TECHNICAL BRIEFING

학습 노트 · 클라이언트가 보관하거나 전송하는 값은 사용자가 바꿀 수 있으므로, 권한의 근거로 단독 사용하면 안 됩니다.

쿠키는 서버가 Set-Cookie 응답 헤더로 제안하고 브라우저가 저장한 뒤, 이후 요청의 Cookie 헤더로 다시 보내는 작은 데이터입니다. 개발자 도구나 프록시를 사용하면 사용자는 자신의 브라우저에 저장된 값을 바꿀 수 있습니다.

Base64URL은 데이터를 읽기 쉬운 문자 집합으로 바꾸는 인코딩일 뿐 암호화나 서명이 아닙니다. 디코딩한 JSON의 role 값을 바꾸고 다시 인코딩할 수 있다면 서버는 원본 여부를 판별할 수 없습니다.

안전한 서비스는 서버 세션에서 권한을 조회하거나, 서명된 값을 검증한 뒤에도 현재 권한을 서버 데이터와 대조합니다. 버튼을 숨기는 JavaScript는 편의 기능이지 접근 통제가 아닙니다.

통제 위치사용자 변경 가능보안 판단에 사용
숨겨진 버튼 / disabled 속성가능불가
hidden input가능불가
서명 없는 role 쿠키가능불가
서버 세션의 role + 자원별 인가직접 변경 불가가능
Cookie: leaf_role=eyJyb2xlIjoicmVhZGVyIn0

Base64URL decode
{"role":"reader"}

변조 목표
{"role":"reviewer"}
FIELD REFERENCES

더 깊이 읽기

실습 전후에 공식 문서와 보안 아카데미 자료로 개념을 교차 확인하세요.

PROGRESSIVE HINTS

막혔을 때만 열기

다음 단서가 필요할 때만 한 단계씩 확인하세요.

힌트 1 · 브라우저 저장소 확인

Application 또는 Storage 패널에서 이 미션 경로에 설정된 leaf_role 쿠키를 찾으세요.

힌트 2 · 인코딩된 JSON

쿠키 값은 Base64URL로 인코딩된 JSON입니다. 패딩이 없어도 디코딩할 수 있습니다.

힌트 3 · 서버가 기대하는 역할

role 값을 reviewer로 바꾸고 Base64URL로 다시 인코딩한 뒤 페이지를 새로고침하세요.

선행 의뢰가 잠겨 있습니다

이전 단계를 완료하면 자동으로 의뢰 메일과 실습 환경이 열립니다.

로그인 후 실습