SUPEE-6285パッチ、何が変更されましたか?


26

OK、誰かがこれを尋ねなければなりません:今日、2015年7月7日、Magento <1.9.2の新しいセキュリティパッチがリリースされました。

お店をできるだけ早く更新してください!

しかし、何が変更されましたか?対象のセキュリティ問題の既知のエクスプロイトはありますか?起こりうる最悪の事態は何ですか?

そして、破ることができるものはありますか?ダウンローダーのディレクトリが欠落している場合、パッチを適用することができなかったSUPEE-5994のように...


4
たくさん。パッチファイルだけでも1,350行以上あり、約350の追加と100の削除があります。あなたは、パッケージ/テーマでそれらを上書きした場合、マニュアルテンプレートの編集は〜8フロントエンドテンプレートで行われる必要があります
Sonassi -ベンLessani

回答:


36

既に述べたように、パッチが適用された脆弱性については、この公式ページ(新しい販売者ドキュメント)で詳細に説明されています:http : //merch.docs.magento.com/ce/user_guide/Magento_Community_Edition_User_Guide.html#magento/patch-releases-2015.html

概要

このバンドルには、次のセキュリティ関連の問題に対する保護が含まれています。

  • RSSおよび特権エスカレーションによる顧客情報の漏洩
  • Magento Connectのリクエストフォージェリがコード実行につながる
  • ウィッシュリストのクロスサイトスクリプティング
  • カート内のクロスサイトスクリプティング
  • ストアパスの開示
  • ログファイルの権限が広すぎる
  • Adminのクロスサイトスクリプティング
  • Orders 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を使用する場合は、同じことを実現するためにこれらのルールを追加する必要があります(この1つについて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に更新していませんが、いくつかの落とし穴があるようで、とにかく慎重に更新をテストする必要があります。最初にパッチをインストールすることをお勧めします。
ファビアンシュメングラー

私たちのチームでは、私たちが使用するためだけに拡張機能を開発しました。このパッチの後、いくつかの管理コントローラーが_isAllowedメソッドを実装していないことに気付きました。幸いなことに、モジュールにACLがあり、メソッドを追加する以外に追加のアクションは必要ありませんでした。また、default/modern移動されたテーマで最初のエラーメッセージが表示されました(Gitのおかげで犯人も見つかりました)。そのための+1
ヴィック

ここにいくつか素晴らしいものがあります。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保護メソッドを追加する必要があります。Adminhtml / controllers / Catalog / Category / WidgetControllerへの更新と同様に、このブール値はACLチェックの結果である場合があります。Adminhtml / controllers / AjaxController.phpのように、これはtrueにハードコードされる場合があります

追加した後:

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

サードパーティのコントローラーの1つに、管理セクションが再び「機能」し始めました...

それでは、もう1つのMagentoパッチを入手しますか?これはより大きな問題のようです...


私の答えをご覧ください。制限されたロールに「ダッシュボード」権限を与えると、独自のACLリソースなしでサードパーティセクションへのアクセスが再び許可されます。
ファビアンシュメングラー

Magento 1.8:それをチェックしました(その権利が「オン」だった)-同じ話:アクセスが拒否されました。はい、最初にログアウトしてからログインしてから:)
Piotr Siejczuk

申し訳ありませんが、「admin」の設定を誤って解釈しました。実際には、すべての特権を持つユーザーに対してのみtrueを返します。多くの拡張機能にパッチを適用する必要があるのは事実です。それに応じて私の答えを更新しました。
ファビアンシュメングラー

これまたは@ magento.stackexchange.com/questions/73646/を書いたように、Mage_Adminhtml_Controller_Action :: _ isAllowed()<pre> protected function _isAllowed(){return Mage ::のapp / code / localに一般的なオーバーライドを記述する必要があるかもしれません。 getSingleton( 'admin / session')-> isAllowed( 'system / config'); } </ pre>
ピョートルシェイチュク

1
あなたのための既定のアクセス許可作品として「システム/ configには」..商人に依存している場合、私は推測する
ファビアンSchmengler

3

コミュニティ/ローカル拡張機能がたくさんある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の「ユーザー役割エディター」を介して役割権限を制限し、管理者エリアのウェブサイトのいくつかの領域でアクセス拒否エラーが頻繁に発生しましたサードパーティのプラグインを使用します。私のメイン管理者アカウントは、これらのすべてでまだ正常に機能しています...私はまだ調べています
リッキーオーディンマシューズ

0

パッチの適用後に変更されたファイルの完全なリストは、次のサイトでも入手できます。 app/etc/applied.patches.list


0

サードパーティのモジュールの場合、adminhtmlコントローラーに以下のコードを追加するとうまくいきました。

protected function _isAllowed()

{
     return true;
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.