
PoC e mitigação para CVE-2019-9787 (WordPress XSS/CSRF/RCE). Demonstra correções de sanitização, cookies HttpOnly e defesa CSRF baseada em hash com modificações de código.
corrija a falha lógica no processo de sanitização para administradores. adicione as duas linhas em /wp-admin/includes/ajax-actions.php e /wp-includes/comment.php (detalhe no relatório) remove_filter( 'pre_comment_content', 'wp_filter_post_kses' ); add_filter( 'pre_comment_content', 'wp_filter_kses' );
http-only Para cookies de sessão gerenciados pelo PHP, a flag é definida permanentemente no php.ini (Manual PHP sobre HttpOnly) através do parâmetro: session.cookie_httponly = True
defesa baseada em hash O token de validação CSRF não foi implementado no WordPress porque, se fosse, prejudicaria as funcionalidades de trackbacks e pingbacks do WordPress. O servidor não consegue distinguir uma requisição CSRF ilegal de uma requisição PINGBACK/TRACEBACK legítima. O WordPress aceita automaticamente um comentário sem o token CSRF correto como uma requisição de PINFBACK e TRACEBACK e filtra esse comentário com um filtro de lista branca.
Para defender contra esta vulnerabilidade CSRF, adicionamos um novo campo no formulário chamado hashnonce para verificar se o comentário foi enviado pelo administrador. O administrador assina uma assinatura sobre o valor do campo do comentário com seu cookie.
A assinatura do valor do campo do comentário usa md5 para gerar o valor hash (veja o gráfico).
Quando o administrador tenta adotar PINFBACK e TRACEBACK e o _wp_unfiltered_html não pode ser fornecido, usamos wp_verify_hashNonce. Se a validação falhar, um erro será reportado. Mesmo que a validação seja bem-sucedida, o erro lógico foi corrigido e "wp_filter_kses" será usado para filtrar comentários.
Código modificado:
o terceiro método é uma alteração de https://github.com/sijiahi/Wordpress_cve-2019-9787_defense