[패치됨] Laravel 7.x – XSS vulnerability

이 포스팅은 laravel 7.0 ~ 7.1.2 까지 버전에 존재하는 취약점 입니다.
사용중이신 버전이 포함되어있다면 laravel 7.1.3이상으로 업데이트 하시기 바랍니다.

Laravel news of XSS vector

laravel-news 에서 7.1.2 미만의 버전에서 XSS 공격 포인트가 있으니 업데이트하라는 소식이 들려와 어느부분이 취약한지 궁금해 해당 부분에 대한 코드를 찾아 봤다.

Github를 의 커밋 로그를 보면 attributesToString 메소드에 $escapeBound 옵션이 추가되었고, sanitizeComponentAttribute란 static 메소드가 추가되었다.

sanitizeComponentAttribute 메소드는 입력된 값이 문자열이거나, object 인경우 __toString 매직 메소드가 존재하면 e()(laravel의 html 이스케이프 함수)로 string을 소독(?) 하는 메소드이다.

근데 x-blade 문법에서 attributes->merge하는 메소드에서는 해당 코드가 적용되지 않아 tag 부분을 이스케이프 할 수 있어 XSS 공격이 가능해진다.

XSS code

<!-- resources/views/welcome.blade.php -->
<x-xss></x-xss>
<!-- resources/views/components/xss.blade.php -->
<div {{ $attributes->merge(['class' => request()->css]) }}>XSS able</div>

URI : http://127.0.0.1:8000/?css="><script>alert(1)</script>

<!-- Result -->
<div class="\"><script>alert(1)</script>">XSS able</div>
XSS in laravel 7.1.2

위와 같이 XSS가 실행되는 것을 볼 수 있다.

Patch

메일 보내고 1시간 만에 패치하고 릴리즈 되었다 ㄷㄷ;

7.1.3 버전에서 패치되었으며[commit] composer update를 하면 자동으로 패치되어진다.

나도 업데이트에서 언급 해줫으면 좋겟다. 나도 찾은건 찾은건데… ㅜ

그누보드 5.2.9 & 5.2.9.2 취약점 패치 내용 분석

그누보드 5.2.9 & 5.2.9.2 취약점 패치 내용 분석


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


GNU BOARD 5.2.9 & 5.2.9.2 보안 패치 내용[5.2.9]&[5.2.9.2]

 


주요 변경 내용

그누보드 글 수정 XSS 취약점
https://github.com/gnuboard/gnuboard5/commit/94f25f73fac224aa5c460306afd203558bde6322

최고관리자 정보수정 문제
https://github.com/gnuboard/gnuboard5/commit/e76f36a1be5f8b937815228f51c33bd15bda3b57

Stored XSS 취약점 수정
https://github.com/gnuboard/gnuboard5/commit/ad102421cb348d4aa286c0a75330c41e83ab3118

 

취약점 분석


취약점[1]

> 취약점 이름: 그누보드 글 수정 XSS 취약점

 > 주요 변경 내용

추가/변경 파일: bbs/write.php
추가/변경 내용:
     XSS 필터 추가

> 패치 내용

[ ... ]

if ( $w == 'u' && (! $is_member || ! $is_admin || $write['mb_id'] !== $member['mb_id']) ){
     // kisa 취약점 제보 xss 필터 적용
     $content = get_text(html_purifier($write['wr_content']), 0);
}

[ ... ]

> 패치 분석

조건 1, 게시판 설정에서 DHTML에디터 설정이 되어있어야 한다.
위 코드 3번째 줄에 if문 조건속 $w == ‘u’,
즉 수정모드로 들어가게되면 html_purifier( … )함수를 통해 XSS 필터링한다.

>> 시연

해당 취약점은 DHTML 에디터 기능에서 터지는 취약점이므로 DHTML 설정이 켜져있어야한다.

5.2.9 취약점

해당 에디터를 통해 XSS 를 입력하여 게시글을 저장한다.

5.2.9 취약점

글작성을 완료한 후 게시글에 들어가면 XSS가 실행이 되지 않지만 글 수정화면에 들어가게 되면,

5.2.9 취약점

이와같이 XSS가 실행 됨을 볼 수 있다.

 


취약점[2]

> 취약점 이름: 최고관리자 정보수정 문제

 > 주요 변경 내용

추가/변경 파일: adm/member_form_update.php
추가/변경 내용:
      패치 내용 확인.

> 패치 내용

[ ... ]

if ($is_admin !== 'super' && is_admin($mb['mb_id']) === 'super' ) {
    alert('최고관리자의 비밀번호를 수정할수 없습니다.');
}

[ ... ]

> 패치 분석

상당히 까다로운 조건이 필요하다.
조건1, admin (super)계정 이외 회원관리 권한이 있는 계정
조건2, admin (super)계정이 해당 계정보다 level이 낮아야함

>> 시연

테스트용 계정에 회원관리 권한을 부여한다.

super계정(admin)이 해당 계정보다 권한 레벨이 낮게 설정한다. (DB에서 직접 수정하는 편이 편함.)

super계정(admin)의 비밀번호를 일반 계정이 변경할 수 있다.

 


취약점[3]

> 취약점 이름: Stored XSS 취약점 수정

 > 주요 변경 내용

추가/변경 파일: bbs/qawrite.php
추가/변경 내용:
     XSS 필터 추가

> 패치 내용

[ ... ]

//$content = get_text($write['qa_content'], 0);
        
// KISA 취약점 권고사항 Stored XSS
$content = get_text(html_purifier($write['qa_content']), 0);

[ ... ]

> 패치 분석

1:1문의 설정이 DHTML에디터 사용중이여야 한다.
$content 값을 html_purifier( … )함수로 XSS 필터링 처리해준다.
글 수정 취약점과 유사한 취약점으로 1:1에서 일어난다는 것 외에는 큰 차이가 없다.

>> 시연

1:1 문의 게시판이 DHTML을 사용하는지 확인한다.

HTML입력모드으로 XSS 코드를 삽입한다.

작성된 문서에서 수정을 누르게 되면,

XSS 코드가 실행되게 된다.

 


 

해당 내용에 대한 패치는 이미 이루어 졌으며
아래 링크를 통해 패치를 받으실 수 있습니다.
그누보드 5.2.9.2 패치(5.2.9 패치포함)


잡소리..
패치가 나온 후 꾀 지나서 업로드 하게 된건
그냥 제가 게을러서입니다..또륵…

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

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


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


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


주요 변경 내용

그누보드 파일 삭제 취약점 17-282 수정
https://github.com/gnuboard/gnuboard5/commit/e6a3df6f0873f627955d8cb23e9a6d8c08eae145

추가/변경 파일: plugin/editor/cheditor5/imageUpload/delete.php
추가/변경 내용:
    파일 삭제 필터 추가

[외부 링크]

검색 컬럼 취약점                ….. jinmo123
자동로그인 인증 우회 취약점 ….. adm1nkyj
 

취약점 분석


> 취약점 이름: 파일삭제 취약점

> 주요 변경 내용

추가/변경 파일: plugin/editor/cheditor5/imageUpload/delete.php
추가/변경 내용:
     파일 삭제 필터 추가

> 취약점

==========취약점 익스에 필요한 그누보드 설정==========
(cheditor5를 사용)

==========취약점 익스에 필요한 그누보드 설정==========

> 패치 내용

Github 참고: plugin/editor/cheditor5/imageUpload/delete.php

[ ... ]
$filesrc = isset($_POST["filesrc"]) ? preg_replace("/[ #\&\+\-%@=\/\\\:;,\'\"\^`~\_|\!\?\*$#<>()\[\]\{\}]/", "", $_POST["filesrc"]) : '';

if( !$filesrc || ! preg_match('=^[^/?*;:{}\\\\]+\.[^/?*;:{}\\\\]+$=', $filesrc) || ! preg_match('/\.(gif|jpe?g|bmp|png)$/i', $filesrc) ){
[ ... ]

> 패치 분석

파일 동작 설명: filesrc로 넘어온 파일에 대해서 간단한 hash 검사 후 해당 되는 파일을 삭제

하지만 hash 검사는 파일을 올린 사용자만 구별할 뿐 시스템 파일 삭제를 막지 못한다.

  • 취약점 발생 위치

http://[GNU_BOARD_HOST]/plugin/editor/cheditor5/imageUpload/delete.php

순서대로 이미지 파일을 추가 후 해당 파일의 이름을 알기 위해 이미지 주소를 복사

hash 필터를 위회해 파일을 삭제하기 위해 정상적인 파일을 올려 파일 이름을 구한다.

파일 검사 필터링 우회해 dbconfig.php 파일 삭제 파라미터 전송

delete.php에 파라미터를 filesrc=[위에서 구한 파일 이름 '_'까지 삭제]/../../../dbconfig.php와 같이 보낸다.

그럼 이렇게 dbconfig.php파일이 삭제 되는 것을 볼 수 있다.


[ 외부 링크 ]

 

> 검색 컬럼 취약점

jinmo123’s blog

http://45.55.68.215:2368/geunubodeu-5-search-column-vulnerability/


> 자동 로그인 인증 우회 취약점

adm1nkyj’s blog

http://blog.adm1nkyj.kr/2017/06/5.html

그누보드 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 보안 패치 다운로드