작성자 : r3dy(redjyjy@a3sc.co.kr)
편집자 : 니키(ngnicky@a3sc.co.kr)


A3AID08-01

Cross-site File Upload (CSFU) 공격 보안 권고안

 


권고문 작성일 : 2008. 3. 12

위험등급:

현재 상태(패치 여부) : -

벤더: 웹 서비스 모두 포함


대상 시스템 :

웹 서비스 모두 포함

 -
취약점 개요:
CSFU취약점은 XSS취약점의 응용 버전이라고 있다.
XSS 공격자가 요청한 request 대해 해당 게시물을 열람한 일반 사용자의 브라우저에서 실행 있게 하는 것이라면, CSFU 게시물을 열람한 일반 사용자가 자신도 모르는 사이에 공격자가 작성해놓은 요청을 하고, 원하는 작업까지 수행하게 된다.
결론적으론 일반사용자의 요청을 위조하여 원하는 결과를 얻어내는 취약점이라 있다. 공격기법 문서에서는 공격자가 작성한 악의적인 Ajax 작성된 스크립트가 포함 게시물을 일반 사용자가 클릭하거나 열람하는 것만으로도 스크립트가 실행되어 파일이 업로드 되는 과정을 테스트를 통해 살펴 본다.


심각도 및 취약점 확인

취약점

Cross-site File Upload 취약점 위험도

의도되지 않은 요청변조(file upload)



취약점 세부 분석 :

1. 취약점 내용

공격자가 작성한 악의적인 스크립트가 포함된 게시물을 일반 피해자가 열람할 경우 Ajax의 XMLHttpRequestPost를 이용하여 request가 생성되고 자동으로 submit 되도록 하여 악의적인 코드가 클라이언트 웹 브라우저에서 실행이 되도록 하는 취약점이다.
사용자가 글을 읽는 순간 스크립트가 실행이 되면서 파일을 업로드 시키는 HTTP 패킷을 요청하게 되어 파일 업로드가 발생되는 취약점이다. 


2. 공격 분석

가. AJAX의 XMLHttpRequestPost

피해자가 악의적인 글을 보았을 때 자동적으로 파일이 업로드 되도록 하기위해 데이터 송 수신을 처리하는 XMLHttpRequestPost인 Ajax를 사용하였다.


아래는 파일 업로드를 하기 위한 데이터 형식인 multipart/form-data를 사용한 화면이다.

 





나. 인코딩을 통한 데이터 값

파일 데이터를 올리기 위해 웹 브라우저는 약속된 문법에 의한 encription작업을 수행하는데 이것은 일련의 boundary 값이다. 파일 업로드가 성공적으로 수행되기 위한 필수 조건은 header의 boundary값과 데이터의 boundary값이 일치해야 한다.
boundary값 사이의 삽입된 임의의 구분자를 이용하여 각각의 필드를 구분하고 필드명과 필드값을 얻어올 수 있다.
각각의 필드는 -----------------------------7d81f42c70952란 boundary값으로 구분이 된다.
첨부파일 필드를 보게 되면 실제 데이터도 확인 할 수 있다.

이 값들을 통째로 인코딩을 시켜 Ajax파일의 post부분에 삽입하여 스크립트를 작성하였다.

 




다. 스크립트의 실행

아래 화면은 이 글을 열람하게 될 경우 스크립트가 실행되도록 하여 자동으로 파일 업로드가 이루어지도록 하는 공격자의 게시물이다.
 




아래는 공격자가 원하는 제목과 내용으로 파일 업로드가 성공적으로 이루어진 화면이다.



실제로 파일이 첨부되었는지 확인을 해보았다.

 



3. 위험 분석

자동으로 입력된 신뢰정보를 기반으로 한 웹 애플리케이션에서 사용자의 신뢰 정보 내에서사용자의 요청을 변조하여 사용자가 의도하지 않은 reguest를 보내어 공격자가 원하는 파일을 업로드 시킬 수 있다. 이는 해당 시스템에 자기도 모르는 사이에 어떤 파일이 업로드 될지 모르며, 만일 쉘이 업로드 될 경우엔 해당 시스템이 장악될 수도 있는 잠재적인 위험성을 내포하고 있다.




대응 방안:

CSFU취약점은 XSS취약점과 맥락을 같이 하는 취약점이다. 때문에 XSS취약점에 대한 개선이 최우선 되어야 것이며 이를 통해 CSFU 취약점에 대한 위협을 줄일 있다.
악성 스크립트가 사이트에 침투하는 것을 막는 것이 가장 중요하기 때문에, 들어오는 모든 입력에 대해 필터링을 적용해야만 한다. 또한, 폼에 토큰을 추가시켜 하나의 토큰만을 사용하도록 해서 CSFU 위험을 효과적으로 제거 하는 방법도 있다.
어플리케이션의 취약점을 완벽하게 제거하는 것은 현실적으로 힘들기 때문에 지속적인 관리를 해주는 것이 무엇보다 중요하다.



관련 사이트 : 
본 취약점에 대한 추가적인 정보를 확인할 수 있는 관련 사이트는 다음과 같다.
 http://www.gnucitizen.org/blog/cross-site-file-upload-attacks/


Copyright(c) 1998-2008 A3 Security ,LTD


Disclaimer
※ 현재 ㈜에이쓰리시큐리티에서 테스트 및 분석 중에 있으며, 이 문서는 계속 업데이트될 것입니다. 본 문서는 보안취약점으로 인한 피해를 최소화하는 데 도움이 되고자 작성되었으나, 본 문서에 포함된 대응방안의 유효성이나 기타 예상치 못한 시스템의 오작동 발생에 대하여서는 ㈜에이쓰리시큐리티에서는 일체의 책임을 지지 아니합니다.

웹 어플리케이션 취약점의 권고내용으로 포스팅한 내용으로써, 악의적인 사용을 금지합니다.
법적인 책임은 사용한 사람에게 있음을 알립니다.