좋아, 누군가는 이것을 요구해야한다 : 오늘, 2015 년 7 월 7 일 Magento <1.9.2를위한 새로운 보안 패치가 발표되었다.
당신의 상점을 최대한 빨리 업데이트하십시오!
그러나 무엇이 바뀌 었습니까? 해당 보안 문제에 대한 알려진 공격이 있습니까? 일어날 수있는 최악의 상황은 무엇입니까?
그리고 깨질 수있는 것이 있습니까? 다운로더 디렉토리가없는 경우 패치를 적용 할 수없는 SUPEE-5994와 마찬가지로 ...
좋아, 누군가는 이것을 요구해야한다 : 오늘, 2015 년 7 월 7 일 Magento <1.9.2를위한 새로운 보안 패치가 발표되었다.
당신의 상점을 최대한 빨리 업데이트하십시오!
그러나 무엇이 바뀌 었습니까? 해당 보안 문제에 대한 알려진 공격이 있습니까? 일어날 수있는 최악의 상황은 무엇입니까?
그리고 깨질 수있는 것이 있습니까? 다운로더 디렉토리가없는 경우 패치를 적용 할 수없는 SUPEE-5994와 마찬가지로 ...
답변:
이미 언급했듯이 패치 된 취약점은이 공식 페이지 (새로운 판매자 문서)에 자세히 설명되어 있습니다. 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
(행운을 망친 경우) 수동으로 패치해야합니다.
결제 템플릿에서
$this->getContinueShoppingUrl()
와
Mage::helper('core')->quoteEscape($this->getContinueShoppingUrl())
에서 wishlist/email/rss.phtml
교체
$this->helper('wishlist')->getCustomerName()
와
Mage::helper('core')->escapeHtml($this->helper('wishlist')->getCustomerName())
에서 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/Maged
및 downloader/lib
소스 파일을 해제하면 직접 액세스 할 수 있습니다. nginx를 사용하는 경우 동일한 규칙을 달성하려면 다음 규칙을 추가해야합니다 ( Ben Lessani 에게는 다음 과 같은 규칙 ).
location /downloader/Maged/ { deny all; }
location /downloader/lib/ { deny all; }
그러나 downloader
어쨌든 라이브 시스템 시스템으로의 배포 에서 제외 하는 것이 좋습니다 .이 경우 조치를 취할 필요가 없습니다.
제한된 관리자 계정을 사용하는 경우 타사 확장 프로그램의 일부 메뉴가 더 이상 작동하지 않을 수 있습니다. 기본 반환 값 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 설치 후 액세스 거부 오류를 참조하십시오.
메시지:
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 이 미러를 사용할 수도 있습니다 . 그런 다음 패치를 성공적으로 적용한 후 테마를 다시 제거 할 수 있습니다.
메시지
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 이 미러를 사용할 수도 있습니다 . 그런 다음 패치를 성공적으로 적용한 후 디렉토리를 다시 제거 할 수 있습니다.
메시지 : 비슷한
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에서이 기능을 사용할 수 있어야합니다.
_isAllowed
메소드를 구현하지 않았다는 것을 깨달았습니다 . 운 좋게도 우리는 모듈에 ACL을 가지고 있었고 메소드를 추가하는 것 외에 추가 조치가 필요하지 않았습니다. 또한, default/modern
주제가 이동 된 첫 번째 오류 메시지가 발생했습니다 (Git 덕분에 범인을 찾았습니다). +1
@ 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');
}
관리자 섹션의 타사 컨트롤러 중 하나에게 다시 "작업"을 시작했습니다 ...
그럼 또 다른 마 젠토 패치를받을 수 있을까요? 이것은 더 큰 문제인 것 같습니다 ...
커뮤니티 / 로컬 확장이 많은 경우 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');
}
자체 관리 리소스를 구현하지 않는 모든 사용자 지정 모듈은 위의 변경에 영향을받으며 해당 관리자에게 전체 관리자 권한이 없으면 액세스가 거부됩니다.
패치의 다른 부분을 보면 포함 된 핵심 모듈이 많이 업데이트되었지만 많은 타사 모듈에 영향을 줄 수 있으므로 패치 후 사이트에서 타사 확장을 테스트하기 위해 특히주의를 기울여야합니다. 여전히 액세스 할 수 있습니다!
패치 릴리스 페이지 가 그 영향을받는 정보로 업데이트 된 것 같습니다 .
아직 프로덕션 사이트에 설치하고 테스트하지 않았습니다.