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:
- Coder (altamente crítica)
- RESTWS (altamente crítica)
- Webform Multiple File Upload (crítica)
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/