SecurityPatch 9652:应用SUPEE-9652后可能出现的问题


Answers:


25

这是一个非常小的补丁,这是差异:

diff --git lib/Zend/Mail/Transport/Sendmail.php lib/Zend/Mail/Transport/Sendmail.php
index b24026b..9323f58 100644
--- lib/Zend/Mail/Transport/Sendmail.php
+++ lib/Zend/Mail/Transport/Sendmail.php
@@ -119,14 +119,19 @@ class Zend_Mail_Transport_Sendmail extends Zend_Mail_Transport_Abstract
                 );
             }

-            set_error_handler(array($this, '_handleMailErrors'));
-            $result = mail(
-                $this->recipients,
-                $this->_mail->getSubject(),
-                $this->body,
-                $this->header,
-                $this->parameters);
-            restore_error_handler();
+            // Sanitize the From header
+            if (!Zend_Validate::is(str_replace(' ', '', $this->parameters), 'EmailAddress')) {
+                throw new Zend_Mail_Transport_Exception('Potential code injection in From header');
+            } else {
+                set_error_handler(array($this, '_handleMailErrors'));
+                $result = mail(
+                    $this->recipients,
+                    $this->_mail->getSubject(),
+                    $this->body,
+                    $this->header,
+                    $this->parameters);
+                restore_error_handler();
+            }
         }

         if ($this->_errstr !== null || !$result) {

但是,彼得·奥卡拉汉(Peter O'Callaghan)(也是唯一的)似乎发现了一个错误。他与我轻轻地分享了细节,并说我可以在这里与您分享,所以这里是

尽我所能告诉我,值的$this->params总会在添加-f验证点时被加上前缀( 在添加返回路径的点处传递给构造函数)。因此,在将其传递给验证的时候,如果我已经配置了电子邮件 contact@me.com,则实际被验证的值为-fcontact@me.com,这似乎是偶然的,而不是打算将其验证为电子邮件地址。如果是我的电子邮件地址"example"@example.com,它将变成-f"example"@example.com,它将无法验证。顺便说一句,str_replace由于AFAIK空格只能与引号一起使用,并且带有引号的电子邮件无法通过-f字首。事实上,如果不是因为前缀在那里,在str_replace函数和验证也没有用,因为"foo bar"@example.com"foobar"@example.com这两个验证,因为后者更换后从未分配到任何东西,电子邮件仍然会采用前发价值,这可能仍然很脆弱。

还有两件事要牢记:

边注

Magento CE 1.9.3.2的相应新版本还包括版权评论年度更新(从2016年到2017年),因此Magento的几乎每个文件都已更新,并且差异看起来很大


2
“只要您禁用了电子邮件设置”,管理面板中的这些设置是什么?只是为了避免我不喝咖啡就通过Sys-> Config潜水:)
Luke Rodgers

2
@LukeRodgers参阅本博客文章的详细信息:magento.com/security/news/...
拉斐尔在数码钢琴艺术

1
“版权评论年更新(从2016年到2017年),因此Magento的几乎所有文件都已更新”,这是真相@Raphael在Digital Pianism
Amit Bera

1
@Icon好吧,如果您检查补丁文件名称,它已经是v2 ^^,那么可能是v3还没有ETA
Raphael在Digital Pianism上2017年

1
记录下来,它极不可能影响任何合法使用和AFAIK(没有看到提交的有效载荷),它将在所有情况下都防止利用(尽管这样做的实际原因似乎是无意的,或者是一个极其奇怪的选择)。只是它会阻止所有用引号引起来的电子邮件,即"example"@example.com表单地址,无论它们在技术上是否危险。如果有任何合法的商店使用这种类型的电子邮件,我会感到非常惊讶,但是我希望这些信息能以防万一。
彼得·奥卡拉汉

8

升级的小技巧;在将新版本复制到现有安装中之后,请运行git diff -w --stat=400 | grep -v " 2 +”以快速查看差异,这些差异包含的更改不仅仅是版权声明更改。


4

安全补丁9652仅影响以下文件:

/lib/Zend/Mail/Transport/Sendmail.php

1

对于像我这样的人,他们想知道没有SSH访问权限怎么办:编辑文件/lib/Zend/Mail/Transport/Sendmail.php

从第122行开始,替换为:

        set_error_handler(array($this, '_handleMailErrors'));
        $result = mail(
            $this->recipients,
            $this->_mail->getSubject(),
            $this->body,
            $this->header,
            $this->parameters);
        restore_error_handler();

有了这个:

        // Sanitize the From header
        if (!Zend_Validate::is(str_replace(' ', '', $this->parameters), 'EmailAddress')) {
            throw new Zend_Mail_Transport_Exception('Potential code injection in From header');
        } else {
            set_error_handler(array($this, '_handleMailErrors'));
            $result = mail(
                $this->recipients,
                $this->_mail->getSubject(),
                $this->body,
                $this->header,
                $this->parameters);
            restore_error_handler();
        }

4
hm,适用于没有SSH访问权限的用户。也许您应该在本地打补丁并上传打补丁的文件。;)
infabo

有关在没有SSH访问的情况下进行修补的完整指导,请在此处查看此答案:magento.stackexchange.com/a/63936/3326
7ochem
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.