크로스사이트 스크립팅
크로스사이트 스크립팅은 신뢰된 웹사이트가 공격자가 조작한 콘텐츠를 이용자의 브라우저에서 실행하게 만드는 웹 취약점입니다.
크로스사이트 스크립팅
XSS는 Cross-Site Scripting의 약칭입니다. 게시글, 검색어, 프로필, 오류 메시지, URL 조각 등 공격자가 통제한 값이 적절한 출력 인코딩과 처리 없이 HTML·자바스크립트 문맥에 삽입될 때 발생합니다.
저장형 XSS는 악성 입력이 서버에 저장되어 여러 이용자에게 반복 실행됩니다. 반사형 XSS는 요청값이 즉시 응답에 반영됩니다. DOM 기반 XSS는 브라우저 스크립트가 위험한 방식으로 입력을 DOM에 삽입할 때 발생합니다.
핵심 특성
사용 맥락과 작동 원리
브라우저는 동일 출처 정책에 따라 신뢰된 사이트의 스크립트에 쿠키와 페이지 데이터 접근 권한을 부여합니다. XSS 코드는 이 권한을 이용해 화면을 바꾸고 사용자의 행동을 관찰하거나 요청을 보낼 수 있습니다.
HttpOnly 쿠키는 스크립트의 쿠키 원문 읽기를 제한합니다. XSS 코드가 사용자 브라우저에서 인증된 요청을 보내거나 가짜 입력창을 표시하는 위험은 남을 수 있습니다.
유출·오용 시 위험
XSS는 계정 사칭, 개인정보 노출, 결제·설정 변경, 피싱 화면 삽입, 악성 사이트 이동으로 이어질 수 있습니다. 관리자 화면에서 실행되면 더 높은 권한이 악용될 수 있습니다.
저장형 XSS는 많은 이용자에게 장기간 영향을 줄 수 있습니다. 게시물 삭제만으로 캐시, 알림, 이메일 렌더링 등 다른 출력 경로의 문제가 해결되는지 확인해야 합니다.
사건 공지에서 확인할 항목
- 저장형, 반사형, DOM 기반 중 취약점 유형을 확인합니다.
- 어떤 사용자 역할과 페이지에서 코드가 실행되었는지 확인합니다.
- 세션, 개인정보, 관리자 기능에 접근한 정황을 확인합니다.
- 웹·모바일 웹뷰·이메일 등 모든 렌더링 경로를 확인합니다.
- 세션 폐기와 취약 코드 수정, CSP 보강 완료 여부를 확인합니다.
개인이 취할 조치
- 피해 서비스의 모든 세션을 종료하고 비밀번호와 MFA를 점검합니다.
- 브라우저 확장프로그램과 의심 다운로드를 확인합니다.
- 계정 설정, 결제, 메시지 발송 내역을 점검합니다.
- 문제가 해결될 때까지 공식 안내된 안전한 접속 경로를 사용합니다.
조직의 보호조치
- 출력되는 문맥에 맞는 인코딩을 기본 적용합니다.
- innerHTML 같은 위험한 DOM 삽입을 줄이고 안전한 텍스트 API를 사용합니다.
- HTML 입력이 필요한 경우 검증된 정화 라이브러리를 사용합니다.
- 강한 CSP와 쿠키 보안 속성을 피해 제한 수단으로 적용합니다.
- 템플릿, 프런트엔드, 웹뷰, 관리자 화면을 함께 보안시험합니다.
혼동하기 쉬운 개념
XSS는 브라우저에서 공격자 콘텐츠가 실행되는 문제입니다. CSRF는 인증된 브라우저가 원하지 않는 요청을 보내도록 유도합니다. SQL 인젝션은 데이터베이스 질의 구조를 변경합니다. HTML 삽입은 스크립트 실행이 없어도 화면 위조와 피싱에 사용될 수 있습니다.