13버전 이후의 오랜만의 보안패치인데
현재 코어에서 문제를 일으키는 부분은 없는 것으로 파악되지만, 상당수의 서드파티 자료가 사용자 입력값을 제대로 검증하지 않고 있는 것으로 보이기 때문에 선제적으로 대응합니다. 기존의 느슨한 동작에 의존하던 서드파티 자료는 이번 패치 후 오작동할 수도 있습니다.
우선은 무서워서 실서버에는 반영 못하겠어요 그래도 인젝션 취약점이면 무시못하는 취약점인데 큰일이네요
13버전 이후의 오랜만의 보안패치인데
현재 코어에서 문제를 일으키는 부분은 없는 것으로 파악되지만, 상당수의 서드파티 자료가 사용자 입력값을 제대로 검증하지 않고 있는 것으로 보이기 때문에 선제적으로 대응합니다. 기존의 느슨한 동작에 의존하던 서드파티 자료는 이번 패치 후 오작동할 수도 있습니다.
우선은 무서워서 실서버에는 반영 못하겠어요 그래도 인젝션 취약점이면 무시못하는 취약점인데 큰일이네요
executeQuery 함수를 쓰는데도 문제가 있는거군요 ?
XML에
<index var="list_order" default="comments_list.head" order="asc" />
<index var="list_order" default="comments_list.arrange" order="asc" />
이런식으로 2개씩 들어가는 자료들이 영향 받는걸까요 ?
네, <column name="a+b" alias="c" /> 이렇게 별칭으로 처리하거나 <index default="rand()" /> 이렇게 기본값으로 선언하면 문제 없습니다. 이런 문법은 개발자가 하드코딩하는 것이므로, 사용자 입력값에 따라 달라질 수 있는 var="sort_index" 속성과 달리 보안상 위협으로 보지 않습니다.
가변적으로 사용할 경우 XML 파일을 각각 따로 만들거나, <index default="rand()" if="is_random" /> 이런 조건을 추가해서 $args->is_random 변수가 없을 때는 해당 태그 전체가 무효화되도록 하면 됩니다. (템플릿의 cond와 유사한 기능입니다. table, column, condition도 마찬가지로 if를 사용하여 무효화할 수 있습니다.)
@기진곰
이렇게 한다면 쿼리 2개 만들지 않고도 XE와 Rhymix 둘 다 지원할 수 있지 않을까요?
xml
<query id="sortIndexTest" action="select"> <tables> <table name="documents" /> </tables> <columns> <column name="*" /> <column name="RAND()" alias="sort_random" /> <column name="(voted_count + blamed_count)" alias="sort_reputation" /> </columns> <conditions> <condition operation="equal" column="status" default="PUBLIC" /> </conditions> <navigation> <index var="sort_index" default="list_order" order="order_type" order-default="DESC" /> </navigation> </query>
php
<?php $args = new stdClass(); // 랜덤으로 정렬하기 $args->sort_index = 'sort_random'; // 추천과 비추천 합산하여 정렬하기 $args->sort_index = 'sort_reputation'; executeQueryArray('test.sortIndexTest', $args);
가능하긴 하겠지만, 꼭 필요하지 않을 때도 sort_random과 sort_reputation 컬럼이 항상 따라붙고, row마다 랜덤 값을 하나씩 붙여 줘야 하니 불필요한 연산이 발생하겠지요.
라이믹스에 새 기능을 추가하거나 보안취약점을 패치할 때 어느 정도 하위호환성을 고려하지만, 어디까지나 기존 자료를 라이믹스 최신 버전에서 사용하는 상황을 고려하는 것입니다. 현 시점에서 굳이 XE와 호환되는 자료를 만든다면 작동이 안 되거나 비효율적인 부분이 생길 수밖에 없겠지요.
무언가의 정렬 순서를 바꿔서 볼 수 있는 서드파티 자료를 쓰고 계신다면 조심하셔야 합니다. 대표적으로 상품 정렬 순서를 바꿔서 볼 수 있는 누리고 쇼핑몰이 이번 보안패치의 원인이었고, 그 밖에도 주소에 sort_어쩌고, order_저쩌고 하는 변수를 넣을 수 있는 자료라면 한 번쯤 의심해 보세요.
게시판 스킨에서 정렬 순서를 바꾸는 기능은 코어에서 관리하는 부분이므로 안전합니다.
서드파티 자료에서 정렬 순서를 바꿀 수 있도록 지원하더라도, 내부적으로 DocumentModel::getDocumentList() 등 코어에서 제공하는 메소드를 사용한다면 안전합니다.