그누보드 5.2.7 취약점 패치 내용 분석

그누보드 5.2.7 취약점 패치 내용 분석


해당 내용은 연구 목적으로 작성 되었으며,
악용시 발생하는 불이익에 대해서는 책임지지 않음을 알려드립니다. 


GNU BOARD 5.2.7 보안 패치 내용[링크]

LFI to RCE 취약점 수정,
https://github.com/gnuboard/gnuboard5/commit/23a91b346d58824fd8189feeeac5d765546cb890
원격코드 실행 취약점(17-00160) 수정
https://github.com/gnuboard/gnuboard5/commit/f11c4531e9f0ef45161c3761cddd05eaaca441f9


주요 변경 내용

추가/변경 파일: lib/common.lib.php
추가/변경 내용:
    is_include_path_check( $path ) 함수 추가 > 매개변수에 경로가 포함되면 ” false “를 반환하는 함수
추가/변경 파일: bbs/qatail.phpbbs/qahead.phpbbs/content.phpadm/qa_config_update.phpadm/contentformupdate.php
추가/변경 내용:
    LFI to RCE 취약점 수정 및 기타 오류 수정.

취약점 분석


> 취약점 이름: LFI to RCE 취약점

 > 주요 변경 내용

추가/변경 파일: lib/common.lib.php
추가/변경 내용:
    is_include_path_check( $path ) 함수 추가 > 매개변수에 경로가 포함되면 ” false “를 반환하는 함수 추가

> 취약점[1]

취약포인트: adm/contentformupdate.php (RCE insert)bbs/content.php (RCE include)

> 패치 내용

[ ... ]
if( $co_include_head && ! is_include_path_check($co_include_head) ){
    $co_include_head = '';
    $error_msg = '/data/file/ 또는 /data/editor/ 포함된 문자를 상단 파일 경로에 포함시킬수 없습니다.';
}

if( $co_include_tail && ! is_include_path_check($co_include_tail) ){
    $co_include_tail = '';
    $error_msg = '/data/file/ 또는 /data/editor/ 포함된 문자를 하단 파일 경로에 포함시킬수 없습니다.';
}
[ ... ]

> 패치 분석

파일 동작 설명: adm/contentformupdate.php 파일은 adm/contentform.php에서 전달된 form에 대한 정보를 DB에 설정을 저장/변경한다.

contentform.php에서 $_POST로 오는 ‘co_include_tail’과 ‘co_include_head’에 대해 경로에 대한 필터링이 존재 하지 않는다.
이에 파일을 업/다운로드 할 수 있는 폴더인 data/file 과 data/editor의 대한 접근을 차단하여 취약점이 패치 되었다.

  • 취약점 발생 위치

http://[GNU_BOARD_HOST]/adm/contentform.php

가정: \[GNU_BOARD_PATH]\data\file에 phpinfo를 출력하는 코드가 담긴 “test.php”라는 php 파일이 저장되있음.

상단 또는 하단 파일 경로에 “test.php”가 저장된 경로를 입력한 뒤 확인,
아래 확인 옆 “목록” 에 들어가 등록한 글을 보거나 
http://[GNU_BOARD_HOST]/adm/content.php?co_id=[글 ID] 로 들어가 볼 수 있다. 해당 글을 보게 되면,

“test.php”의 코드가 실행 되는 것을 볼 수 있다.

 


> 취약점[2]

취약포인트: adm/qa_config_update.php (RCE insert), bbs/qahead.php (RCE include)bbs/qatail.php (RCE include)

> 패치 내용

[ ... ]
$error_msg = '';

if( $qa_include_head && ! is_include_path_check($qa_include_head) ){
    $qa_include_head = '';
    $error_msg = '/data/file/ 또는 /data/editor/ 포함된 문자를 상단 파일 경로에 포함시킬수 없습니다.';
}

if( $qa_include_tail && ! is_include_path_check($qa_include_tail) ){
    $qa_include_tail = '';
    $error_msg = '/data/file/ 또는 /data/editor/ 포함된 문자를 하단 파일 경로에 포함시킬수 없습니다.';
}

[ ... ]

                qa_include_head         = '{$qa_include_head}',
                qa_include_tail         = '{$qa_include_tail}',
[ ... ]

> 패치 분석

파일 동작 설명: adm/qa_config_update.php 파일은 adm/qa_config.php에서 전달된 form에 대한 정보를 DB에 설정을 저장/변경한다.

qa_config.php에서 $_POST로 오는 ‘qa_include_tail’과 ‘qa_include_head’에 대해 경로에 대한 필터링이 존재 하지 않는다.
이에 파일을 업/다운로드 할 수 있는 폴더인 data/file 과 data/editor의 대한 접근을 차단하여 취약점이 패치 되었다.

  • 취약점 발생 위치

http://[GNU_BOARD_HOST]/adm/qa_config.php

가정: \[GNU_BOARD_PATH]\data\file에 phpinfo를 출력하는 코드가 담긴 “test.php”라는 php 파일이 저장되있음.

상단 또는 하단 파일 경로에 “test.php”가 저장된 경로를 입력한 뒤 확인,
아래 확인 옆 “목록” 에 들어가 등록한 글을 보거나 
http://[GNU_BOARD_HOST]/adm/content.php?co_id=[글 ID] 로 들어가 볼 수 있다. 해당 글을 보게 되면,

“test.php”의 코드가 실행 되는 것을 볼 수 있다.

 


> 취약점 이름: 원격코드 실행 취약점(17-00160)

 > 주요 변경 내용

추가/변경 파일: adm/board_form_update.phpbbs/board_head.phpbbs/board_tail.php || adm/sms_admin/_common.php || plugin/htmlpurifier/safeiframe.txt
추가/변경 내용: RCE 취약점 패치 || sms 오류 수정 || iframe 사용이 가능한 사이트 추가

> 취약점

취약포인트: adm/board_form_update.php [RCE insert] >  bbs/board_head.php [RCE include]bbs/board_tail.php [RCE include]

> 패치 내용

[ ... ]
if(!is_include_path_check($_POST['bo_include_head'])) {
    alert('/data/file/ 또는 /data/editor/ 포함된 문자를 상단 파일 경로에 포함시킬수 없습니다.');
}

if(!is_include_path_check($_POST['bo_include_tail'])) {
    alert('/data/file/ 또는 /data/editor/ 포함된 문자를 하단 파일 경로에 포함시킬수 없습니다.');
}
[ ... ]

> 패치 분석

파일 동작 설명: adm/board_form_update.php 파일은 adm/board_form.php에서 전달된 정보를 게시판의 form을 DB에 저장/변경한다. 

board_form.php에서 $_POST로 오는 ‘bo_include_head’과 ‘bo_include_tail’에 대해 경로에 대한 필터링이 존재 하지 않는다.
이에 파일을 업/다운로드 할 수 있는 폴더인 data/file 과 data/editor의 대한 접근을 차단하여 취약점이 패치 되었다.

  • 취약점 발생 위치

http://[GNU_BOARD_HOST]/adm/board_form.php?w=u&bo_table=[BOARD NAME]&sst=&sod=&sfl=&stx=&page=#anc_bo_design

가정: \[GNU_BOARD_PATH]\data\file에 phpinfo를 출력하는 코드가 담긴 “test.php”라는 php 파일이 저장되있음.

상단 또는 하단 파일 경로에 “test.php”가 저장된 경로를 입력한 뒤 저장,
해당 게시판에 들어가면

“test.php”의 코드가 실행 되는 것을 볼 수 있다.

 

해당 내용에 대한 패치는 이미 이루어 졌으며
아래 링크를 통해 패치를 받으실 수 있습니다.
그누보드 5.2.7 보안 패치 다운로드

글의 문제가 있다면 댓글을 달아 주세요.

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.