Es ist ein super kleiner Patch, hier ist der Unterschied:
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) {
Doch Peter O'Callaghan (das einzige) scheint einen Bug gefunden zu haben. Er teilte mir sanft die Details mit und sagte, ich könnte es hier mit Ihnen teilen, also hier ist es :
Am besten kann ich sagen, dass der Wert von $this->params
immer -f
an dem Punkt vorangestellt wird,
an dem die Validierung hinzugefügt wurde (er wird an dem Punkt an den Konstruktor übergeben, an dem der Rückgabepfad hinzugefügt wird). Daher ist es an dem Punkt, an dem es an die Validierung übergeben wird, wenn ich meine E-Mail konfiguriert habe
contact@me.com
, der Wert, der tatsächlich validiert wird -fcontact@me.com
, eher ein Zufall als die Absicht, dass dies als E-Mail-Adresse validiert wird. Wenn meine E-Mail-Adresse jedoch "example"@example.com
wäre, würde dies werden -f"example"@example.com
, was nicht validiert werden kann. Im Übrigen str_replace
erscheint das in dieser Angelegenheit völlig überflüssig, da AFAIK ein Leerzeichen nur in Verbindung mit Anführungszeichen verwenden kann und E-Mails mit Anführungszeichen nicht mit dem validieren-f
Präfix. Wäre das Präfix nicht vorhanden, wären str_replace und validate nicht nützlich, da "foo bar"@example.com
und
"foobar"@example.com
beide validieren, da letzteres nach dem Ersetzen niemals zugewiesen wird, die E-Mail weiterhin mit ersteren gesendet werden würde Wert, der vermutlich noch anfällig wäre.
Zwei andere Dinge zu beachten:
Randnotiz
Die entsprechende neue Version von Magento CE 1.9.3.2 enthält auch das Copyright Comment Year-Update (von 2016 bis 2017), sodass fast alle Dateien von Magento aktualisiert wurden und der Unterschied riesig aussieht