본문 바로가기

OWASP Juice-Shop

[OWASP] CSRF(Cross-Site Request Forgery)

28_CSRF(Cross-Site Request Forgery)

난이도 : ★★★

취약점 유형

  • 접근 제어 오류(Broken Access Control)

문제 설명

  • 다른 출처 에서 교차 사이트 요청 위조(CSRF)를 수행하여 사용자 이름을 변경합니다.

힌트

  • 사용자 이름을 업데이트하는 양식을 찾은 다음 온라인 HTML 편집기에서 악성 페이지를 만드세요. 이를 위해서는 이전 버전의 브라우저가 필요할 수 있습니다.
  • 프로필 페이지에서 사용자 이름을 변경했을 때 어떤 일이 발생하는지 살펴보세요.
  • CSRF 공격에 대한 정보를 검색하고 이 문제에 적용할 수 있는 예시를 찾아보세요.
  • http://htmledit.squarefree.com 에서 CSRF 공격 코드를 작성하고 사용자 이름이 변경되는지 확인하세요.

Technical Note

  • 최신 브라우저의 SameSite Cookie 정책 및 X-Frame-Options/CSP 정책으로 인해 전통적인 CSRF PoC 동작이 제한되는 상태였음
  • 애플리케이션에서 CSRF Token 검증이 적용되지 않은 상태였음
  • XSS 취약점과 결합 시 동일 출처 정책 우회를 통해 CSRF 공격 성공 가능한 상태임
  • 전형적인 DOM-Based XSS → CSRF 연계 공격 시나리오에 해당함

대응방안

  • 모든 상태 변경 요청에 대해 CSRF Token 검증을 해야 함
  • SameSite Cookie 정책(Lax 또는 Strict) 적용이 필요함
  • 중요 요청에 대해 Origin/Referer 검증을 수행 해야 함
  • XSS 취약점 제거를 통한 CSRF 우회 가능성을 차단해야 함
  • CSP(Content Security Policy) 정책 강화 및 외부 스크립트 실행 제한이 필요함

풀이 과정

회원 정보(Profile) 페이지에 접속 후 개발자 도구를 이용하여 username 변경 요청 폼 및 요청 구조 확인함

 

문제에서 제시한 HTML Edit 온라인 에디터 페이지에서 CSRF 페이로드 작성 후 실행 시도하였으나 브라우저 보안 정책으로 인해 연결 거부 발생함

 

동일한 CSRF 페이로드를 메모장 기반 .html 파일로 생성하여 로컬 환경에서도 실행 시도하였으나 보안 정책 동일함

 

브라우저 버전에 따른 보안 정책 차이로 판단하여 CSRF 보호 기능이 약한 구버전 Firefox 환경 구성함

 

윈도우 및 리눅스 환경에서 구버전 Firefox를 이용하여 동일한 CSRF 재시도하였으나, 별다른 응답 없이 정상 동작하지 않는 것 확인함

 

이후 메인 검색창에서 XSS 취약점이 동작하는 점을 이용하여 동일한 CSRF 페이로드 삽입함

 

삽입된 스크립트가 실행되면서 CSRF 요청 정상 수행되었고, username 값이 변경되는 것 확인함

 

결과

CSRF 취약점 자체는 확인되었으나, 문제 요구사항인 외부 페이지 기반(htmledit.squarefree.com) 환경에서는 과제가 정상 처리되지 않아 최종적으로 해결은 실패함