오늘의하루

[AUIGrid] XSS 취약점 발견 및 해결 과정 본문

코딩공부

[AUIGrid] XSS 취약점 발견 및 해결 과정

오늘의하루_master 2024. 9. 21. 02:51

1) 문제 발견

회사에서 사용 중인 AUIGrid라는 외부 라이브러리를 분석하던 중 사용자 입력을 바탕으로 그리드를 생성하는 과정에서 XSS(Cross-Site Scripting) 취약점이 존재함을 확인했습니다.

AUIGrid는 사용자 입력을 직접 HTML에 삽입하는 InnerHTML 방식을 사용하는데 이는 악의적인 스크립트가 웹 페이지에 주입될 수 있기 때문에 시스템 보안에 심각한 위협이 될 수 있습니다.

2) 문제 정의

XSS 공격은 공격자가 웹 페이지에 악성 스크립트를 삽입하여 웹 애플리케이션의 정상적인 동작을 방해하거나 사용자의 민감한 정보를 탈취하는 공격 기법입니다.

AUIGrid의 경우 사용자가 입력한 데이터가 필터링 없이 HTML에 직접 반영되기 때문에 공격자가 악의적인 스크립트를 입력하여 웹 페이지를 마음대로 조작할 수 있습니다.

왜 CSS 공격이 아니라 XSS 공격일까? 이는 웹 기술인 CSS와 혼동될 수 있기 때문입니다.

3) 해결 방법

외부 라이브러리의 코드를 직접 수정하기 어려운 상황에서 InnerHTML에 삽입되는 데이터를 이스케이핑 처리하여 XSS 공격을 방어하는 방법을 선택했습니다.

이스케이핑 처리란?
특수 문자를 HTML 엔티티로 변환하여, 해당 문자가 문자 그대로 표시되도록 하는 처리 과정입니다.
예를 들어 <&lt; 그리고 >&gt;로 변환하여 스크립트 태그로 인식되지 않도록 합니다.

예시 코드

function escapeChange(str) {
  return str.replace(/</g, "&lt;")
            .replace(/>/g, "&gt;");
}

let unSafeInput = "<script> alert('test'); </script>"
let safeInput = escapeChange(unSafeInput);
// "&lt;script&gt; alert('test'); &lt;/script&gt;"
...

element.innerHTML = safeInput;

4) 결론

이스케이핑 처리는 XSS 공격의 첫 번째 방어선이지만 끊임없이 진화하는 공격 기법에 완벽하게 대응하기 어렵기 때문에 지속적인 보안 점검 및 업데이트를 통해 시스템을 안전하게 유지해야 합니다.

Comments