라이믹스 2.0.19로 업데이트하세요.

릴리즈 노트: https://rhymix.org/news/334

 

업데이트를 미루고 계신 분들을 위해 구버전 패치도 별도로 배포합니다. 이번이 정말 마지막입니다.

- 라이믹스 1.x 패치

- XE 1.x 패치

 

외부페이지로 불러오는 로컬 파일에 PHP 코드나 템플릿 코드가 포함되어 있는 경우, 이를 이용하여 공격자가 서버단에서 실행되는 임의의 코드를 주입할 수 있는 원격 코드 실행(RCE) 취약점입니다. 얼마 전 떠들썩했던 log4j 취약점과 유사한 형태로, 2007년 가을 이후 공개된 모든 버전에 문제가 있습니다. RXE 역사상 가장 오래 묵은 보안취약점이 아닐까 싶네요.

 

외부페이지에서 템플릿 코드를 사용하지 않더라도 PHP 코드가 한 줄이라도 있다면 위험한 것은 마찬가지이니 안심하지 마시기 바랍니다. 외부페이지 내용을 변환하는 과정이 잘못 설계되어서 관리자가 쓰지 않은 템플릿 코드를 공격자가 임의로 삽입할 수 있다는 점이 문제의 핵심이니까요. (위젯 코드, CSS, JS 코드는 괜찮습니다. 다른 사이트의 URL을 불러오는 외부페이지도 이번 취약점과는 무관하지만, 그건 그것대로 위험한 짓이고...)

 

라이믹스 2.0.19로 업데이트하시면 모든 외부페이지에서 <!--@if(조건문)-->, {$var}, <load target=""> 등의 템플릿 코드가 작동하지 않게 됩니다. 각 페이지 설정에서 템플릿 코드 해석 여부를 선택하는 옵션이 있으나 기본값이 OFF이므로, 필요한 페이지에 한하여 다시 켜시면 됩니다. 템플릿 코드 해석 기능을 켜더라도 현재 알려진 취약점과 관련해서는 안전합니다. 그러나 유사한 취약점이 또 발견될 수도 있으니, 앞으로는 가급적 외부페이지에서 템플릿 코드 사용을 자제하시기 바랍니다.

 

라이믹스 1.x 및 XE 1.x용으로 배포하는 패치도 템플릿 코드가 작동하지 않게 되는 것은 마찬가지이지만, 다시 켤 수 있는 옵션 없이 무조건 다 막힙니다. 따라서 외부페이지에서 템플릿 코드를 모두 제거해야 정상 작동하게 됩니다. 템플릿 코드가 꼭 필요한 분은 라이믹스 2.0.19 또는 그 이후 버전으로 업데이트하는 것이 유일한 선택지입니다.

 

그렇다고 패치를 미루면 더 곤란합니다. RCE 취약점은 관리자 권한 탈취, 민감한 정보 노출은 물론, 사이트를 고스란히 삭제해 버릴 수도 있는 매우 위험한 문제입니다. 얼마 전 log4j 취약점이 알려졌을 때는 마인크래프트를 해킹해서 전혀 다른 게임으로 치환하거나, 남의 사이트를 강제로 패치해 주는 일명 "백신"까지 나왔을 정도로 활용도가 높지요. XSS, CSRF 등 흔히 알려진 취약점 유형과 달리, 사실상 뭐든지 가능한 백지수표라고 보면 됩니다. 일부 외부페이지를 수정할 수 있을 때까지 닫아 두느냐, 사이트를 통째로 빼앗기느냐, 선택은 자유이고 책임은 오롯이 님의 몫입니다.

 

기진곰

profile
GitHub @kijin 사람을 위한 인터넷 생태계의 발전에 많은 관심을 갖고 있습니다.
우리가 만들어 가는 XE의 새 이름, 라이믹스(Rhymix) 프로젝트에 참여하고 있습니다.
오픈소스 도로명주소 검색서버 및 API Postcodify를 개발, 운영중입니다.
국내외 서버 및 클라우드서버 세팅, 이전, 튜닝해 드립니다.
  • profile

    타운에 계실 가능성은 없지만 XE1용 비공식 보안패치 버전도 출시되었습니다.

     

    수정) 혹시 opage 모듈이 설치되어 있다면 제일 좋은건 페이지 모듈의 외부페이지 기능으로 옮기는것이지만, 첨부된 opage.zip 파일 받아서 opage 폴더를 덮어씌우셔도 됩니다. 제거전 최신버전인 1.5.0.3_beta 기준 수정본입니다.

    Atachment
    첨부
  • profile profile
    빠른 대응 감사합니다.^^
  • profile profile
    감사합니다~

    저같은 경우 기존 제작된 사이트의 경우 서버의 php버전이 낮아서 어쩔수 없이 xe를 유지하고 있는 경우가 있습니다.
    호스팅이니 php버전을 올린 서버로 이동하면 되겠지만 xe만으로 만들어진 사이트라면 쉬운데 아닌 경우 전체 코드를 갈아 엎어야 하다 보니 클라이언트가 그에 따른 비용을 지불하는 것도 아니라서 쉽게 진행할수가 없습니다.
    보안패치 업로드 정도야 ftp열어서 파일만 올려주면 되니 그정도는 가능하겠지만요.
  • profile profile
    감사합니다. 저도 라이믹스로 탈출을 못하고 xe에 갇혀있는데 매번감사합니다.
  • ?

    흠.. 이번 업데이트는 굉장히 어렵군요

    복잡한 사이트 만들때는 아웃페이지를 꽤 많이 사용하는데
    ( 특히 상황에 따라 레이아웃을 안 쓰는 페이지는 어딘가에 강제 include 하기도 어려워 아웃페이지를 쓰게 되는데 )

    현재 XE 용 패치로 공개한건,
    아웃페이지 내의 템플렛코드를 다 막아버리는 형태의 수정이니

    결국은 라이믹스2 버전의 소스를 이용해
    템플렛코드해석을 키는 기능까지 소스를 찾아서 XE 의 page 모듈을 개선하는 형태의
    업데이트 방법을 찾아야겠네요 ^^;;


    항상 수고에 감사드립니다~!


    ps. 보안패치는 XE 용으로 계속 그래도 지금처럼 알려주시면 안 될까요 T^T
    신규사이트는 라이믹스로 넘어가도 기존 사이트는 넘어가기가 참 힘들거든요

  • ? profile

    2022년 12월 31일까지는 비공식 보안패치 버전을 업데이트할 예정입니다.

  • ? profile

    네, 세진님 꽤나 난감하실 것 같다고 예상하고 있었습니다.

    기존 방식은 PHP 실행 후 템플릿을 해석하므로 include가 두 번 발생하는데, 이 순서를 뒤집어 템플릿 해석을 먼저 하고 include를 한 번으로 줄이는 것이 핵심입니다. 포팅을 시도하실 경우 참고하시기 바랍니다. 지난달 보안패치도 코드 실행 순서가 문제였는데, 비슷한 문제가 많네요... (켜고 끄는 옵션은 포팅 안 하셔도 됩니다.)

    단, 템플릿을 임시파일에 저장하면 해당 페이지에서 선언한 인클루드 경로, CSS/JS/이미지 로딩 경로 같은 것도 모두 조정해 주어야 한다는 불편이 있습니다. 라이믹스 2.0에서는 비교적 쉽게 보완할 수 있었지만, XE는 캐시 구조나 TemplateHandler, path 관련 각종 상수들이 라이믹스와 많이 다르기 때문에 테스트하기 어려워서 그냥 안전하게 템플릿 해석을 막는 방향으로 패치했습니다.

    XE용 패치 방법을 따로 공지하지 않더라도 라이믹스에서 공개하는 패치와 윗분의 비공식 저장소를 참고하여 충분히 응용하실 수 있을 거라고 믿습니다. 무엇보다도 이런 인수공통(?) 빈티지(?) 취약점은 제발 좀 그만 나왔으면 좋겠네요... ㅠㅠ

  • profile

    외부페이지는 쓰질 않아서 이번에는 조용히 넘어갈 수 있을듯하네요.

    항상 감사합니다.

  • profile
    게시판 외에 모두 외부페이지로 구성되어 있는데 난검하네요...
  • profile profile

    업데이트 후 옵션 변경하시면 외부페이지 대부분 그대로 사용하실 수 있어요!

  • profile profile
    업데이트 후 옵션 변경은 어디서 해야 되는지 알 수 있을까요...
  • profile profile
    모든 외부페이지는 맨 아래에 "설정" 버튼이 표시됩니다. (위젯페이지도 마찬가지)
    깨져서 나오는 페이지가 있다면 이 버튼을 클릭하여 설정을 변경하시면 됩니다.
  • profile profile

    도메인/index.php?mid=service_tip&act=TelegramAlertSetting

    제가 사용하는 에드온중 텔레그램을 사용하여 푸시 받을수 있도록 회원메뉴에서 바로가기 창이 뜨도록 구성 되어 있는데(전이게 외부페이지 인줄 알았네요..ㅠㅠ) 따로 모듈이 없이 동작되는거라 아무래도 외부 페이지는 아닌것 같네요 혹시  최근 패치 업데이트 이 후 텔레그램 푸시 연동페이지에 접근시 레이아웃도 적용이 안되고 잘못된 요청이라는 메세지가 떠서 그러는데 패치랑 관련된게 있을까요?

    링크 접근시 주소는 맨위 링크정보와 같습니다.

  • ?
    타운과 같이 구글 서치를 이용 하는 경우에는 문제가 없지요? 해당 html 문서에는

    아래와 같은 구글 스크립트만 존재 합니다. 이게 php 코드 형태로 봐야하는지는 몰라서 문의 합니다.

    <gcse:searchresults-only></gcse:searchresults-only>
    <p>
    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
    <ins class="adsbygoogle"
    style="display:block; text-align:center;"
    data-ad-format="fluid"
    data-ad-layout="in-article"
    data-ad-client="ca-xxx--xxx"
    data-ad-slot="xxxxxxx"></ins>
    <script>
    (adsbygoogle = window.adsbygoogle || []).push({});
    </script>

    2. 그리고 템플릿 코드 실행 여부 및 php 코드 실행 까지 허용 해두지 않으면 (둘다 언클릭 상태)

    "PHP 코드가 있다면 취약한 것은 마찬가지이니 " 이 부분에도 안전해지는것이라 보면 되는거지요?

    항상 감사합니다
  • ? profile

    라이믹스 2.0.19라면 두 가지 옵션 모두 켜놓으셔도 안전합니다. 또다른 취약점이 발견되지 않는다면 말이지요. 현재 알려진 취약점 기준으로 위험한 옵션을 굳이 제공하지는 않아요.

    물론 PHP 실행이나 템플릿 해석을 하지 않아도 정상 작동하는 외부페이지라면 굳이 켜실 필요는 없습니다. XE도 과거에 몇 차례 연달아 보안패치를 발표한 적이 있듯이, 취약점이 하나 나오면 해당 부분과 관련되었거나 유사한 기능에 관심이 쏠리기 때문에 누군가가 또다른 취약점을 발견하곤 하거든요. 패치를 우회하는 방법을 발견할 수도 있고요. 이렇게 아직 발견되지 않은 취약점에 대비하고, 앞으로 가급적 외부페이지에서 템플릿 코드를 사용하지 말자는 의미에서 OFF를 기본값으로 해둔 것입니다.

  • profile ?

    네. 앞으로를 보고 둘다 굳이 켜지 않을려고 물어보았습니다. 확인 감사합니다.

  • profile profile

    그럼 외부php에서 오토로드를 인클루드하더라도 그냥 변수만 활용하는 것은 괜찮은 거지요?

     

    덧. 아, 그래도 안심하지 말라고 하셨군요;;;

  • profile profile

    2.0.19 패치 후에는 어떤 변수나 로직을 사용하셔도 괜찮습니다. 외부페이지에서 변수, 함수, CSS/JS 파일 로딩, 다른 파일 인클루드 모두 가능합니다. 템플릿 해석 기능을 켜면 사실상 스킨과 똑같이 취급합니다.

    패치 전에는 어떤 코드라도 모두 위험합니다. <?php echo $var ?> 이런 변수 하나도 안 됩니다. 실제로 이번 취약점 테스트에 사용한 외부페이지 소스가 딱 변수 하나였습니다.

    외부페이지는 코어 환경을 모두 구성하고 page 모듈을 실행하는 과정에서 인클루드되므로, autoload도 이미 로딩된 상태이고 코어에서 제공하는 함수나 클래스 모두 바로 불러다 쓸 수 있는 상태입니다. 라이믹스를 거치지 않고 독립적으로 작동하는 페이지라면 일일이 인클루드하고 초기화해야겠지만, 외부페이지로 불러오는 용도라면 그런 거 건너뛰고 애드온처럼 곧바로 코드를 쓰셔도 됩니다. 아주 오래 전부터 그랬는데 모르는 분이 많더라구요...

  • profile profile
    아하, 어떤 말씀인지 알겠습니다.
    감사합니다!!
  • profile

    개발자 상주하지 않고 외주줘서 인수만 한 사이트들은 대응이 쉽지 않겠네요. 이런 사이트가 최신버전일리도 없으니, 외부페이지 템플릿 문법 사용이 허용 안될테고, 그러면 화면이 깨질테고, 아예 패치를 포기하겠죠~.

    빙하속에 묻혀있던 운석에서 외계 생명체가 튀어나온 것 같습니다~~ 그냥 덮어? 그러다 제로데이 결함되면 다같이 망하는 거니까 패치하는 것이 옳습니다. 패치 감사합니다~.

  • profile

    패치 후

    {conv_num($data_k->TotalCase)}

    이런 함수 적용된 출력이 안되는데요. 그냥 저 문구 그대로 출력됩니다. 


    {@ $temp = conv_num($data->korea->totalCase)}

    {$temp}
    이런 과정을 거쳐야 출력이 되는 상황입니다.

  • profile profile

    내장함수는 잘 되는데, 같은 파일 내에서 함수를 선언한 경우 컴파일 시점의 차이 때문에 인식하지 못하는 것 같습니다. conv_num 함수 선언을 config.user.inc.php나 애드온 등 다른 곳으로 빼내면 잘 되는지 확인해 보세요.

  • profile profile
    말씀해준 대로 config.user.inc.php 에 함수를 작성하고 원래 있던 곳의 함수는 삭제하니 출력이 됩니다.
  • profile profile

    어떤 이유에서인지 XE 템플릿 문법은 {a($b)}라고 했을 때 a라는 함수가 존재하지 않으면 해당 문법을 변환하지 않도록 되어 있습니다. 앞에 다른 것을 붙이면 그 규칙이 무력화되는 것을 보면 솔직히 별 의미 없는 제한인 것 같은데... 아마도 JS가 템플릿으로 잘못 해석되는 것을 막기 위해 대충 땜빵해 놓은 것 같습니다. 그렇다고 이걸 바꾸면 기존 템플릿에 포함된 JS가 다르게 해석될 수 있으니 곤란하고요.

    예전에는 외부페이지를 먼저 실행한 후 템플릿으로 해석했기 때문에, 템플릿 해석 시점에는 이미 conv_num 함수가 존재했을 것입니다. 이번 패치로 실행↔해석 순서가 바뀌었는데, 보안상 이 순서가 매우 중요하기 때문에 코어 차원에서 고치기는 어려울 것 같네요.

  • profile profile
    네. 이대로 운영하겠습니다. 감사합니다.
  • profile

    위의 사례처럼 정상적인 템플릿 문법인데도 패치 후 안 되는 것이 있다면 제보해 주세요. 급하게 패치하느라 의도하지 않은 부작용이 있을 수 있습니다. 버그 취합하여 코어에서 보완할 수 있는 부분은 보완하고, 그렇지 않더라도 가능하면 수정 방법을 안내해 드리겠습니다. (그러니까 일단 업뎃 후 테스트를... ㅎㅎ)

     

    현재 PHP 8.x에서 디버그를 관리자에게만 표시하도록 설정한 후 로그아웃하면 에러가 뜬다고 하니 참고하세요.

  • profile

    외부페이지 출력 위젯이라고 있습니다.
    여러 외부페이지를 하나의 위젯페이지에 조합해서 보여줄 수 있고 또는 외부파일,위젯 등도 섞어서 사용이 가능해서 외부페이지 출력 위젯을 통해 외부파일을 출력하여 외부페이지 처럼 보이게 하는 경우 위젯페이지의 설정에는 지금 옵션을 켤 수 가 없는데요.

    동일하게 해당 위젯 페이지에서 옵션을 켠 것처럼 해줄 수 있을까요? 이게 안되면 운영중인 페이지들이 폐기되어야 하는 경우도 발생합니다.

     

    https://xe1.xpressengine.com/index.php?mid=download&package_id=22753403

  • profile profile

    opageWidget.class.php 13번째 줄 $oPageView = &getView('page'); 아래에
        $oPageView->proc_php = true;
        $oPageView->proc_tpl = true;
    이렇게 두 줄 추가해 주시면 될 것 같습니다.
    그런데 캐시 경로도 달라지고 해서 그냥 위젯페이지로 볼 때와는 살짝 다를 수도 있겠네요.

  • profile profile
    감사합니다. 시도해 보겠습니다.
    가장 영향이 많이 받고 중요한 사이트 1개는 조심스럽네요. 일단 패치는 하긴 해야 하는데
    현재 페이지를 유지하면서 가능할지 타진해보겠습니다.
  • profile profile
    다행히 알려주신대로 하니 기존 운영중인 페이지 모두 정상출력되네요.
    모바일쪽 부분 관련패치도 미리 해주었습니다.
  • profile
    보안패치 수고하셨습니다.
  • profile

    다른 이슈였습니다. 수정합니다.

  • profile profile

    PHP 코드가 실행되고 있는지부터 확인해 보시고,

    <?php ?> 안에서 사용하는 변수와 템플릿 문법에서 사용하는 변수는 별도입니다.

  • profile profile

    다른 이슈였습니다. 수정합니다.

  • profile profile

    $obj->변수들;이 뭔지에 따라 다르겠지요. $obj를 초기화하지 않았다면 다른 데서 선언한 값에 영향을 받을 수도 있고요. 변수 스코프 관련해서 다소 변경이 있었습니다.

    $module_info, $oDocument 등은 코어에서 특정한 목적으로 사용하는 변수인데 그걸 다른 정보로 덮어쓰는 것도 문제 소지가 있어 보입니다.

  • profile profile
    패치 후 되던게 안되서 당황했었네요.
    패치 이전 버전이 1.9.9.9 라서 말씀대로 아마 변수쪽에서 변화가 있는지 살펴 보겠습니다.
  • profile profile
    보안패치와 상관 없는 버전업에 따른 검색 관련 이슈였던것 같습니다. 댓글을 삭제 할까요?
  • profile profile
    삭제 가능하면 삭제하셔도 됩니다.^^
  • profile profile
    댓글이 있어서 삭제가 안되는군요 ㅡ.ㅡ;;; 삭제 부탁드립니다.
  • ?

    KakaoTalk_20220316_171253756_sscr.png

     

    패치가 적용이 되었습니다. 감사합니다.

    그런데 대시보드 하단에는 3/16 릴리이즈라고 잘 나오는데

    상단에는 여전히 1.11.6 으로 업데이트 하라는 메시지가 사라지지 않습니다.

    이거 괜히 업데이트 클릭할까 무서운데 메시지 삭제하려면 어디 파일을 수정해야 할까요?

     

    KakaoTalk_20220316_171253756_cr.png

     

     

  • ? profile
    공식자료실 버전이 아니므로 출력될수 있으나 업데이트하시면 안됩니다. 다음 패치부터는 라이믹스처럼 코어 쉬운설치 업데이트도 차단해두겠습니다.
  • profile
    게시판에서 외부페이지 인클루드하여 사용하는 것이 있는데 게시판에서도 템플릿 해석 설정할 수 있는 방법이 없을까요?
  • profile profile
    게시판 스킨은 원래 템플릿 문법 쓰는 것 아닌가요? 스킨에서 <include target="" /> 템플릿 문법을 사용하여 다른 파일을 인클루드하면, 인클루드된 파일도 템플릿으로 취급합니다. 이것과 관련해서는 달라진 점이 없습니다.
  • profile
    그렇군요. php 메모리 오류였네요. 한페이지에 보기 문서를 꽤 많이 나오게 해두었었는데, 이번 패치로 php 메모리 관련된 부분이 수정이 되었었던 건가요? 어쨌든 php 메모리 리미트를 512로 변경하니 해결되었네요.
  • profile profile

    처리 순서가 바뀌고 이런저런 로직이 추가되었기 때문에 메모리 사용량이 다소 늘어났을 수는 있습니다. 만약 좀더 오래된 버전에서 업그레이드하셨다면 DB 접속 방식 변경의 영향도 있을 테고요. 예를 들어 같은 양의 데이터를 DB에서 불러올 때 mysqli보다 PDO가 메모리를 더 많이 잡아먹는다고 알고 있습니다.

     

    아무리 그래도 페이지 하나에 512M의 메모리가 필요하다면 좀 과한 것 같네요. 모든 문서의 모든 필드를 다 표시할 필요가 없다면 불러오는 정보의 양을 간소화해 보시는 것이 어떨까요?

  • profile profile
    네 그래야겠네요. 감사합니다~^^
  • profile
    외부페이지라는게 어떤걸 말하는건가요?
  • profile profile

    "설치된 모듈" → "페이지" 모듈 설정 화면으로 들어가서, 목록 중 타입이 "OUTSIDE"로 되어 있는 페이지가 외부페이지입니다. 임의의 파일을 실행한 후 그 내용을 라이믹스 안으로 가져와서 보여주는 기능이니 보안상 민감할 수밖에요. 제로보드 시절부터 있었던 일종의 "날코딩 지원 기능"이라고 할 수 있겠습니다.

     

    많이 쓰는 사이트는 이것만 잔뜩 쓰기도 하고, 안 쓰는 사이트는 전혀 안 씁니다. 외부페이지보다는 위젯페이지가 좀더 XE스러운 솔루션이기도 하고요. 금시초문이시라면 안 쓰실 가능성이 높겠네요.^^

  • profile ?

    관리자 페이지 > 사이트 디자인 설정 > 레이아웃

    "스킨적용 미리보기를 지원하지 않습니다."
    "보안정책상 허용되지 않습니다."

    이 메시지도 "외부페이지" 문제 때문인지, 정상인지 궁금합니다.

  • ? profile

    오류는 확인했습니다만, 기능에 영향을 주지는 않는 것 같습니다.
    미리보기 기능 대충 보니 완전 괴랄한 방식으로 구현해 놓았네요...

  • profile ?

    저는 소개페이지(인사말,연혁,사업소개등등)는 대부분 외부페이지로 만들어 사용중에 있습니다.
    위젯페이지나 문서페이지는 온라인에서 수정 할 수 있다는 장점은 있으나, 디테일한 편집 작업은 결국 에디터를 이용해서 편집해야 하다보니.
    이부분을 좀 보완시킨 기능이 나오면 좋겠다는 생각을 늘 하고 있긴 하네요.
    외부페이지 문서도 관리자가 웹에서 직접 수정 할 수 있으면 간단한 수정 같은건 로그인해서 수정 하면 되니.

    그런데 외부페이지에서 html 형태가 아닌 프로그램 코드가 추가 되었다면 머리가 좀 아파지네요.

  • ? profile

    외부페이지를 만들기보다는 그냥 빈 문서페이지로 해놓고
    레이아웃에서 mid에 따라 적당한 템플릿을 인클루드하는 방법도 좋습니다.
    이 때, 모듈에서 출력하는 $content는 상큼하게 무시해 버립니다.

    <!--@if($mid === 'about')-->
        <include target="pages/about.html" />
    <!--@else-->
        {$content}
    <!--@end-->

    사이트에서 커스터마이징한 대부분의 페이지를 전체 디자인과 함께 관리할 수 있다는 이점이 있습니다.

  • ?
    구버젼 패치가 마지막이라는건... 혹시 담번엔 2.2로 버젼 올라가나요?
  • ? profile

    다음에 이런 취약점이 발견되더라도 라이믹스 1.x 및 XE 1.x용 패치를 별도 배포하지 않을 수도 있다는 얘기입니다. 구 버전 지원 종료 선언일 뿐, 라이믹스 2.x의 업데이트 일정과는 무관합니다.

  • profile
    감사합니다 :)
  • profile
    2.0.20 새로 만들어 주셨네요. 감사합니다. 적용해봤는데 잘 되네요~~~~~ 👍