gnuboard / gnuboard5

그누보드5 (영카트 포함) 공개형 Git
Other
299 stars 244 forks source link

보안취약점. 비밀글이 게시판 목록에서 내용, 썸네일이 노출되는 문제 #287

Closed kkigomi closed 8 months ago

kkigomi commented 10 months ago

참고: https://sir.kr/cm_free/1668768

비밀글로 작성한 게시물이 그누보드의 기본 gallery 스킨에서 글의 일부 내용과 썸네일 이미지(파일 첨부, 에디터 이미지 첨부)가 노출되는 문제가 있습니다.

목록(/bbs/list.php)에서 아래와 같이 본문 내용을 감추는 방법으로 패치해보려 했으나, 파일 첨부한 이미지는 get_list_thumbnail() 함수에서 비밀글 임을 알지 못하기 때문에 파일첨부한 이미지의 썸네일은 노출되네요.

diff --git forkSrcPrefix/bbs/list.php forkDstPrefix/bbs/list.php
index 208a51d4558ed037c7cfa00e4cd806c0ec950ce1..2c6792763c81549e26d8408487d7f716f8f9db56 100644
--- forkSrcPrefix/bbs/list.php
+++ forkDstPrefix/bbs/list.php
@@ -200,6 +200,24 @@ if($page_rows > 0) {
         $list_num = $total_count - ($page - 1) * $list_page_rows - $notice_count;
         $list[$i]['num'] = $list_num - $k;

+        // 비밀글은 권한이 없으면 내용을 가림
+        if (strstr($list[$i]['wr_option'], 'secret')) {
+            if (
+                // 그룹, 게시판 등의 관리자 권한
+                !$is_admin
+                // 비회원 글이거나, 로그인 회원의 소유의 글 확인
+                && (
+                    !!$list[$i]['mb_id'] && $list[$i]['mb_id'] !== $member['mb_id']
+                    || !$list[$i]['mb_id']
+                )
+            ) {
+                $list[$i]['wr_content'] = '비밀글입니다';
+                $list[$i]['wr_link1'] = '';
+                $list[$i]['wr_link2'] = '';
+                $list[$i]['file'] = array('count' => 0);
+            }
+        }
+
         $i++;
         $k++;
     }

스킨마다 비밀글을 확인하고 처리할 수는 있겠으나 보다 안전한 방법을 찾는 것이 좋을 것 같습니다. get_list_thumbnail() 함수는 게시판 목록 등에서 사용되는 만큼 그 목적성이 뚜렷한 편이라 생각은 되어서 이 함수에 비밀글임을 확인하게 하는 등의 방법을 적용할 수는 있겠으나, 아직 자세히 살펴보지는 못해서 확신이 서질 않네요.

파일 첨부된 이미지의 썸네일 문제만 해결되면 위 코드와 함께 적용하면 개별 스킨마다 처리하지 않아도 내용과 썸네일 이미지를 가릴 수 있을 것으로 보입니다.

kkigomi commented 10 months ago

비밀글의 답변글에 권한을 부여하기 위한 'ss_secret_' . $bo_table . '_' . $write['wr_num'] 이런 세션키를 사용하는 조건 또한 내용이 노출되도록 할 수는 있겠으나, #265 이슈 중 답변글의 권한이 잘못 부여될 수 있는 문제가 해결되지 않았기에 이 조건을 포함하지 않았습니다.

제목도 가릴 수는 있겠으나 현재 latest 위젯에서도 제목을 가리고 있지는 않아서 일단 그냥 두었습니다.

kkigomi commented 10 months ago

이참에... 글, 댓글의 권한을 확인할 수 있는 함수 하나 만들어졌으면 좋겠습니다.

list.php, 게시판 스킨, latest(), latest 스킨 등등 어디에서 처리를 하든, if 문 조건을 구구절절 나열하며 권한을 체크하는 게 여기저기 덕지덕지 붙어야해서 이를 간편하게 체크 가능한 함수가 하나 있었으면 좋겠네요.

thisgun commented 9 months ago

안녕하세요. SIR 입니다.

알려주셔서 감사합니다.

글, 댓글의 권한을 확인할 수 있는 함수는 차후에 고려하여 진행하도록 하겠습니다.