gnuboard / gnuboard5

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

Security Report : Cross-Site Scripting (R) #167

Closed P0cas closed 2 years ago

P0cas commented 2 years ago

Description

     $unkind = 'send';
  else if ($kind == 'send')
     $unkind = 'recv';
- else
+ else {
+    $kind = clean_xss_tags(trim($kind));
+    alert(''.$kind .'값을 넘겨주세요.');
+ }

  if ($page < 1) { $page = 1; } // 페이지가 없으면 첫 페이지 (1 페이지)

2e816 커밋에서 패치된 Sanitizer 우회를 통한 XSS 취약점을 우회하였습니다. 패치에서 사용된 trim() 함수는 인자의 맨 앞과 뒤에 존재하는 공백을 제거하는 함수입니다. 맨 앞/뒤의 공백만 제거 한다는 특성을 이용하면 쉽게 우회할 수 있습니다.

Proof of Concept

스크린샷 2022-03-02 14 51 30
https://sir.kr/bbs/memo.php?kind=dummy%0D%3C/noscript%3E%3Csvg%20onload=alert(document.domain)%3E&spam=1

로그인 이후에 위 URL로 접속할 경우 스크립트가 실행되는 것을 볼 수 있으며, 세션 탈취로 이어질 수 있습니다.

kagla commented 2 years ago

if ($kind == 'recv') $unkind = 'send'; else if ($kind == 'send') $unkind = 'recv'; else { // $kind = clean_xss_tags(trim($kind)); // alert(''.$kind .'값을 넘겨주세요.'); alert("kind 변수 값이 올바르지 않습니다."); }

$kind 변수에는 recv, send 값만 유효하므로 코드를 위와 같이 수정하도록 하겠습니다.

알려주셔서 감사합니다.

P0cas commented 2 years ago

감사합니다 :)