포럼

아래 취약점 목록 중 상세 내용이 공개된 취약점은 패치 공개 이후 2개월 이상이 지난 것들입니다. 발견 이후 2개월이 지나지 않은 취약점 정보는 악용 방지를 위해 공개하지 않습니다.

1. 게시판 API를 통해 익명글의 작성자를 유추할 수 있는 문제(치명도: 낮음) - 2021년 6월 패치 공개
XE에는 게시판 API가 존재합니다. 이를 이용하면 글 작성자나 내용만 추출할수 있는데요, 익명글의 경우 API를 통해 조회시 익명처리가 부실하게 이루어지는 관계로 회원번호를 확인할수 있게 됩니다. 수정법은 회원번호가 음수일때 0으로 변경하는 것입니다.

2. 다국어 문서 수정시 HTML 필터링이 이루어지지 않음(치명도: 심각) - 2022년 2월 패치 공개
XE는 다국어 지원을 위해 확장변수 시스템을 사용했습니다. 글이 작성된 언어와 다른 언어 상태에서 수정시 원문은 그대로 두고 해당 언어의 글 본문을 저장하는 방식입니다. 문제는, 다국어 글 저장시 일반 글 작성시과 달리 태그 필터링 과정을 일체 거치지 않는 점입니다. 따라서 일반 회원이 임의 스크립트를 글에 삽입할 수 있습니다. alert를 띄우는 것부터 세션 아이디 탈취까지 가능합니다.(특히 XE는 기본적으로 세션ID에 httponly를 걸지 않아 document.cookie 로 접근 가능합니다) 수정법은 예상하셨듯이 다국어 글 작성시에도 필터링을 적용하는 것입니다.

참고로, 다국어 기능을 끄는 것은 아무 상관 없습니다. XE는 다국어 지원을 끄더라도 언어를 강제로 변경할 수 있으므로 취약점 악용이 가능해지게 됩니다.

chrome_2022-07-20_16-25-05.png

심각성을 느끼실수 있도록 공식사이트에서 실험한 결과를 공개합니다. 현재 해당 글은 삭제했으며, 작성된 글에는 alert 스크립트 외 작성한것은 없었다는점 밝힙니다.

3. 외부페이지를 통한 RCE 취약점(치명도: 영항없음 ~ 보통 ~ 심각) - 2022년 3월 패치 공개
XE에는 외부페이지라는 기능이 있습니다. 이 기능은 일반 PHP 파일 형태로 페이지를 작성해 실행할수 있게 합니다. 예전 zb4 시절 프레임으로 작성한 뒤 로그인 폼이나 로그인 정보 페이지를 인클루드하던 것을 생각해 보시면 이해가 조금 더 빠르실겁니다. 외부페이지 실행 과정은 다음과 같습니다.

1. 외부페이지를 PHP로 해석합니다.
2. 1번 결과물을 그대로 XE 템플릿으로 해석합니다.
3. 2번 결과물을 출력합니다.

눈치가 빠르신 분들은 어디가 문제인지 아실수 있으실겁니다. 네. 1번 외부페이지를 PHP로 해석한 결과를 아무 의심없이 템플릿으로 해석하면서 문제가 생깁니다. 예를 들어, PHP 파일이 다음과 같다고 가정합니다.

<?php
echo Context::get('userval1');

위 파일은 사용자가 보낸 GET 파라메터중 userval1이란 값을 출력해주고 있습니다. 필터링이 없어 불안해 보이지만? XE에서 기본적인 필터링은 해주고 있어 문제는 없습니다. 아니, 없었습니다.

여기에 악성 사용자가 다음 요청을 보냅니다.

사이트주소/?index.php?mid=outerpage&userval1={echo($string)}&string=foobar

userval1에 문제가 되는 내용은 없으니 필터링에도 살아남습니다. string 역시 마찬가지입니다. 1차 해석을 마친 상태는 다음과 같을겁니다.

{echo($string)}

이제 템플릿 엔진이 동작합니다. 템플릿 엔진은 중괄호가 원래 있던것인지 사용자가 입력한 것인지 구분할수 없으므로 그대로 실행합니다. 또한, 템플릿 엔진에서 변수를 바로 사용하면 사용자 요청의 값을 그대로 사용하니 결과적으로 echo('foobar'); 가 실행됩니다. 지금 예제에서는 단순 화면 출력 함수를 실행했지만 여기에 다른 함수를 실행한다면? 끔찍한 일이 생길겁니다.

하지만 다행히 외부 페이지를 일체 사용하지 않는다면 취약점에도 노출되지 않습니다. 설령 외부페이지가 있다 해도 사용자가 입력한 값을 출력하지 않으면 문제가 되지 않습니다.(예를 들어 회원정보만 얌전히 읽어 처리하는 페이지라던가) 따라서 치명도 역시 영향없음(외부페이지 미사용) / 보통(외부페이지 사용하나 사용자 입력값 미출력) / 심각(외부페이지 사용하며 사용자 입력값도 표시)로 나눠 기재했습니다.

수정법은 해석 순서를 PHP->템플릿 에서 템플릿->PHP로 변경하는 것입니다. 위 예시대로라면 1단계 처리뒤

<?php
echo Context::get('userval1');

가 되고 2단계 처리후

{echo($string)}

가 됩니다. 혹은 그냥 템플릿 해석을 중단해버릴수 있습니다. 두번째 방법(템플릿 해석 중단)을 사용한 패치가 공개되어 있습니다.

4. 설문조사 스킨 경로 조작을 통한 RCE 취약점(치명도: 보통 ~ 심각) - 2022년 7월 패치 공개
공개된지 2달이 지나지 않은 취약점이라 상세 내용은 공개하지 않습니다. 수정법은 skin이나 colorset 변수에 폴더명으로 사용 불가능한 문자를 모두 제거하는 것입니다. 취약점 특성상 윈도우 서버에서만 공격이 가능하므로 치명도 역시 보통(윈도우 서버 미사용) / 심각(윈도우 서버 사용)으로 나눠 기재했습니다.

글쓴이 제목 최종 글
hoguda 안녕하세요 버전문제로 질문 드리려고 합니다. [6] 2022.11.04 by redmi
지식사이트 이런 사이트도 언론사처럼 만들 수 있나요?  
YJSoft XE 1.11.6 버전 취약점 정리 file  
humb**** 링크가 열리지 않고, index.php 파일이 다운로드 되는 문제...  
애니즌 유튜브 에디터 컴포넌트..? 제작을 위한 사전 작업 중입니다. [20] file 2022.06.02 by baew0065
가을풍경 [아이디어제안] 전자책모듈 / 문제은행 모듈이 있었으면 좋겠습니다. [9] 2022.03.01 by 선한이웃
canadaescortshub 오랜 숙원인 유튜브 정복을 위해서.  
Adi Which One is Better Mysql or MariaDB? [2] 2021.12.15 by himan
himan xe에서 직접 php가지고 홈페이지 만들기로 넘어갑니다  
제이엔지 오랫만에 XE사이트 로그인해 들어왔더니 file  
또별 db.config.php 잘 다루는 방법 알려주셔요. [3] 2021.08.03 by 박경수
diomin Transfer-encoding: chunked 대용량 파일 첨부 시 에러 문제 [2] 2023.08.04 by Moss
funbakee XE1은 개발 중단인가요? [5] 2021.05.11 by Lollitta17
BJ람보 잘지내시죠?  
아진검 xe1 공식사이트 회원정보수정 문제  
누리 이런 에러 해결방법 좀 알려주세요 [3] file 2020.09.08 by 세걸
HONANDA 이부분 글자를 수정하고 싶은데 위치를 못찼겠네요 file  
솔리드 CloudFlare은 트래픽 절감에 확실한 효과가 있네요. [76] file 2020.08.24 by taniagold99
제이엔지 6개월마다 로그인 안하면  
EOND.COM 오픈소스였는데 스킨매뉴얼 게시판이 잠겼네요 [1] 2020.06.27 by Luatic™