csp bypass와 advanced

csp bypass와 advanced의 차이가 궁금합니다

csp bypass에서 사용된 페이로드가 csp bypass advanced 에서 먹히지 않는 이유를 잘 모르겠습니다.
return과 render template 의 차이라는 것 까지는 어디선가 들어왔는데,
자세한 내용과 원리를 알고 싶습니다.

#web #csp
작성자 정보
답변 1
avatar
fow
대표 업적 없음

안녕하세요,
CSP Bypass 문제에서, 강의에서 사용하는 payload가 동작하는 이유는 다음과 같습니다.

  1. admin이 <script src="/vuln?param=document.location='/memo?memo='%2bdocument.cookie"></script> 내용을 담은 /vuln 엔드포인트 방문
  2. /vuln을 방문하는 과정에서 scriptsrc를 로드하여, /vuln?param=document.location='/memo?memo='%2bdocument.cookie가 담고 있는 스크립트 내용인 document.location='/memo?memo='%2bdocument.cookie를 수행

패치된 CSP Bypass Advanced의 경우, /vuln이 파라미터로 전달 받은 내용을 그대로 출력하는 것이 아니라, 완전한 HTML 문서를 반환한다는 차이가 있습니다.

여기에서, /vuln 내부에서 사용자 파라미터를 로드하는 템플릿에 safe 옵션이 걸려있기 때문에 앞서 말한 과정 중 1번 과정은 동작합니다.
하지만 2번 과정에서 스크립트를 로딩한 뒤 그 내용을 수행할 때, /vuln이 완전한 HTML 문서를 반환하기 때문에 정당하게 javascript로 해석될 수 없어(<!DOCTYPE html>~로 시작하는 문서 자체를 javascript로 해석하려고 하기 때문에) 오류가 발생하는 것입니다.

위와 같이 두 번 돌아가는 페이로드를 작성하는 것은 CSP를 우회하기 위함인데, 각 단계에서 달성하고자 하는 것은 무엇인지, 그리고 실제로 실행하게 되는 스크립트/구문은 어떤 것인지 생각해보시면 이해하시는데 도움이 될 것 같습니다!

2024.05.10. 18:51
질문에 대한 답을 알고 계신가요?
지식을 나누고 포인트를 획득해보세요.
답변하고 포인트 받기