Magento lançou seu patch de segurança SUPEE-9652
, para Magento 1.x CE e EE
Eu só quero saber quais são os possíveis problemas após a aplicação desse patch de segurança e quais são as novas alterações nesse patch de segurança?
Magento lançou seu patch de segurança SUPEE-9652
, para Magento 1.x CE e EE
Eu só quero saber quais são os possíveis problemas após a aplicação desse patch de segurança e quais são as novas alterações nesse patch de segurança?
Respostas:
É um patch super minúsculo, aqui está o diff:
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) {
Contudo, Peter O'Callaghan (o primeiro) parece ter encontrado um bug. Ele gentilmente compartilhou os detalhes comigo e disse que eu poderia compartilhar com você aqui, então aqui está :
O melhor que posso dizer é que o valor de
$this->params
sempre será prefixado-f
no ponto em que a validação foi adicionada (é passada para o construtor no ponto em que o caminho de retorno é adicionado). Portanto, no momento em que é passado para a validação, se eu configurei meu emailcontact@me.com
, o valor que está realmente sendo validado é-fcontact@me.com
, parece mais um acaso do que uma intenção que isso valide como um endereço de email. Se meu endereço de e-mail fosse"example"@example.com
, isso se tornaria-f"example"@example.com
, o que não será validado. Aliás,str_replace
parece completamente redundante nesse assunto, uma vez que o espaço AFAIK pode ser usado apenas em conjunto com aspas, e e-mails com aspas não serão validados com o-f
prefixo. De fato, se não fosse o prefixo, o str_replace e validate não seriam úteis porque,"foo bar"@example.com
e"foobar"@example.com
ambos validam, já que o último nunca é atribuído a nada após a substituição, o e-mail ainda será enviado usando o antigo valor, que presumivelmente ainda estaria vulnerável.
Duas outras coisas a ter em mente:
app/etc/applied.patches.list
ela parece um pouco estranha. (fonte: https://twitter.com/JohnHughes1984/status/829050203139358720 )A nova versão correspondente do Magento CE 1.9.3.2 também inclui a atualização do ano dos comentários de direitos autorais (de 2016 a 2017), de modo que quase todos os arquivos do Magento foram atualizados e o diff parece enorme
"example"@example.com
, endereços de formulário, independentemente de serem tecnicamente perigosos. Eu ficaria surpreso se houver algum armazenamento legítimo usando esse tipo de email, mas desejássemos as informações disponíveis no caso.
Pequena dica para atualização; depois de copiar a nova versão na instalação existente, execute git diff -w --stat=400 | grep -v " 2 +”
para ver rapidamente as diferenças que contêm mais alterações do que apenas as alterações no aviso de direitos autorais.
O patch de segurança 9652 afeta apenas o seguinte arquivo:
/lib/Zend/Mail/Transport/Sendmail.php
Para quem gosta de saber o que fazer sem o acesso SSH: edite o arquivo /lib/Zend/Mail/Transport/Sendmail.php
da linha 122 em diante, substitua isto:
set_error_handler(array($this, '_handleMailErrors'));
$result = mail(
$this->recipients,
$this->_mail->getSubject(),
$this->body,
$this->header,
$this->parameters);
restore_error_handler();
com isso:
// 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();
}