Back-End

4 ago, 2016

Correção altamente crítica de execução remota de código para o Drupal (PSA-2016-001)

Publicidade

Update: correção liberada, ver as atualizações abaixo.

Para todos que estão executando Drupal, cuidado: hoje (13 de julho, quando o artigo original foi escrito) uma correção altamente crítica será lançada.

Haverá várias versões dos módulos de contribuição do Drupal na quarta-feira, 13 de julho, que irão corrigir as vulnerabilidades altamente críticas de execução remota de código (escore de risco até 22/25). Esses módulos de contribuição são utilizados entre 1.000 e 10.000 sites. A Equipe de Segurança do Drupal recomenda fortemente a você reservar tempo para atualizações dos módulos, porque exploits são esperados para serem desenvolvidos dentro de horas/dias. Anúncios de lançamento irão aparecer nos locais de anúncio do padrão. PSA-2016-001

É importante saber que o núcleo do Drupal não é afetado.

O núcleo do Drupal não é afetado. Nem todos os sites serão afetados. Você deve rever os alertas publicados em 13 de julho de 2016 para ver se algum dos módulos que você usa serão afetados. PSA-2016-001

A vulnerabilidade é uma “execução de código PHP arbitrário”, o que significa que qualquer pessoa pode usar essa vulnerabilidade para executar código PHP que eles escreveram no servidor. Na maioria dos ambientes, o PHP não está limitado ao que pode e não pode fazer, assim, permitir a execução do PHP arbitrário é tão perigoso como uma execução remota de código Bash. Tenha certeza de ficar de olho na correção!

Atualização 13/07/2016

3 módulos foram atualizados:

Pegue sua correção!

Aqui está o diff para o módulo Coder:

$ diff -r coder_upgrade/scripts/coder_upgrade.run.php \
   coder_upgrade/scripts/coder_upgrade.run.php
54,59d53
< if (!script_is_cli()) {
<   // Without proper web server configuration, this script can be invoked from a
<   // browser and is vulnerable to misuse.
<   return;
< }
<
219,227d212
<
< /**
<  * Returns boolean indicating whether script is being run from the command line.
<  *
<  * @see drupal_is_cli()
<  */
< function script_is_cli() {
<   return (!isset($_SERVER['SERVER_SOFTWARE']) && (php_sapi_name() == 'cli' || (is_numeric($_SERVER['argc']) && $_SERVER['argc'] > 0)));
< }

Aqui está o diff para o módulo RESTWS:

$ diff -r restws.module restws.module
268c268
<         'page arguments' => array($resource, 'drupal_not_found'),
---
>         'page arguments' => array($resource),
287c287
<         'page arguments' => array($resource, 'drupal_not_found'),
---
>         'page arguments' => array($resource),
308c308
<           'page arguments' => array($resource, 'drupal_not_found'),
---
>           'page arguments' => array($resource),
319,327d318
<  *
<  * @param string $resource
<  *   The name of the resource.
<  * @param string $page_callback
<  *   The page callback to pass through when the request is not handled by this
<  *   module. If no other pre-existing callback is used, 'drupal_not_found'
<  *   should be passed explicitly.
<  * @param mixed $arg1,...
<  *   Further arguments that are passed through to the given page callback.
329c320
< function restws_page_callback($resource, $page_callback) {
---
> function restws_page_callback($resource, $page_callback = NULL) {
431,433c422,427
<   // Fall back to the passed $page_callback and pass through more arguments.
<   $args = func_get_args();
<   return call_user_func_array($page_callback, array_slice($args, 2));
---
>   if (isset($page_callback)) {
>     // Further page callback arguments have been appended to our arguments.
>     $args = func_get_args();
>     return call_user_func_array($page_callback, array_slice($args, 2));
>   }
>   restws_terminate_request('404 Not Found');

***

Mattias Geniar faz parte do time de colunistas internacionais do iMasters. A tradução do artigo é feita pela redação iMasters, com autorização do autor, e você pode acompanhar o artigo em inglês no link: https://ma.ttias.be/highly-critical-remote-code-execution-patch-drupal-psa-2016-001/