Magento ha lanzado su parche de seguridad SUPEE-9652
, para Magento 1.x CE y EE
Solo quiero saber cuáles son los posibles problemas después de aplicar este parche de seguridad y ¿Cuáles son los nuevos cambios en este parche de seguridad?
Magento ha lanzado su parche de seguridad SUPEE-9652
, para Magento 1.x CE y EE
Solo quiero saber cuáles son los posibles problemas después de aplicar este parche de seguridad y ¿Cuáles son los nuevos cambios en este parche de seguridad?
Respuestas:
Es un parche súper pequeño, aquí está la diferencia:
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) {
Sin embargo, Peter O'Callaghan (el único) parece haber encontrado un error. Gentilmente compartió los detalles conmigo y dijo que podría compartirlo aquí, así que aquí está :
Lo mejor que puedo decir es que el valor de
$this->params
siempre estará prefijado-f
en el punto en que se agregó la validación (se pasa al constructor en el punto en que se agrega la ruta de retorno). Por lo tanto, en el momento en que se pasa a la validación, si configuré mi correo electrónicocontact@me.com
, el valor que realmente se está validando es-fcontact@me.com
que parece más una casualidad que una intención de que esto valide como una dirección de correo electrónico. Sin embargo, si mi dirección de correo electrónico fuera"example"@example.com
, esto se convertiría-f"example"@example.com
, lo que no se validará. Por cierto,str_replace
parece completamente redundante en este asunto dado que AFAIK un espacio solo se puede usar junto con comillas, y los correos electrónicos con comillas no se validarán con el-f
prefijo. De hecho, si no fuera porque el prefijo está allí, str_replace y validate no serían útiles porque"foo bar"@example.com
y"foobar"@example.com
ambos validan, ya que este último nunca se asigna a nada después del reemplazo, el correo electrónico aún se enviaría usando el primero. valor, que presumiblemente aún sería vulnerable.
Otras dos cosas a tener en cuenta:
app/etc/applied.patches.list
se siente un poco extraño. (fuente: https://twitter.com/JohnHughes1984/status/829050203139358720 )La nueva versión correspondiente de Magento CE 1.9.3.2 también incluye la actualización del año de comentarios de copyright (de 2016 a 2017), por lo que casi todos los archivos de Magento se han actualizado y la diferencia parece enorme
"example"@example.com
, direcciones de formularios, independientemente de si son técnicamente peligrosos. Me sorprendería bastante si hay tiendas legítimas que utilizan este tipo de correo electrónico, pero quisiera la información disponible en el caso.
Pequeño consejo para actualizar; después de copiar la nueva versión sobre su instalación existente, ejecute git diff -w --stat=400 | grep -v " 2 +”
para ver rápidamente las diferencias que contienen más cambios que solo el cambio de aviso de copyright.
El parche de seguridad 9652 afecta solo al siguiente archivo:
/lib/Zend/Mail/Transport/Sendmail.php
Para aquellos como yo que se preguntan qué hacer sin acceso SSH: edite el archivo /lib/Zend/Mail/Transport/Sendmail.php
desde la línea 122 en adelante, reemplace esto:
set_error_handler(array($this, '_handleMailErrors'));
$result = mail(
$this->recipients,
$this->_mail->getSubject(),
$this->body,
$this->header,
$this->parameters);
restore_error_handler();
con este:
// 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();
}