[게시판 실습] - 불충분한 인증 (2) 타인의 게시글 수정 및 삭제 가능
[설 명]
중요정보(개인정보 변경 등) 페이지에 대한 인증 절차가 불충분할 경우 권한이 없는 사용자는 중요정보 페이지에 접근하여 정보를 유출하거나 변조할 수 있으므로 중요정보 페이지에는 추가적인 인증 절차를 구현하여야 한다.
[점검 내용]
중요 페이지 접근 시 추가 인증 요구 여부 점검
[점검 기준]
중요 정보 페이지 접근에 대한 추가 인증을 하지 않는 경우 취약
[대응 방법]
* 중요정보를 표시하는 페이지에서는 본인 인증을 재확인하는 로직을 구현하고, 사용자가 인증 후 이용 가능한 페이지에 접근할 때마다 승인을 얻은 사용자인지 페이지마다 검증 필요
* 접근 통제 정책을 구현하고 있는 코드는 구조화, 모듈화가 되어 있어야 함
* 접근제어가 필요한 모든 페이지에 통제수단(로그인 체크 및 권한 체크)을 구현해야 하며 특히, 하나의 프로세스가 여러 개의 페이지 또는 모듈로 이루어져 있을 때 권한 체크가 누락되는 경우를 방지하기 위해서 공통 모듈을 사용하는 것을 권장
* 인증 과정을 처리하는 부분에 Client Side Script(Javascript, VBScript 등)를 사용하면 사용자가 임의로 수정할 수 있으므로 Server Side Script(PHP, JSP, ASP 등)를 통하여 인증 및 필터링 과정을 수행
[진단 과정]
1) 'admin' 계정으로 로그인 후 게시글을 작성합니다. 게시글이 정상적으로 작성됨을 확인하였습니다.
2) 'hacker' 아이디로 로그인 후 임의의 게시글 작성 후 수정 버튼을 클릭합니다. 이때 프록시 도구를 이용하여 요청값을 확인합니다. postID 값을 3으로 수정하였습니다.
4) 요청값 변경 시 게시글이 수정됐다는 응답값을 확인할 수 있으며 해당 게시글 조회 시 제목 및 내용이 변경됐음을 확인하였습니다.(같은 방식으로 postID값을 변경하여 삭제가 가능함을 확인하였습니다)
5) 소스코드 확인 시 게시글 수정 및 삭제 과정에서 게시글 번호(postID)만 확인하고 작성자(userID)는 확인하지 않는 것을 확인하였습니다.
6) 소스코드 내 userID를 확인하는 검증로직을 추가하였습니다.
7) 소스코드 수정 후 프록시 도구를 통하여 요청값 변경을 시도하였습니다.
8) 응답값 내 게시글 수정에 실패하였다는 메시지가 출력되었으며 게시글 역시 수정되지 않았음을 확인하였습니다.