🇰🇷 한글 설명
http.cookies.Morsel.js_output() 함수는 인라인 <script> 스니펫을 생성하며, JavaScript 문자열 컨텍스트를 위해 큰따옴표(")만 이스케이프합니다. 그러나 생성된 script 요소 내부의 HTML 파서에 민감한 시퀀스 </script>는 무력화하지 않습니다. 완화책으로는 쿠키 값을 base64로 인코딩하여 쿠키 값을 이용한 이스케이프를 방지합니다.
💡 쉬운 설명
웹 서버가 쿠키 값을 웹페이지 스크립트에 넣을 때 특정 문자열을 제대로 막지 못합니다. 이를 이용하면 공격자가 악성 스크립트를 페이지에 몰래 삽입할 수 있습니다.
🇺🇸 원문 (English)
http.cookies.Morsel.js_output() returns an inline <script> snippet and only escapes " for JavaScript string context. It does not neutralize the HTML parser-sensitive sequence </script> inside the generated script element. Mitigation base64-encodes the cookie value to disallow escaping using cookie value.
📍 영향받는 시스템
Python http.cookies 모듈의 Morsel.js_output()을 사용하는 Python 애플리케이션 (영향 버전은 CVE 공지 및 Python 보안 권고 확인 필요)
⚔️ 공격 벡터
공격자가 조작된 쿠키 값에 </script> 시퀀스를 포함시켜 js_output() 결과의 스크립트 블록을 조기 종료하고 추가 스크립트를 실행시키는 크로스사이트 스크립팅(XSS) 공격
🛡️ 대응 방법
Python을 보안 패치 버전으로 업데이트하고, 쿠키 값을 base64 등으로 인코딩하거나 js_output() 출력을 신뢰할 수 없는 값과 함께 직접 사용하지 않도록 수정
🔧 검증 코드
출력된 Python 버전을 CVE 공지의 영향 버전 및 패치 버전과 비교하여 취약 여부를 판단하며, 패치 버전 이상이면 해당 취약점이 수정된 것입니다.
python3 -c "import sys; print(sys.version)"