안녕하세요.
워드프레스 플러그인 취약점 중 하나를 제보하여 PoC를 해보려고 합니다.
0. WordPress Plugin
WordPress 플러그인 중 하나인 Advanced iframe 플러그인 입니다.
지난글에 작성하였던 iframe과 상당히 유사한 기능을 가지고 있는 플러그인 입니다.
사용법은 간단합니다.
위 사진의 내용처럼 shortcode를 이용하여 advanced_iframe태그를 사용하면 끝입니다.
Shortcode란 WordPress 내에서 사용하는 매크로 기능이라고 보시면 됩니다.
기본적으로 대괄호를 사용하여 지정된 코드나 파라미터를 사용하면 일반 스크립트 태그로 변환되어 적용됩니다.
1. Disallow_unfiltered_html
PoC 들어가기 전에 WordPress 설정 파일 중 wp-config 파일 내 일부 설정을 변경해줘야합니다.
Disallow_unfiltered_html은 WordPress 내 허가되지 않는 HMTL 태그 및 코드 사용 금지하기 위해 사용되는 필터링이며 해당 필터링이 설정되어있지 않은경우(false) 취약점으로 인정되지 않으니 주의해주시기 바랍니다.
advanced_iframe에서 사용하는 파라미터들의 shortcode입니다.
저 중에서 id 파라미터부분을 이용해 취약점을 재현하겠습니다.
id 파라미터부분에 입력한 값이 그대로 삽입되는것을 확인할 수 있습니다.
해당 파라미터 부분을 이용해보겠습니다.
2. Vulnerable point
스크립트 구문을 삽입해보겠습니다.
구문을 삽입하여 확인한 결과,
1. 더블 쿼터(")를 이용하여 attribute 사용 시작
2. <body 태그 부분을 사용하여 unfiltered_html 검증부분에서 필터링 처리를 시킴
3. attribute가 닫히고 디폴드 id값인 advanced_iframe가 삽입됨
4. 이후 작성한 나머지 구문이 맨 뒤에 삽입됨
5. 대괄호로 닫아 구문을 완성시키지 않은 채 닫아버림
결론적으로 앞 구문의 필터링 처리가 미흡하여 뒤에 구문까지 영향을 받아 아래와 같은 구문이 남아 attribute 마지막 부분에 삽입된걸 확인할 수 있습니다.
onload=alert45
소스코드를 살펴보면 Attribute에 대한 필터링으로 괄호를 설정하였기때문에 제거된것을 확인할 수 있습니다.
하지만 백틱(`)에 대한 필터링 처리가 존재하지 않아 해당 문자로 괄호를 대신하여 XSS구문을 완성할 수 있습니다.
3. PoC
필터링 처리가 미흡한 부분을 이용하여 취약점을 발생시켜보겠습니다.
백틱에 대한 필터링 처리가 없어 결국 XSS구문이 동작됨을 확인할 수 있습니다.
문자열 출력만으로는 뭔가 조금 부족한거같아 추가적으로 우회를 시도해보겠습니다.
괄호가 필터링 코드에 적용되어 있기 때문에 괄호를 hex encoding으로 변환하여 삽입해보았습니다.
생각보다 쉽게 쿠키값을 출력시켰네요..
4. 원인분석
주요 원인으로 filterXSSAttributes함수의 필터링 처리가 미흡하여 XSS구문이 동작되었습니다.
제 생각엔 해당 부분 이외에도 잘못 설정된 부분들이 꽤 있는것 같습니다만 이부분은 넘어가도록하겠습니다..
5. 보안대책
2024.3 버전으로 보안 업데이트 버전이 올라왔습니다.
단순히 괄호의 hex coding 값만 추가되었네요.
최초의 XSS구문을 삽입한결과, 해당 구문은 필터링처리되어 XSS구문이 발생되진 않습니다.
그렇지만 제 기준에서는 보안조치가 덜 되었다고 생각이 드네요
다른 방식으로 우회를 하면 취약점이 또 나올거같은..
(시간이 되시는분이 계시면 우회하여 제보해주시길)
Wordpress plugin의 5가지 취약점을 제보하였는데, 취약점에 대해 더 깊이 생각하고 나름 연구도 많이한거 같아서
개인적으로는 만족스러웠던 경험이었습니다.
다음은 OSCP나 SW보안약점 진단원 취득 목표로 잡았기 때문에 해당과 관련한 글을 작성할 예정입니다.
특히 OSCP는 타쿠대디님의 "OSCP 가이드" 책 출간을 기다리고 있는중이기 때문에 해당 책이 나오길 기대하면서 천천히 준비할거 같네요.(영어 공부도 포함..)
우선 SW보안약점 진단원 취득을 목표로하겠습니다.
그럼 이만