[WEB HACKING] Retire.js를 이용해 JS Library 취약점 찾기

오늘은 웹 해킹에 유용한 Browser Extension이자 분석툴의 plugin, 독자적으로 동작하는 Node.js app인 Retire.js에 대한 이야기를 할까 합니다. 써온지는 조금 됬으나 어느순간부터 Extension과 툴에 대한 소개를 좀 덜하게 되다보니 좋은 툴인데 이제서야 공유드리게 되네요.

이 프로그램은 웹 분석 시 많은 노가다 부분을 제거시켜주고 스캐너보다 취약 Library를 사용하는 페이지를 찾기에는 훨씬 유용합니다.

Retire.js?

Retire.js는 Javascript Library의 취약점을 찾아주는 JS Library이자, Node.js app입니다. 대체로 firefox, chrome, oprea 등 웹 브라우저의 extension으로 사용하거나 Node, Burp plugin 형태로 많이 사용하지요.

별다른 기능이 없는 것 같지만 의외로 취약점을 잘 찾아오는 프로그램 중 하나입니다. https://retirejs.github.io/retire.js/

일단 사용할 수 있는 환경을 보면..

A command line scanner A grunt plugin A Chrome extension A Firefox extension Burp and OWASP Zap plugin

command line 에서의 분석, grunt, browser 확장기능(extension) 과 Burp, ZAP에서의 plugin 형태로 사용이 가능합니다.

오늘은 extension 위주로 이야기드리겠습니다. 각각 사용 환경 별 설치는 github의 내용 보시는게 좋을 것 같습니다. node는 npm, 브라우저 확장기능은 각 브라우저의 extension store에서 burp,zap의 plugin은 다운로드 후 각 프로그램에서 로드하시면됩니다.

Retire.js를 이용한 취약점 분석

Retire.js 확장기능을 설치하면 브라우저에 아이콘 하나가 활성됩니다. 해당 아이콘은 웹 페이지의 load되는 js 버전을 분석 후 공개된 취약점이 있는 버전 사용 시 유저에게 노티만 해줍니다. 아래와 같이 숫자와 빨간색 불이 들어옵니다.

저 또한 jqeury 구버전을 사용하고 있는ㄴ지라..(업데이트좀하자 제발 / 왜이리 귀찮을까) 현재 공개 취약점이 존재하는 상태입니다. 다만 이 취약점들이 실제로 영향력이 있으려면 트리거될 조건이 필요하겠지요.

Retire.js를 눌러보면 description 페이지로 가는 링크가 있습니다. 눌러서 보면.. 어떤 취약점이고 어떤게 문제되는지 나오죠.

제가 사용하는 jquery-ui-dialog 1.11.2 버전은 CloseText에서 XSS가 가능한 취약점이 있습니다. 내용을 보자면..

 $(document).ready(function () {
            $('#dialog').dialog({ closeText: '<script>alert("XSS")<\/script>' });
        });

위와 같이 dialog 함수 내 closeText를 지정할 수 있는데, 이 구간에서 특수문자가 필터링되지 않아 고스란히 XSS 구문이 발동되게 되죠. 우리가 Reflected던, Stored던 closeText를 제어할 수 있는 부분이 생긴다면 XSS가 가능하단 소리입니다.

자 그럼 이제 디버거를 열고 찾아봅시다. 그냥 검색만 활용해도 많은걸 할 수 있어요.

! : 전체 파일 검색

: 현재 파일 검색

전체검색으로 코드 내 closeText: 를 사용하는 구간이 있는지 찾아줍니다. 무조건 하나는 나옵니다. 왜냐면 jquery에서 사용했기 때문이죠. 살펴보다가 사용자단에서 closeText를 쓰는 부분이 있다면 하나 발견한겁니다.

입력이 가능하다면 잘 짜맞춰서 코드를 넣어주면. XSS가 잘 되겠지요 :)

console로 검증만 해보면, closeText로 잘 실행되네요 :)

Reference

https://retirejs.github.io/retire.js/