Latest Gnuboard version XSS to SQL Injection

 “3월의 나” 계획(브라우저 해킹)을 해놓고 2월의 나는 어디에 써놓았는지 기억이 안난다. OS X Kernel을 부시기로 했는데 조만간 부실 수 있을것 같다. 대신 OS X, iOS에서 발생하는 Exploitable할것 같은 버그를 찾았다. 열심히 분석해야겠다. 월간 임준오가 쉬면 곤란하니깐 2월엔 GnuBoard 취약점을 공개하겠다.

Summary

 BoB 과제를 진행하면서 찾은 취약점이다. 작년 시큐인사이드에서 adm1nkyj가 냈던 문제의 취약점과 매우 유사하다. 그 문제의 취약점도 그누보드 모티브다. 여기서 중요한건 패치를 전부 해야되는데 한곳만 해서 유사한 코드나 벡터를 통해 한번더 0-day로 만들 수 있다는 점이다.
 관리자 페이지에서 발생한 SQL Injection이라 관리자 권한을 흭득하는 XSS가 필요하다. 물론 XSS도 찾았기 때문에 같이 설명하겠다.

Vulnerability

– XSS

듣기로 그누보드 관리자 페이지에는 무수히 많은 XSS취약점이 존재한다. serialization동작 없이 `echo $variable;`을 하다보니 당연할 수 밖에 없다. 소스코드 리뷰를 진행하니 금방 찾을 수 있었다. adm/mail_select_form.php 파일 71, 114줄에  취약점이 존재한다.

value="">

그누보드에서는 모든 피라미터에 addslash하여 XSS를 방어한다. html tag를 파싱할때 attribute안에 있는 \”는 “라고 인식하지 않고 attribute의 종료로 인식된다. 따라서 다음과 같은 상황이 발생한다.


value="\">alert(1);">

성공적으로 공격이 가능하다,, Chrome XSS Auditor를 Bypass하려면 약간의 Trick을 주면 된다.- SQL Injectionaddslash를 하기 때문에 basic한 sql injection이 발생한 가능성이 없다. 그러므로 advanced한 취약점을 찾아야하는데,, 작년에 adm1nkyj가 secuinside때 낸 문제가 떠올랐다. 그 문제도 그누보드를 사용한 third-party앱에서 찾은 취약점을 기반해 낸것이다. 관련된 코드를 찾으니 아직 패치가 되지 않은 한 부분이 있었다.. adm/auth_list_delete.php 파일 12~24줄을 보면 된다. 요약하면 다음과 같다.인자를 Array로 받는 로직중 그 Array의 값을 그대로 sql query에 사용했을때 발생하는 문제다.

$b = $_GET['b'];
for ($i=0; $i<strlen($a); $i++) {
    $query = "select * from table1 where a='{$a[i]}' and b='{$b}';";
}
b는 addslash때문에 sqlinjection이 불가능하다. a는 Array를 줘야한다. 하지만 a가 String이 되어 버리면 어떻게 될까? 1 byte씩 들어가기 때문에 \를 하나 넣을 수 있게된다. 그렇게 되면…

// a : \ → addslash → \\
// b: Attack Query
$query = "select * from table1 where a='\' and b='Attack Query#';";<span id="mce_SELREST_start" style="overflow:hidden;line-height:0;"></span>

따단..


업데이트

26th Mar.

크레딧 상태가 이상하지만, 뭐 .. 어쩔 수 없다.

커밋 로그를 살펴보니 admin 페이지 말고도 file board쪽에서도 하나 더 있었나 보다, 뭐 이런류의 취약점은 많을거라 생각한다.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.