13 개의 APPSEC 문제를 해결하는 새로운 보안 패치가 Magento 1 용으로 제공됩니다
https://magento.com/security/patches/supee-10266
이 패치를 적용 할 때주의해야 할 일반적인 문제는 무엇입니까?
SUPEE-10266, Magento Commerce 1.14.3.6 및 오픈 소스 1.9.3.6에는 CSRF (Cross-Site Request Forgery), 무단 데이터 유출 및 인증 된 Admin 사용자 원격 코드 실행 취약점을 해결하는 데 도움이되는 여러 가지 보안 강화 기능이 포함되어 있습니다. 이 릴리스에는 1 단계 체크 아웃을 사용한 이미지 다시로드 및 결제 관련 문제에 대한 수정 사항도 포함되어 있습니다.
답변
중요한 정보 중 일부는 여기에서 공유합니다. 대부분의 파일은 Magento 백엔드에서 가져옵니다. 파일은 다음과 같습니다.
app/code/core/Mage/Admin/Model/Session.php
app/code/core/Mage/Adminhtml/Block/Notification/Grid/Renderer/Notice.php
app/code/core/Mage/Adminhtml/Block/Widget/Form/Container.php
app/code/core/Mage/Adminhtml/Controller/Action.php
app/code/core/Mage/Adminhtml/Model/LayoutUpdate/Validator.php
app/code/core/Mage/Adminhtml/controllers/CustomerController.php
app/code/core/Mage/Adminhtml/controllers/Newsletter/TemplateController.php
app/code/core/Mage/Checkout/controllers/CartController.php
app/code/core/Mage/Core/Model/Email/Template/Abstract.php
app/code/core/Mage/Core/Model/File/Validator/Image.php
app/code/core/Mage/Core/Model/Session/Abstract/Varien.php
app/code/core/Mage/Core/etc/config.xml
app/code/core/Mage/Rss/Helper/Data.php
app/code/core/Mage/Sales/Model/Resource/Order/Item/Collection.php
app/code/core/Zend/Serializer/Adapter/PhpCode.php
app/design/adminhtml/default/default/template/backup/dialogs.phtml
app/design/adminhtml/default/default/template/catalog/product/edit/options/type/file.phtml
app/design/adminhtml/default/default/template/customer/tab/view.phtml
app/design/adminhtml/default/default/template/login.phtml
app/design/adminhtml/default/default/template/notification/toolbar.phtml
app/design/adminhtml/default/default/template/oauth/authorize/form/login.phtml
app/design/adminhtml/default/default/template/resetforgottenpassword.phtml
app/design/adminhtml/default/default/template/sales/order/view/history.phtml
app/design/adminhtml/default/default/template/sales/order/view/info.phtml
app/design/install/default/default/template/install/create_admin.phtml
app/locale/en_US/Mage_Adminhtml.csv
downloader/template/login.phtml
중요한 것은이 세 파일을 확인해야합니다.
app/code/core/Mage/Checkout/controllers/CartController.php
app/code/core/Mage/Sales/Model/Resource/Order/Item/Collection.php
app/code/core/Mage/Core/Model/File/Validator/Image.php
app / code / core / Mage / Checkout / controllers / CartController.php 추가 조건 확인 고객 ID :
diff --git app/code/core/Mage/Checkout/controllers/CartController.php app/code/core/Mage/Checkout/controllers/CartController.php
index 7c9f28f..bee6034 100644
--- app/code/core/Mage/Checkout/controllers/CartController.php
+++ app/code/core/Mage/Checkout/controllers/CartController.php
@@ -284,14 +284,16 @@ class Mage_Checkout_CartController extends Mage_Core_Controller_Front_Action
public function addgroupAction()
{
$orderItemIds = $this->getRequest()->getParam('order_items', array());
+ $customerId = $this->_getCustomerSession()->getCustomerId();
- if (!is_array($orderItemIds) || !$this->_validateFormKey()) {
+ if (!is_array($orderItemIds) || !$this->_validateFormKey() || !$customerId) {
$this->_goBack();
return;
}
$itemsCollection = Mage::getModel('sales/order_item')
->getCollection()
+ ->addFilterByCustomerId($customerId)
->addIdFilter($orderItemIds)
->load();
/* @var $itemsCollection Mage_Sales_Model_Mysql4_Order_Item_Collection */
@@ -709,4 +711,14 @@ class Mage_Checkout_CartController extends Mage_Core_Controller_Front_Action
$this->getResponse()->setHeader('Content-type', 'application/json');
$this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
}
+
+ /**
+ * Get customer session model
+ *
+ * @return Mage_Customer_Model_Session
+ */
+ protected function _getCustomerSession()
+ {
+ return Mage::getSingleton('customer/session');
+ }
}
app / code / core / Mage / Sales / Model / Resource / Order / Item / Collection.php 컬렉션 에 addFilterByCustomerId 추가 메소드가 추가되었습니다 .
diff --git app/code/core/Mage/Sales/Model/Resource/Order/Item/Collection.php app/code/core/Mage/Sales/Model/Resource/Order/Item/Collection.php
index ee83ad48..c02afdf 100644
--- app/code/core/Mage/Sales/Model/Resource/Order/Item/Collection.php
+++ app/code/core/Mage/Sales/Model/Resource/Order/Item/Collection.php
@@ -152,4 +152,20 @@ class Mage_Sales_Model_Resource_Order_Item_Collection extends Mage_Sales_Model_R
$this->getSelect()->where($resultCondition);
return $this;
}
+
+ /**
+ * Filter by customerId
+ *
+ * @param int|array $customerId
+ * @return Mage_Sales_Model_Resource_Order_Item_Collection
+ */
+ public function addFilterByCustomerId($customerId)
+ {
+ $this->getSelect()->joinInner(
+ array('order' => $this->getTable('sales/order')),
+ 'main_table.order_id = order.entity_id', array())
+ ->where('order.customer_id IN(?)', $customerId);
+
+ return $this;
+ }
}
app / code / core / Mage / Core / Model / File / Validator / Image.php
‘general / reprocess_images / active’가 false이면 이미지 재 처리를 건너 뜁니다. 참고 : 이미지 재 처리를 끄면 이미지 업로드 프로세스로 인해 보안 위험이 발생할 수 있습니다.
diff --git app/code/core/Mage/Core/Model/File/Validator/Image.php app/code/core/Mage/Core/Model/File/Validator/Image.php
index 9d57202..6a939c3 100644
--- app/code/core/Mage/Core/Model/File/Validator/Image.php
+++ app/code/core/Mage/Core/Model/File/Validator/Image.php
@@ -91,6 +91,13 @@ class Mage_Core_Model_File_Validator_Image
list($imageWidth, $imageHeight, $fileType) = getimagesize($filePath);
if ($fileType) {
if ($this->isImageType($fileType)) {
+ /**
+ * if 'general/reprocess_images/active' false then skip image reprocessing.
+ * NOTE: If you turn off images reprocessing, then your upload images process may cause security risks.
+ */
+ if (!Mage::getStoreConfigFlag('general/reprocess_images/active')) {
+ return null;
+ }
//replace tmp image with re-sampled copy to exclude images with malicious data
$image = imagecreatefromstring(file_get_contents($filePath));
if ($image !== false) {
도움이 되길 바랍니다. 나는 생각한다
답변
EE 1.14.2.4
패치 726 번째 줄의 오타 : autocomplete="new-pawwsord"
( app/design/adminhtml/default/default/template/backup/dialogs.phtml
)
패치에 2 개의 프론트 엔드 파일이 누락 된 것 같습니다
패치 :
app\design\adminhtml\default\default\template\oauth\authorize\form\login-simple.phtml
패치되지 않음 :
app\design\frontend\base\default\template\oauth\authorize\form\login-simple.phtml
app\design\frontend\rwd\default\template\oauth\authorize\form\login-simple.phtml
또한 로컬 재정의를 확인하는 것을 잊지 마십시오 …의 로컬 코드 풀 재정의를 수동으로 패치해야했습니다. app\design\adminhtml\default\default\template\sales\order\view\info.phtml
한 페이지 체크 아웃 문제에
대해서는 quasiobject 의 답변을 참조하십시오 . Magento의 응답을 기다리는 엔터프라이즈 지원 티켓이 생성되었습니다. 업데이트 된 패치를 기다리지 않으려면 app\design\frontend\enterprise\default\template\giftcardaccount\onepage\payment\scripts.phtml
다음과 같이 form_key 요소를 포함하도록 “else” 구문 을 수정하십시오 .
if (($('p_method_' + methodName) && $('p_method_' + methodName).checked) || elements[i].name == 'form_key') { ...
CE 1.9.2.4
패치 694 번째 줄의 오타 : autocomplete="new-pawwsord"
( app/design/adminhtml/default/default/template/backup/dialogs.phtml
)
TrueOrderEdit 확장 패치 할 필요가 … 변화 echo $_groupName
에 echo $this->escapeHtml($_groupName)
다음 파일을 :
app\design\adminhtml\default\default\template\orderedit\sales\order\view\edit.phtml
app\design\adminhtml\default\default\template\orderedit\sales\order\view\history.phtml
app\design\adminhtml\default\default\template\orderedit\sales\order\view\info.phtml
마지막으로이 핵심 템플릿 파일도 동일한 $ _groupName 업데이트로 패치해야합니다.
app\design\adminhtml\default\default\template\sales\order\view\edit.phtml
모든 1.X 버전
코드베이스에서 /downloader
폴더 (또는 /downloader/template
)를 삭제 한 경우 .sh 패치 파일을 수동으로 편집하고 마지막 섹션을 제거해야합니다.diff --git downloader/template/login.phtml downloader/template/login.phtml
잘못된 비밀 키 오류 와 관련하여 내 대답을 참조하십시오 : Magento 1.9 Invalid Secret Key. 페이지를 새로 고침하십시오
답변
우리 MageHost.pro는 젠토 1.9.1.1 패치 파일을 패치에 문제가 발견PATCH_SUPEE-10266_CE_1.9.1.1_v1-2017-09-15-04-59-56.sh
오류:
checking file app/code/core/Mage/Core/Model/File/Validator/Image.php
Hunk #1 FAILED at 90.
1 out of 1 hunk FAILED
454-472 줄을 454-471로 바꾸어 고쳤습니다. PATCH_SUPEE-10266_CE_1.9.1.0_v1-2017-09-13-06-34-33.sh
이전 코드, 454-472 행 :
diff --git app/code/core/Mage/Core/Model/File/Validator/Image.php app/code/core/Mage/Core/Model/File/Validator/Image.php
index 7f7b9d0..8a28da2 100644
--- app/code/core/Mage/Core/Model/File/Validator/Image.php
+++ app/code/core/Mage/Core/Model/File/Validator/Image.php
@@ -90,7 +90,13 @@ class Mage_Core_Model_File_Validator_Image
$fileInfo = getimagesize($filePath);
if (is_array($fileInfo) and isset($fileInfo[2])) {
if ($this->isImageType($fileInfo[2])) {
- return null;
+ /**
+ * if 'general/reprocess_images/active' false then skip image reprocessing.
+ * NOTE: If you turn off images reprocessing, then your upload images process may cause security risks.
+ */
+ if (!Mage::getStoreConfigFlag('general/reprocess_images/active')) {
+ return null;
+ }
}
}
throw Mage::exception('Mage_Core', Mage::helper('core')->__('Invalid MIME type.'));
새 코드, 454-471 행 :
diff --git app/code/core/Mage/Core/Model/File/Validator/Image.php app/code/core/Mage/Core/Model/File/Validator/Image.php
index 8618bca..d3aba19 100644
--- app/code/core/Mage/Core/Model/File/Validator/Image.php
+++ app/code/core/Mage/Core/Model/File/Validator/Image.php
@@ -90,6 +90,13 @@ class Mage_Core_Model_File_Validator_Image
list($imageWidth, $imageHeight, $fileType) = getimagesize($filePath);
if ($fileType) {
if ($this->isImageType($fileType)) {
+ /**
+ * if 'general/reprocess_images/active' false then skip image reprocessing.
+ * NOTE: If you turn off images reprocessing, then your upload images process may cause security risks.
+ */
+ if (!Mage::getStoreConfigFlag('general/reprocess_images/active')) {
+ return null;
+ }
//replace tmp image with re-sampled copy to exclude images with malicious data
$image = imagecreatefromstring(file_get_contents($filePath));
if ($image !== false) {
답변
이 패치에는 하나의 양식 키만 추가 된 것으로 보입니다.
diff --git app/code/core/Mage/Adminhtml/Block/Widget/Form/Container.php app/code/core/Mage/Adminhtml/Block/Widget/Form/Container.php
index 8756f3f..1c5cf37 100644
--- app/code/core/Mage/Adminhtml/Block/Widget/Form/Container.php
+++ app/code/core/Mage/Adminhtml/Block/Widget/Form/Container.php
@@ -96,7 +96,10 @@ class Mage_Adminhtml_Block_Widget_Form_Container extends Mage_Adminhtml_Block_Wi
public function getDeleteUrl()
{
- return $this->getUrl('*/*/delete', array($this->_objectId => $this->getRequest()->getParam($this->_objectId)));
+ return $this->getUrl('*/*/delete', array(
+ $this->_objectId => $this->getRequest()->getParam($this->_objectId),
+ Mage_Core_Model_Url::FORM_KEY => $this->getFormKey()
+ ));
}
따라서 관리자 패널에서 위젯을 삭제하기 어려운 경우 블록에서 삭제 URL이 생성되고이 블록을 대체하지 않는지 확인하십시오.
답변
EE 1.11+에서 체크 아웃 할 수 없음
에서 app/design/frontend/enterprise/default/template/giftcardaccount/onepage/payment/scripts.phtml
양식 키 유효성 검사 코드가 제거 된 그리고 여기에 전체 체크 아웃, 더 많은 정보를 나누기 : https://magento.stackexchange.com/a/193442/2380
해결 방법 (이 문제를 해결하기 위해 EE 1.11+ 용 V2가 릴리스 됨) : enterprise/default
및 rwd/entreprise
테마 모두에 대한 템플리트 파일을 롤백하십시오 .
패치와 버전의 차이점
편집 : 1.9.3.6이 릴리스 되었으므로이 정보는 더 이상 관련이 없습니다
현재 제기 된 주요 문제 중 하나는 1.9.3.5에 패치에서 3 개의 보안 패치가 누락 되었다는 것입니다. 따라서 패치 만 권장하고 아직 1.9.3.5로 업데이트하지 않는 것이 좋습니다.
답변
맞춤 템플릿으로 인해 상점에 고유한지 여부를 여전히 확인하려고합니다. 그러나 패치가 적용된 상태에서 깨졌으며 되돌릴 때 깨지지 않았습니다. 다른 사람들이 동일한 것을보고 할 수 있도록 게시하고 싶었습니다.
EE 1.14.2.0에서는 패치가 적용된 결제 정보 결제 단계를 지나서 진행할 수 없습니다. 새 패치를 적용하기 전에 최신 SUPEE-9767 v2를 사용하고 있습니다.
우리의 문제는 다음에서 제거하는 것으로 보입니다 || elements[i].name == 'form_key'
.
app/design/frontend/enterprise/default/template/giftcardaccount/onepage/payment/scripts.phtml
enablePaymentMethods
루프 에서 제거되었습니다 . 폼의 숨겨진 form_key 입력을 사용하지 않는 것으로 보이므로 제출시 컨트롤러에 전달되지 않습니다.
<input name="form_key" type="hidden" value="X" disabled="">
그런 다음 $this->_validateFormKey()
실패하고 컨트롤러는 아무것도 반환하지 않습니다.
업데이트 1 (2017-09-18) : 금요일에 Magento 지원 티켓을 제출했으며 “아직 판매자가 아직보고하지 않았다”고 들었습니다. 백업을 보내는 대신 적용 가능한 패치를 적용하여 1.14.2.4 및 1.14.3.4를 새로 설치했을 때 복제하려고했습니다. 티켓을 복제하고 응답 할 수있었습니다. 새로운 답변을 기다리고 있습니다.
참고 : 시스템> 구성> 관리> 보안> 체크 아웃시 양식 키 유효성 검증 사용은 “예”여야합니다. “아니오”인 경우 문제가 표시되지 않습니다.
업데이트 2 (2017-09-18) : 1.14.3.6 에서 문제를 복제 할 수 없지만 위의 템플릿 파일을 확인할 때 || elements[i].name == 'form_key'
여전히 존재합니다. 패치가 패치를 제거하지 않은 것으로 보입니다. 이 정보도 마 젠토 지원팀에 보냈습니다.
업데이트 3 (2017-09-20) : 1.14.0.0–1.14.3.4 의 문제를 해결하기위한 패치를 받았습니다 form_key
. SUPEE-10348에 대한 지원을 요청하십시오.
답변
Magento Connect로 이동 한 후 페이지 오른쪽 상단의 “관리자로 돌아 가기”를 클릭 한 후 관리 대시 보드로 돌아 오면 오류 메시지가 표시됩니다
빨간색 오류 메시지 :
“잘못된 비밀 키입니다. 페이지를 새로 고치십시오.”
페이지를 새로 고치면 사라집니다.
업데이트 날짜 : 2017 년 9 월 15 일
Magento admin에 로그인하면 Dashboard라고 말하십시오. 대시 보드 패널에서 로그 아웃 하지 않고 동일한 브라우저에서 다른 브라우저 창을 열고 example.com/admin으로 이동하면 자동 로그인되어 정확히 동일한 메시지가 표시됩니다.
빨간색 오류 메시지 :
“잘못된 비밀 키입니다. 페이지를 새로 고치십시오.”
지금까지 내가 찾은 유일한 문제. 새로 고친 후 메시지가 사라지면서 확실한 문제인지 확실하지 않습니다.