Bản vá SUPEE-6285, những gì đã được thay đổi?


26

OK, ai đó phải hỏi điều này: hôm nay, 7/7/2015 một bản vá bảo mật mới cho Magento <1.9.2 đã được phát hành.

cập nhật cửa hàng của bạn càng sớm càng tốt!

Nhưng những gì đã được thay đổi? Có khai thác được biết đến của các vấn đề an ninh được bảo hiểm? Điều tồi tệ nhất có thể xảy ra là gì?

Và có điều gì có thể phá vỡ? Giống như với SUPEE-5994, nơi không thể áp dụng bản vá nếu thư mục trình tải xuống bị thiếu ...


4
RẤT NHIỀU. Chỉ riêng tệp vá là hơn 1.100 dòng với khoảng 350 bổ sung và 100 xóa. Hướng dẫn sử dụng mẫu chỉnh sửa này sẽ cần phải được thực hiện trong ~ 8 frontend mẫu nếu bạn có ghi đè chúng trong gói của bạn / chủ đề
Bến Lessani - Sonassi

5
Đây là một bài viết hay blog.philwinkle.com/supee-6285-broken-down
Steve Robbins

Câu trả lời:


36

Như đã đề cập, các lỗ hổng được vá được mô tả chi tiết trên trang chính thức này (tài liệu người bán mới): http://merch.docs.magento.com/ce/user_guide/Magento_Community_Edition_User_Guide.html#magento/patch-release-2015.html

Tóm lược

Gói này bao gồm bảo vệ chống lại các vấn đề liên quan đến bảo mật sau:

  • Rò rỉ thông tin khách hàng thông qua RSS và đặc quyền
  • Yêu cầu giả mạo trong Magento Kết nối dẫn đến thực thi mã
  • Viết kịch bản chéo trang trong Wishlist
  • Tập lệnh chéo trang trong giỏ hàng
  • Cửa hàng tiết lộ đường dẫn
  • Quyền đối với tệp nhật ký quá rộng
  • Viết kịch bản chéo trang trong Quản trị viên
  • Viết kịch bản chéo trang trong đơn hàng RSS

Sau khi vá một vài cửa hàng, đây là những gì tôi thu thập được:

Bản vá chủ đề

Một số tệp chủ đề đã được vá với thoát bổ sung để ngăn chặn các cuộc tấn công XSS có thể xảy ra:

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

Nếu (các) chủ đề của bạn chứa bất kỳ mẫu nào trong số các mẫu này hoặc nếu bạn thực hiện sửa đổi trực tiếp base/default(chúc may mắn, bạn bị vặn), thì bạn cần phải vá chúng theo cách thủ công:

  1. trong các mẫu thanh toán, thay thế tất cả các lần xuất hiện của

    $this->getContinueShoppingUrl()

    với

    Mage::helper('core')->quoteEscape($this->getContinueShoppingUrl())
  2. vào wishlist/email/rss.phtml, thay thế

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

    với

    Mage::helper('core')->escapeHtml($this->helper('wishlist')->getCustomerName())
  3. Trong rss/order/details.phtml, thay thế

    <?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 />

    với

    <?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 />

Quyền

.htaccesscác tệp đã được thêm vào downloader/Mageddownloader/libkhông cho phép truy cập trực tiếp vào các tệp nguồn. Nếu bạn sử dụng nginx, bạn cần thêm các quy tắc này để đạt được điều tương tự (thx thành Ben Lessani cho quy tắc này):

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

Nhưng tôi khuyên bạn nên loại trừ downloaderkhỏi việc triển khai vào một hệ thống trực tiếp, trong trường hợp này bạn không cần phải hành động.

Đặc quyền quản trị viên (ACL)

Nếu bạn sử dụng tài khoản quản trị viên bị hạn chế, một số menu của tiện ích mở rộng bên thứ ba có thể không hoạt động nữa đối với họ. Lý do là giá trị trả về mặc định của Mage_Adminhtml_Controller_Action::_isAllowed()đã được thay đổi từ truethành Mage::getSingleton('admin/session')->isAllowed('admin'). Các tiện ích mở rộng không ghi đè phương thức này trong bộ điều khiển quản trị viên vì chúng không sử dụng ACL, giờ cần đặc quyền "TẤT CẢ" .

Giải pháp duy nhất là vá các phần mở rộng và thêm phương thức này vào tất cả các bộ điều khiển quản trị của chúng:

protected function _isAllowed()
{
    return true;
}

Hoặc nếu họ thực sự có tài nguyên ACL được xác định trong etc/adminhtml.xml:

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

(bạn có thể thấy rằng bản vá này thực hiện tương tự Phoenix_Moneybookerstrong các phiên bản Magento cũ hơn như 1.7 có phần mở rộng này được bao gồm)

Để có góc nhìn chi tiết hơn về vấn đề này và giải thích cách xác định các tài nguyên ACL bị thiếu, hãy xem: Truy cập các lỗi bị từ chối sau khi cài đặt SUPEE-6285

Lỗi có thể xảy ra trong khi áp dụng bản vá

  1. Thông điệp:

    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

    Lý do: các default/modernchủ đề đã bị xóa khỏi quá trình cài đặt

    Giải pháp: Thêm app/design/frontend/default/moderntừ bản tải xuống Magento mới (phải là phiên bản giống với cửa hàng của bạn). Bạn cũng có thể sử dụng gương này: https://github.com/firegento/magento . Sau khi áp dụng bản vá thành công, bạn có thể xóa chủ đề một lần nữa.

  2. Thông điệp

    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

    Lý do: các downloaderthư mục đã bị xóa khỏi quá trình cài đặt

    Giải pháp: Thêm downloadertừ bản tải xuống Magento mới (phải là phiên bản giống với cửa hàng của bạn). Bạn cũng có thể sử dụng gương này: https://github.com/firegento/magento . Sau khi áp dụng bản vá thành công, bạn có thể xóa thư mục một lần nữa.

  3. Tin nhắn: Một cái gì đó tương tự như

    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

    Lý do: các tệp được lưu trữ bằng \r\n(CRLF, ngắt dòng Windows) hoặc \r(ngắt dòng CR, Mac) thay vì \n(ngắt dòng LF, Unix).

    Giải pháp: Chỉ cần chuyển đổi các ngắt dòng, trình soạn thảo văn bản hoặc IDE của bạn sẽ có khả năng này.


Vì đây có vẻ là một bản vá lớn, bạn có đồng ý rằng các cửa hàng chạy 1.9.x bây giờ sẽ tốt hơn khi nâng cấp lên 1.9.2.0 bao gồm bản vá này?
ngủ

1
Tôi chưa cập nhật bất kỳ cửa hàng nào lên 1.9.2.0 nhưng dường như có một số cạm bẫy và cập nhật bổ sung cần được kiểm tra cẩn thận hơn. Tôi vẫn sẽ khuyên bạn nên cài đặt các bản vá đầu tiên.
Fabian Schmengler 8/07/2015

Trong nhóm của chúng tôi, chúng tôi đã phát triển một tiện ích mở rộng chỉ để sử dụng và sau bản vá này, tôi nhận ra một số bộ điều khiển quản trị viên không thực hiện _isAllowedphương pháp này. May mắn thay, chúng tôi đã có ACL trong mô-đun và không có hành động bổ sung nào được yêu cầu ngoài việc thêm phương thức. Ngoài ra, tôi đã gặp thông báo lỗi đầu tiên với default/modernchủ đề đã bị di chuyển (tôi cũng tìm thấy thủ phạm nhờ Git). +1 cho điều đó
Vic

Một số công cụ tuyệt vời ở đây. Khi tôi đi cập nhật cart.phtml của mình, tôi đã so sánh phiên bản của mình với phiên bản đó và nhận thấy chỉnh sửa của bạn có vẻ hơi sai. Dòng mới từ tệp vá là: <button type = "button" title = "<? Php echo Mage :: helper ('core') -> quoteEscape ($ this -> __ ('Tiếp tục mua sắm'))?> "class =" button btn-continue "onclick =" setLocation ('<? php echo Mage :: helper (' core ') -> quoteEscape ($ this-> getContinueShoppingUrl ())?>') "> <span> < span> <? php echo $ this -> __ ('Tiếp tục mua sắm')?> </ span> </ span> </ button>. Bạn có thể làm rõ?
PedroKTFC

7

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

Nói chung, điều này liên quan đến việc thêm một phương thức được bảo vệ _is ALLowed trả về một boolean. Đôi khi boolean này là kết quả của kiểm tra ACL, như với bản cập nhật lên adminhtml / bộ điều khiển / Danh mục / Danh mục / WidgetContoder. Đôi khi, điều này được mã hóa thành đúng, như với adminhtml / controls / AjaxContoder.php

Sau khi tôi đã thêm:

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

Đến một trong các Kiểm soát viên của bên thứ 3, Bộ phận quản trị viên bắt đầu "hoạt động" lại ...

Vì vậy, chúng tôi sẽ nhận được một Magento Patch sớm? Đây dường như là một vấn đề lớn hơn ...


Xin vui lòng xem câu trả lời của tôi. Đưa ra các vai trò bị hạn chế, đặc quyền "Bảng điều khiển" sẽ cho phép truy cập vào các phần của bên thứ ba mà không cần tài nguyên ACL riêng.
Fabian Schmengler

Magento 1.8 : Đã kiểm tra rằng (có "BẬT" bên phải) - cùng một câu chuyện: Truy cập bị từ chối . Có, tôi đã đăng xuất trước và đăng nhập sau :)
Piotr Siejczuk

Xin lỗi, tôi đã hiểu sai cấu hình cho "admin", nó thực sự chỉ trả về đúng cho người dùng với tất cả các quyền riêng tư. Đúng là nhiều phần mở rộng sẽ cần phải được vá. Cập nhật câu trả lời của tôi cho phù hợp.
Fabian Schmengler 8/07/2015

Điều này hoặc như tôi đã viết @ magento.stackexchange.com/questions/73646/, chúng tôi có thể cần phải viết Ghi đè chung trong ứng dụng / mã / cục bộ cho Mage_Adminhtml_Contoder_Action :: _ is ALLowed () <pre> hàm được bảo vệ _is ALLowed () getSingleton ('quản trị / phiên') -> is ALLowed ('system / config'); } </ pre>
Piotr Siejczuk

1
Nếu "system / config" là quyền mặc định hoạt động cho bạn .. phụ thuộc vào người bán tôi đoán
Fabian Schmengler

3

Nếu bạn có nhiều tiện ích mở rộng cộng đồng / cục bộ, bạn sẽ muốn chú ý đặc biệt đến thay đổi này trong SUPEE-6285, điều này ảnh hưởng app/code/core/Mage/Adminhtml/Controller/Action.phpvà nằm ở dòng 666 tùy thuộc vào phiên bản vá của bạn (đây là bản vá lỗi EE 1.14.0.1):

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

Tất cả các mô-đun tùy chỉnh không triển khai tài nguyên quản trị viên của riêng họ bị ảnh hưởng bởi thay đổi ở trên và quyền truy cập sẽ bị từ chối trừ khi người dùng quản trị viên trong câu hỏi có đầy đủ đặc quyền quản trị viên.

Nếu bạn tìm ở nơi khác trong bản vá, bạn sẽ thấy rằng rất nhiều mô-đun lõi đi kèm đã được cập nhật tuy nhiên điều này có thể ảnh hưởng đến rất nhiều mô-đun của bên thứ ba, vì vậy hãy chú ý kiểm tra bất kỳ tiện ích mở rộng của bên thứ ba nào trong bản vá bài đăng trên trang web của bạn để kiểm tra bạn vẫn có thể truy cập chúng!


1

Có vẻ như trang phát hành bản vá đã được cập nhật với thông tin về những gì nó ảnh hưởng.

Tôi chưa cài đặt trên một trang web sản xuất và thử nghiệm


3
Tôi đã cài đặt nó trên máy chủ Dev và nó hoạt động tốt, vì vậy đã đẩy nó vào sản xuất. Mọi thứ dường như hoạt động tốt, cho đến khi một số quản trị viên sản phẩm và bán hàng của chúng tôi đã thử sử dụng quản trị viên Magento - những người dùng này đã hạn chế quyền vai trò thông qua 'trình chỉnh sửa vai trò người dùng' trong Magento, họ thường xuyên gặp lỗi truy cập trên một số khu vực của trang web khu vực quản trị trong đó sử dụng plugin của bên thứ 3. Tài khoản quản trị viên chính của tôi vẫn hoạt động tốt trên tất cả những điều này ... Tôi vẫn đang xem xét nó
Ricky Odin Matthews

0

Danh sách đầy đủ các tệp sửa đổi sau khi áp dụng bản vá cũng có sẵn trong app/etc/applied.patches.list


0

Trong trường hợp của tôi đối với các mô-đun của bên thứ ba, việc thêm mã dưới đây vào bộ điều khiển adminhtml đã hoạt động:

protected function _isAllowed()

{
     return true;
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.