SUPEE-6285 patch สิ่งที่เปลี่ยนแปลงไป?


26

ตกลงมีบางคนต้องถามสิ่งนี้: วันนี้, 7/7/2558 แพตช์ความปลอดภัยใหม่สำหรับ 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/Magedและdownloader/libไม่อนุญาตการเข้าถึงไฟล์ต้นฉบับโดยตรง หากคุณใช้ nginx คุณจะต้องเพิ่มกฎเหล่านี้เพื่อให้ได้เหมือนกัน (ขอบคุณ thx to 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ใน Magento เวอร์ชั่นที่เก่ากว่าเช่น 1.7 ซึ่งส่วนขยายนี้รวมอยู่ด้วย)

สำหรับมุมมองรายละเอียดเพิ่มเติมเกี่ยวกับปัญหานี้และคำอธิบายวิธีกำหนดทรัพยากร 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

    สาเหตุ:ไฟล์ถูกจัดเก็บด้วย\r\n(CRLF, ตัวแบ่งบรรทัด Windows) หรือ\r(CR, ตัวแบ่งบรรทัด Mac) แทน\n(LF, ตัวแบ่งบรรทัด Unix)

    วิธีแก้ไข:เพียงแปลงตัวแบ่งบรรทัดตัวแก้ไขข้อความหรือ IDE ของคุณควรมีความสามารถในสิ่งนี้


เนื่องจากนี่เป็นแพตช์ใหญ่คุณจะเห็นด้วยไหมว่าร้านค้าที่ใช้ 1.9.x จะดีกว่าอัพเกรดเป็น 1.9.2.0 ซึ่งรวมถึงแพทช์นี้
paj

1
ฉันยังไม่ได้อัปเดตร้านค้าเป็น 1.9.2.0 แต่ดูเหมือนว่าจะมีข้อผิดพลาดเพิ่มเติมและควรทำการทดสอบอัปเดตอย่างระมัดระวังยิ่งขึ้น ฉันจะยังคงแนะนำให้ติดตั้งแพทช์ก่อน
เฟเบียน Schmengler

ในทีมของเราเราพัฒนาส่วนขยายสำหรับการใช้งานของเราและหลังจากแก้ไขนี้ฉันรู้ว่าบางส่วนของตัวควบคุมผู้ดูแลระบบไม่ได้ใช้_isAllowedวิธีการ โชคดีที่เรามี ACL ในโมดูลและไม่จำเป็นต้องดำเนินการเพิ่มเติมนอกเหนือจากการเพิ่มวิธีการ นอกจากนี้ฉันยังพบว่าข้อความแสดงข้อผิดพลาดครั้งแรกกับdefault/modernชุดรูปแบบที่ถูกย้าย (ฉันยังพบผู้กระทำผิดขอบคุณ Git) +1 สำหรับสิ่งนั้น
Vic

บางสิ่งที่ยอดเยี่ยมที่นี่ เมื่อฉันไปอัปเดต cart.phtml ของฉันฉันเปรียบเทียบรุ่นของฉันกับเวอร์ชั่นนั้นในฐานและสังเกตว่าการแก้ไขของคุณดูเหมือนผิดเล็กน้อย บรรทัดใหม่จากไฟล์ปะคือ: <button type = "button" title = "<? php echo Mage :: helper ('core') -> quoteEscape ($ this -> __ ('ช็อปปิ้งต่อ'))?> "class =" ปุ่ม btn-continue "onclick =" setLocation ('<? php echo Mage :: helper (' core ') -> quoteEscape ($ this-> getContinueShoppingUrl ())?>' ช่วงเวลา " span> <? php echo $ this -> __ ('ช็อปปิ้งต่อ')?> </span> </span> </ban> </button> คุณช่วยอธิบายได้ไหม
PedroKTFC

7

Via @ http://blog.philwinkle.com/supee-6285-broken-down/

โดยทั่วไปจะเกี่ยวข้องกับการเพิ่มวิธีการป้องกัน _isAllowed ซึ่งส่งกลับบูลีน บางครั้งบูลีนนี้เป็นผลจากการตรวจสอบ ACL เช่นเดียวกับการอัปเดตเป็น Adminhtml / controllers / Catalog / Category / WidgetController บางครั้งสิ่งนี้ถูกฮาร์ดโค้ดเป็นจริงเช่นเดียวกับ Adminhtml / controllers / AjaxController.php

หลังจากที่ฉันเพิ่ม:

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

สำหรับหนึ่งในผู้ควบคุมบุคคลที่ 3 ที่ส่วนผู้ดูแลระบบเริ่ม "ทำงาน" อีกครั้ง ...

ดังนั้นเราจะได้ Magento Patch ใหม่เร็ว ๆ นี้? ดูเหมือนว่าจะเป็นปัญหาที่ใหญ่กว่า ...


โปรดดูคำตอบของฉัน การให้บทบาทที่ถูก จำกัด สิทธิ์ "แดชบอร์ด" จะช่วยให้สามารถเข้าถึงส่วนบุคคลที่สามโดยไม่มีทรัพยากร ACL ของตัวเองอีกครั้ง
เฟเบียน Schmengler

วีโอไอพี 1.8 : ตรวจสอบว่า (ได้ว่าสิทธิของ "ON") - เรื่องเดียวกัน: การเข้าถึงถูกปฏิเสธ ใช่ฉันมีออกจากระบบก่อนและเข้าสู่ระบบเข้าสู่ระบบหลังจาก :)
Piotr Siejczuk

ขออภัยฉันตีความการกำหนดค่าสำหรับ "ผู้ดูแลระบบ" ผิดพลาดจริง ๆ แล้วจะคืนค่าจริงให้กับผู้ใช้ที่มีสิทธิ์ทั้งหมดเท่านั้น เป็นความจริงที่ส่วนขยายจำนวนมากจะต้องได้รับการแก้ไข อัปเดตคำตอบของฉันตาม
เฟเบียน Schmengler

นี่หรือตามที่ฉันเขียน @ magento.stackexchange.com/questions/73646/เราอาจจำเป็นต้องเขียน Override ทั่วไปใน app / code / local สำหรับ Mage_Adminhtml_Controller_Action :: _ isAllowed () <pre> ฟังก์ชันป้องกัน _isAllowed () {return Mage :: getSingleton ( 'ผู้ดูแลระบบ / ครั้ง) -> isAllowed ( 'ระบบ / config'); } </pre>
Piotr Siejczuk

1
หาก "system / config" ตามที่ได้รับอนุญาตเริ่มต้นทำงานได้ดีสำหรับคุณ .. ขึ้นอยู่กับผู้ขายฉันเดา
Fabian Schmengler

3

หากคุณมีส่วนขยายชุมชน / ท้องถิ่นจำนวนมากคุณจะต้องให้ความสนใจเป็นพิเศษกับการเปลี่ยนแปลงใน SUPEE-6285 ซึ่งมีผลต่อapp/code/core/Mage/Adminhtml/Controller/Action.phpและอยู่ที่บรรทัดที่ 666 ขึ้นอยู่กับเวอร์ชันของแพทช์ของคุณ (นี่คือ EE 1.14.0.1 patchfile):

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

โมดูลที่กำหนดเองทั้งหมดที่ไม่ได้ใช้ทรัพยากรผู้ดูแลระบบของตนเองจะได้รับผลกระทบจากการเปลี่ยนแปลงข้างต้นและการเข้าถึงจะถูกปฏิเสธเว้นแต่ผู้ใช้ที่เป็นผู้ดูแลระบบนั้นมีสิทธิ์ผู้ดูแลระบบเต็มรูปแบบ

หากคุณมองหาที่อื่นในแพทช์คุณจะเห็นว่าโมดูลหลักที่รวมอยู่จำนวนมากได้รับการอัปเดตแล้วอย่างไรก็ตามสิ่งนี้มีแนวโน้มที่จะส่งผลกระทบต่อโมดูลของบุคคลที่สามจำนวนมากดังนั้นโปรดให้ความสนใจเป็นพิเศษ คุณยังสามารถเข้าถึงได้!


1

ดูเหมือนว่าหน้าเผยแพร่การแก้ไขได้รับการอัปเดตด้วยข้อมูลว่ามีผลกระทบอย่างไร

ฉันยังไม่ได้ติดตั้งในไซต์การผลิตและทดสอบ


3
ฉันได้ติดตั้งไว้บนเซิร์ฟเวอร์ Dev และใช้งานได้ดีจึงผลักไปที่การผลิต ดูเหมือนว่าทุกอย่างจะทำงานได้ดีจนกระทั่งผู้ดูแลระบบผลิตภัณฑ์และฝ่ายขายของเราบางคนลองใช้ Magento admin - ผู้ใช้เหล่านี้มีการ จำกัด สิทธิ์การใช้บทบาทผ่าน 'ผู้ใช้แก้ไขบทบาท' ใน Magento พวกเขาถูกปฏิเสธด้วยข้อผิดพลาดในการเข้าถึงเว็บไซต์ ซึ่งใช้ปลั๊กอินของบุคคลที่สาม บัญชีผู้ดูแลระบบหลักของฉันยังคงใช้งานได้ดีกับสิ่งเหล่านี้ ... ฉันกำลังดูอยู่
Ricky Odin Matthews

0

รายชื่อไฟล์ที่ถูกแก้ไขหลังจากใช้งาน patch นั้นมีให้ใช้งานเช่นกัน app/etc/applied.patches.list


0

ในกรณีของฉันสำหรับโมดูลของบุคคลที่สามการเพิ่มโค้ดด้านล่างให้กับตัวควบคุม adminhtml ทำงาน:

protected function _isAllowed()

{
     return true;
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.