TRAN CONG DANH - SVTT - Mentor: LUU VAN LAN - CVE-2018-7600 - Data de Início: 26/06/2024.
Índice:
- Resumo do CVE
- Pré-requisitos
- Análise do CVE
- Mitigação
Resumo do CVE
- Um atacante poderia chamar uma requisição Ajax da Drupal Form API contendo a função call_user_func auto do
- Drupal antes de 7.58, 8.x antes de 8.3.9, 8.4.x antes de 8.4.6, e 8.5.x antes de 8.5.1
Pré-requisitos
Análise do CVE
- Encontramos as chaves que usam call_user_func são #pre_render, #post_render, #access_callback, #submit, #lazy_builder, #validate

- A tarefa agora é encontrar qual parâmetro o usuário submeteu tem um render, pode alterar a chave e receber a chave #post_render, para chamá-la.

- Ao redimensionar a imagem, o servidor de imagens chama a API do Drupal

- A função &$array incluída aqui é o array de elementos padrão quando enviados, vamos tentar depurar sem código:

- Suponha que você modifique o valor do mail ao fazer upload:


- Ao chamar o método getValue($array, $parents), o processo é o seguinte:
$ref proíbe referências a $array.
Primeiro loop: $ref referência a $array['a'].
Segundo loop: $ref referência a $array['a']['b'].
Terceiro loop: $ref referência a $array['a']['b']['c'].
O resultado final, $ref será referenciado ao valor 42.
$array = [
'a' => [
'b' => [
'c' => 42
]
]
];
$parents = ['a', 'b', 'c'];
- Após receber o valor de $form da função getValue, $form se tornará um argumento para a função Render

- A definição de call_user_func

- O resultado quando uso o arquivo de exploit:

Mitigação
- Patch
** Desenvolvedores do Drupal publicaram um patch, adicionando uma classe RequestSanitizer com um método stripDangerousValues para remover todos os elementos de entrada do array cujas chaves começam com "#". Este método limpa a entrada em $_GET, $_POST e $_COOKIES.
** Drupal 8.6.5
/core/lib/Drupal/Core/DrupalKernel.php
/core/lib/Drupal/Core/Security/RequestSanitizer.php
** A função stripDangerousValues verifica todos os parâmetros de entrada um por um, os primeiros elementos do array de entrada têm um valor começando com "#" e os valores não listados na lista de permissões são removidos.