SUPEE-6285 패치, 무엇이 변경 되었습니까?


26

좋아, 누군가는 이것을 요구해야한다 : 오늘, 2015 년 7 월 7 일 Magento <1.9.2를위한 새로운 보안 패치가 발표되었다.

당신의 상점을 최대한 빨리 업데이트하십시오!

그러나 무엇이 바뀌 었습니까? 해당 보안 문제에 대한 알려진 공격이 있습니까? 일어날 수있는 최악의 상황은 무엇입니까?

그리고 깨질 수있는 것이 있습니까? 다운로더 디렉토리가없는 경우 패치를 적용 할 수없는 SUPEE-5994와 마찬가지로 ...


4
많이. 패치 파일만으로는 1,100 개가 넘으며 약 350 개가 추가되고 100 개가 제거됩니다. 패키지 / 테마에서 템플릿을 재정의 한 경우 ~ 8 개의 프런트 엔드 템플릿에서 수동 템플릿 편집을 수행해야합니다.
Ben Lessani-Sonassi

5
다음은 좋은 기사입니다. blog.philwinkle.com/supee-6285-broken-down
Steve Robbins

답변:


36

이미 언급했듯이 패치 된 취약점은이 공식 페이지 (새로운 판매자 문서)에 자세히 설명되어 있습니다. http://merch.docs.magento.com/ce/user_guide/Magento_Community_Edition_User_Guide.html#magento/patch-releases-2015.html

개요

이 번들에는 다음 보안 관련 문제에 대한 보호 기능이 포함되어 있습니다.

  • RSS 및 권한 에스컬레이션을 통한 고객 정보 유출
  • Magento Connect의 위조 요청으로 코드가 실행 됨
  • 위시리스트의 크로스 사이트 스크립팅
  • 장바구니의 사이트 간 스크립팅
  • 매장 경로 공개
  • 로그 파일에 대한 권한이 너무 광범위
  • 관리자의 사이트 간 스크립팅
  • 주문 RSS의 사이트 간 스크립팅

몇 개의 상점을 패치 한 후 이것이 수집 한 것입니다.

테마 패치

가능한 일부 XSS 공격을 방지하기 위해 일부 테마 파일에 이스케이프가 추가되었습니다.

  • checkout/cart.phtml
  • checkout/cart/noItems.phtml
  • checkout/onepage/failure.phtml
  • rss/order/details.phtml
  • wishlist/email/rss.phtml

테마에 이러한 템플릿이 포함되어 있거나 직접 수정 한 경우 base/default(행운을 망친 경우) 수동으로 패치해야합니다.

  1. 결제 템플릿에서

    $this->getContinueShoppingUrl()

    Mage::helper('core')->quoteEscape($this->getContinueShoppingUrl())
  2. 에서 wishlist/email/rss.phtml교체

    $this->helper('wishlist')->getCustomerName()

    Mage::helper('core')->escapeHtml($this->helper('wishlist')->getCustomerName())
  3. 에서 rss/order/details.phtml대체

    <?php echo $this->__('Customer Name: %s', $_order->getCustomerFirstname()?$_order->getCustomerName():$_order->getBillingAddress()->getName()) ?><br />
    <?php echo $this->__('Purchased From: %s', $_order->getStore()->getGroup()->getName()) ?><br />

    <?php $customerName = $_order->getCustomerFirstname() ? $_order->getCustomerName() : $_order->getBillingAddress()->getName(); ?>
    <?php echo $this->__('Customer Name: %s', Mage::helper('core')->escapeHtml($customerName)) ?><br />
    <?php echo $this->__('Purchased From: %s', Mage::helper('core')->escapeHtml($_order->getStore()->getGroup()->getName())) ?><br />

권한

.htaccess파일이 추가되었습니다 downloader/Mageddownloader/lib소스 파일을 해제하면 직접 액세스 할 수 있습니다. nginx를 사용하는 경우 동일한 규칙을 달성하려면 다음 규칙을 추가해야합니다 ( Ben Lessani 에게는 다음 과 같은 규칙 ).

location /downloader/Maged/ { deny all; }
location /downloader/lib/   { deny all; }

그러나 downloader어쨌든 라이브 시스템 시스템으로의 배포 에서 제외 하는 것이 좋습니다 .이 경우 조치를 취할 필요가 없습니다.

관리자 권한 (ACL)

제한된 관리자 계정을 사용하는 경우 타사 확장 프로그램의 일부 메뉴가 더 이상 작동하지 않을 수 있습니다. 기본 반환 값 Mage_Adminhtml_Controller_Action::_isAllowed()이에서 (으)로 변경 되었기 true때문 Mage::getSingleton('admin/session')->isAllowed('admin')입니다. ACL을 사용하지 않기 때문에 관리 컨트롤러에서이 방법을 무시하지 않는 확장은 이제 "ALL" 권한이 필요합니다 .

유일한 해결책은 확장을 패치하고이 방법을 모든 관리 컨트롤러에 추가하는 것입니다.

protected function _isAllowed()
{
    return true;
}

또는 실제로 ACL 자원이 다음에 정의 된 경우 etc/adminhtml.xml:

protected function _isAllowed()
{
    return Mage::getSingleton('admin/session')->isAllowed('ENTER RESOURCE IDENTIFIER HERE');
}

( Phoenix_Moneybookers이 확장이 포함 된 1.7과 같은 이전 Magento 버전 에서는 패치가 동일하게 작동 함을 알 수 있습니다)

이 문제에 대한 자세한 내용과 누락 된 ACL 리소스를 정의하는 방법에 대한 자세한 내용은 SUPEE-6285 설치 후 액세스 거부 오류를 참조하십시오.

패치를 적용하는 동안 가능한 오류

  1. 메시지:

    can't find file to patch at input line 899
    Perhaps you used the wrong -p or --strip option?
    The text leading up to this was:
    --------------------------
    |diff --git app/design/frontend/default/modern/template/checkout/cart.phtml app/design/frontend/default/modern/template/checkout/cart.phtml
    |index 982ad5a..2bf6b37 100644
    |--- app/design/frontend/default/modern/template/checkout/cart.phtml
    |+++ app/design/frontend/default/modern/template/checkout/cart.phtml
    --------------------------
    File to patch:
    Skip this patch? [y]
    Skipping patch.
    1 out of 1 hunk ignored

    이유 :default/modern 테마 설치에서 제거

    솔루션 :app/design/frontend/default/modern 새로운 Magento 다운로드에서 추가 하십시오 (상점과 동일한 버전이어야 함). https://github.com/firegento/magento 이 미러를 사용할 수도 있습니다 . 그런 다음 패치를 성공적으로 적용한 후 테마를 다시 제거 할 수 있습니다.

  2. 메시지

    patching file downloader/Maged/.htaccess
    can't find file to patch at input line 915
    Perhaps you used the wrong -p or --strip option?
    The text leading up to this was:
    --------------------------
    |diff --git downloader/Maged/Controller.php downloader/Maged/Controller.php
    |index aa9d705..32755d7 100644
    |--- downloader/Maged/Controller.php
    |+++ downloader/Maged/Controller.php
    --------------------------
    File to patch:
    Skip this patch? [y]
    Skipping patch.
    5 out of 5 hunks ignored
    can't find file to patch at input line 976
    Perhaps you used the wrong -p or --strip option?
    The text leading up to this was:
    --------------------------
    |diff --git downloader/Maged/Model/Session.php downloader/Maged/Model/Session.php
    |index 18020eb..7013c94 100644
    |--- downloader/Maged/Model/Session.php
    |+++ downloader/Maged/Model/Session.php
    --------------------------
    File to patch:
    Skip this patch? [y]
    Skipping patch.
    2 out of 2 hunks ignored
    patching file downloader/lib/.htaccess
    can't find file to patch at input line 1020
    Perhaps you used the wrong -p or --strip option?
    The text leading up to this was:
    --------------------------
    |diff --git downloader/template/connect/packages.phtml downloader/template/connect/packages.phtml
    |index 9cca5a6..f42e74e 100644
    |--- downloader/template/connect/packages.phtml
    |+++ downloader/template/connect/packages.phtml
    --------------------------
    File to patch:
    Skip this patch? [y]
    Skipping patch.
    3 out of 3 hunks ignored
    can't find file to patch at input line 1049
    Perhaps you used the wrong -p or --strip option?
    The text leading up to this was:
    --------------------------
    |diff --git downloader/template/connect/packages_prepare.phtml downloader/template/connect/packages_prepare.phtml
    |index f74c3df..86aa51b 100644
    |--- downloader/template/connect/packages_prepare.phtml
    |+++ downloader/template/connect/packages_prepare.phtml
    --------------------------
    File to patch:
    Skip this patch? [y]
    Skipping patch.
    1 out of 1 hunk ignored
    can't find file to patch at input line 1061
    Perhaps you used the wrong -p or --strip option?
    The text leading up to this was:
    --------------------------
    |diff --git downloader/template/login.phtml downloader/template/login.phtml
    |index 6e4cd2c..dbbeda8 100644
    |--- downloader/template/login.phtml
    |+++ downloader/template/login.phtml
    --------------------------
    File to patch:
    Skip this patch? [y]
    Skipping patch.
    1 out of 1 hunk ignored
    can't find file to patch at input line 1073
    Perhaps you used the wrong -p or --strip option?
    The text leading up to this was:
    --------------------------
    |diff --git downloader/template/settings.phtml downloader/template/settings.phtml
    |index 13551ac..47ab411 100644
    |--- downloader/template/settings.phtml
    |+++ downloader/template/settings.phtml
    --------------------------
    File to patch:
    Skip this patch? [y]
    Skipping patch.
    1 out of 1 hunk ignored

    이유 :downloader 디렉토리가 설치에서 제거

    솔루션 :downloader 새로운 Magento 다운로드에서 추가 하십시오 (상점과 동일한 버전이어야 함). https://github.com/firegento/magento 이 미러를 사용할 수도 있습니다 . 그런 다음 패치를 성공적으로 적용한 후 디렉토리를 다시 제거 할 수 있습니다.

  3. 메시지 : 비슷한

    checking file app/design/frontend/base/default/template/checkout/cart.phtml
    Hunk #1 FAILED at 97 (different line endings).
    1 out of 1 hunk FAILED
    checking file app/design/frontend/base/default/template/checkout/cart/noItems.phtml
    Hunk #1 FAILED at 31 (different line endings).
    1 out of 1 hunk FAILED
    checking file app/design/frontend/base/default/template/checkout/onepage/failure.phtml
    Hunk #1 FAILED at 29 (different line endings).
    1 out of 1 hunk FAILED
    checking file app/design/frontend/base/default/template/rss/order/details.phtml
    Hunk #1 FAILED at 31 (different line endings).
    1 out of 1 hunk FAILED
    checking file app/design/frontend/base/default/template/wishlist/email/rss.phtml
    Hunk #1 FAILED at 25 (different line endings).
    1 out of 1 hunk FAILED

    이유 : 파일이 (LF, Unix 줄 바꿈) 대신 \r\n(CRLF, Windows 줄 바꿈) 또는 \r(CR, Mac 줄 바꿈)으로 저장됩니다 \n.

    솔루션 : 간단히 줄 바꿈을 변환하면 텍스트 편집기 나 IDE에서이 기능을 사용할 수 있어야합니다.


이것이 주요 패치 인 것처럼 보이므로 1.9.x를 운영하는 상점에서이 패치가 포함 된 1.9.2.0으로 업그레이드하는 것이 더 나을 것이라는 데 동의하십니까?
paj

1
상점을 1.9.2.0으로 업데이트하지 않았지만 몇 가지 추가 함정이있는 것으로 보이며 업데이트는 더 신중하게 테스트해야합니다. 여전히 패치를 먼저 설치하는 것이 좋습니다.
Fabian Schmengler

우리 팀에서 우리는 단지 사용하기 위해 확장을 개발 했으며이 패치 후에 일부 관리자 컨트롤러가 _isAllowed메소드를 구현하지 않았다는 것을 깨달았습니다 . 운 좋게도 우리는 모듈에 ACL을 가지고 있었고 메소드를 추가하는 것 외에 추가 조치가 필요하지 않았습니다. 또한, default/modern주제가 이동 된 첫 번째 오류 메시지가 발생했습니다 (Git 덕분에 범인을 찾았습니다). +1
Vic

여기에 훌륭한 것들이 있습니다. cart.phtml을 업데이트 할 때 기본 버전과 버전을 비교 한 결과 편집 내용이 약간 잘못되었다는 것을 알았습니다. 패치 파일의 새로운 줄은 다음과 같습니다 : <button type = "button"title = "<? php echo Mage :: helper ( 'core')-> quoteEscape ($ this-> __ ( 'Continue Shopping'))?> "class ="button btn-continue "onclick ="setLocation ( '<? php echo Mage :: helper ('core ')-> quoteEscape ($ this-> getContinueShoppingUrl ())?>') "> <span> < span> <? php echo $ this-> __ ( 'Continue Shopping')?> </ span> </ span> </ button>. 당신은 명확히 할 수 있습니까?
PedroKTFC

7

@ http://blog.philwinkle.com/supee-6285-broken-down/을 통해

일반적으로 여기에는 부울을 반환하는 _isAllowed protected 메서드를 추가하는 것이 포함됩니다. 때때로이 부울은 Adminhtml / controllers / Catalog / Category / WidgetController에 대한 업데이트와 마찬가지로 ACL 검사의 결과입니다. 때때로 이것은 Adminhtml / controllers / AjaxController.php와 같이 true로 하드 코딩됩니다.

내가 추가 한 후 :

protected function _isAllowed()
{
    return Mage::getSingleton('admin/session')->isAllowed('system/config');
}

관리자 섹션의 타사 컨트롤러 중 하나에게 다시 "작업"을 시작했습니다 ...

그럼 또 다른 마 젠토 패치를받을 수 있을까요? 이것은 더 큰 문제인 것 같습니다 ...


내 대답을 참조하십시오. 제한된 역할에 "대시 보드"권한을 부여하면 고유 한 ACL 리소스없이 타사 섹션에 다시 액세스 할 수 있습니다.
Fabian Schmengler

Magento 1.8 : 확인 (권한이 "ON" 이었음 )과 동일한 스토리 : 액세스가 거부되었습니다 . 네, 먼저 로그 아웃하고 다음에 로그인합니다 :)
Piotr Siejczuk

죄송합니다. "admin"의 구성을 잘못 해석했으며 실제로 모든 권한이있는 사용자에 대해서만 true를 반환합니다. 많은 확장을 패치해야한다는 것은 사실입니다. 이에 따라 내 답변을 업데이트했습니다.
Fabian Schmengler

이 또는 내가 magento.stackexchange.com/questions/73646/을 썼을 때 우리는 Mage_Adminhtml_Controller_Action :: _ isAllowed () <pre> protected function _isAllowed () {return Mage :: getSingleton ( 'admin / session')-> isAllowed ( 'system / config'); } </ pre>
Piotr Siejczuk

1
기본 권한으로 "system / config"가 작동한다면 판매자에 따라 다릅니다.
Fabian Schmengler

3

커뮤니티 / 로컬 확장이 많은 경우 SUPEE-6285의이 변경 사항에 특히주의를 기울이려고 app/code/core/Mage/Adminhtml/Controller/Action.php합니다. 패치 버전에 따라 666 행에 영향을 미치며 SUPEE-6285에서 변경됩니다 (EE 1.14.0.1 패치 파일).

protected function _isAllowed()
    {
-        return true;
+        return Mage::getSingleton('admin/session')->isAllowed('admin');
    }

자체 관리 리소스를 구현하지 않는 모든 사용자 지정 모듈은 위의 변경에 영향을받으며 해당 관리자에게 전체 관리자 권한이 없으면 액세스가 거부됩니다.

패치의 다른 부분을 보면 포함 된 핵심 모듈이 많이 업데이트되었지만 많은 타사 모듈에 영향을 줄 수 있으므로 패치 후 사이트에서 타사 확장을 테스트하기 위해 특히주의를 기울여야합니다. 여전히 액세스 할 수 있습니다!


1

패치 릴리스 페이지 가 그 영향을받는 정보로 업데이트 된 것 같습니다 .

아직 프로덕션 사이트에 설치하고 테스트하지 않았습니다.


3
Dev 서버에 설치했으며 정상적으로 작동하므로 프로덕션으로 푸시했습니다. 일부 제품 및 영업 관리자가 Magento 관리자를 사용하려고 시도 할 때까지 모든 것이 제대로 작동하는 것 같습니다.이 사용자는 Magento의 '사용자 역할 편집기'를 통해 역할 권한이 제한되어 있으며 관리 영역 웹 사이트의 일부 영역에서 액세스 거부 오류가 자주 발생했습니다. 타사 플러그인을 사용합니다. 내 주 관리자 계정은 여전히이 모든 것들에 대해 잘 작동합니다. 나는 아직도 그것을 찾고 있습니다
Ricky Odin Matthews

0

패치를 적용한 후 수정 된 파일의 전체 목록은 app/etc/applied.patches.list


0

필자의 경우 타사 모듈의 경우 adminhtml 컨트롤러에 아래 코드를 추가하면 효과가 있습니다.

protected function _isAllowed()

{
     return true;
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.