상세 컨텐츠

본문 제목

[해외보안동향] 워드프레스, 2개의 XSS 취약점 잇달아 발견

국내외 보안동향

by 알약(Alyac) 2015. 4. 29. 16:19

본문


워드프레스, 2개의 XSS 취약점 잇달아 발견



4월 21일, 워드프레스가 최신 버전인 4.1.2버전을 공개했습니다. 이번 버전에서는 매우 심각한 stored-xss-vulnerability취약점이 수정되었습니다. 그리고 얼마 뒤, 해당 취약점에 대한 세부 내용이 공개되었습니다. 




첫 번째 XSS 취약점 상세분석

    

이 취약점은 보고된지 무려 14개월이 지나서야 패치가 진행되었습니다. 해당 취약점은 MySQL의 특성을 이용한 XSS 취약점입니다. 

   

MySQL의 utf8 문자열 집합 중, 한 개의 문자열은 1~3 바이트로 이루어집니다. 만일 한 개의 문자열이 3바이트보다 크다면, MySQL이 해당 문자열을 utf8mb4의 형식으로 저장합니다. 따라서 4바이트의 문자열을 utf8 문자열에 삽입하는 경우, MySQL의 디폴트  환경에서는 아래 내용처럼 댓글이 잘리는 현상이 발생할 수 있습니다. 해당 현상은 MySQL의 strict mode가 활성화되지 않은 환경에서 발생합니다. (워드프레스에서는 strict mode가 활성화되어 있지 않은 상태입니다.)


※ 사례 1

댓글에 아래와 같은 글을 작성합니다. (Web과 log사이에 utf8mb4문자를 추가합니다.)


<abbr title='Web𝌆log'>blog!</abbr> 


DB에는 아래와 같이 저장될 것입니다.


<abbr title='Web


이는 워드프레스 구조에 혼란을 가져올 수 있습니다. 


※ 사례 2

아래와 같은 문자를 추가합니다.


cedric' onmouseover='alert(1)'

style='position:fixed;top:0;left:0;width:100%;height:100%'


위의 문자를 추가하면 페이지에는 아래와 같이 표기될 것입니다.


<div class="comment" id="comment-1">

    <div class="comment-author">

        Testing

    </div>

    <div class="comment-content">

        <p>

            <abbr title='Web

        </p>

    </div>

<div class="comment" id="comment-2">

    <div class="comment-author">

        cedric' onmouseover='alert(1)' style='position:fixed;top:0;left:0;width:100%;height:100%'

    </div>

    <div class="comment-content">

        <p>

            Injected

        </p>

    <div>

</div>


※ POC

sometext
<blockquote cite='x onmouseover=alert(1) 𝌆'>

※ 상세내용


두 번째 XSS 취약점 상세분석

그러나 Klikki Oy사의 Jouko Pynnönen 보안 연구원은 가장 최신 버전인 4.1.2버전에는 여전히 해당 취약점이 존재한다고 밝혔습니다. Jouko Pynnönen 보안 연구원이 발견한 취약점은 MySQL의 또 다른 특성을 이용한 취약점입니다원리는 이미 패치된 첫 번째 취약점과 동일합니다.
 
이 취약점은 권한이 없는 사용자가 워드프레스 댓글에 자바스크립트를 인젝션할 수 있는 취약점으로, 댓글을 볼 때 자바스크립트가 자동으로 실행되는 것입니다. 만약 관리자가 로그인한 상태에서 스크립트가 실행된다면, 공격자는 서버에 저장된 플러그인과 테마에 임의 코드를 실행시킬 수 있습니다. 또한, 해당 취약점을 이용해 관리자의 패스워드를 변경할 수 있으며, 새로운 계정을 생성하는 등의 악의적인 행동을 할 수 있습니다. 

해당 취약점은 첫 번째에서 소개한 취약점과 같은 원리로, 댓글의 텍스트 길이가 너무 길다면 DB에 저장될 때 뒷부분이 짤리게 됩니다. 이는 MySQL text타입의 사이즈가 최대 64kb로 제한되어 있기 때문입니다. 그러나 워드프레스는 댓글의 길이에 제한을 두지 않기 때문에, 64KB보다 큰 사이즈의 댓글을 달면 페이지 오류가 발생해 XSS취약점이 발생하는 것입니다. 

※ 동작 원리
해당 취약점은 간단한 자바 스크립트 코드를 댓글로 남기고, 66,000자 또는 64KB 사이즈 이상의 문자를 추가하는 것으로 동작합니다. 이 댓글이 워드프레스 사이트의 관리자 권한을 가지고 있는 누군가에 의해 처리된다면, 관리자 모르게 악성코드가 실행될 수 있습니다. (워드프레스는 댓글이 등록되면 관리자의 승인 후 댓글을 표시하도록 기본설정되어 있습니다.)

공격자들은 정상적인 댓글을 달아, 관리자들을 속여 이러한 제한을 우회할 수 있습니다. 한 번만 관리자에게 승인을 받으면, 동일한 사용자가 동일한 포스팅에 악성 댓글을 작성하더라도 자동으로 승인을 받을 수 있기 때문입니다.

※ POC

<a title='x onmouseover=alert(unescape(/hello%20world/.source))
style=position:absolute;left:0;top:0;width:5000px;height:5000px
 AAAAAAAAAAAA [64 kb] ...'></a>

해당 취약점은 최신버전인  4.2 및 모든 상위 버전에 영향을 미칠 수 있습니다. 



참고:


관련글 더보기

댓글 영역