
Esta é uma recorrência de cve-2019-9787 no Wordpress e uma defesa baseada em hash.
Este é um projeto de Sijia Zhang(https://github.com/sijiahi) e Bowen Zhou(https://github.com/KonjakZhou)
- Configure e instale o Wordpress5.0 em http://localhost/wp-admin/;
- Faça login no Wordpress como admin e publique pelo menos um artigo;
- abra mal.html(configurado em outro domínio, possivelmente aberto diretamente como arquivo no navegador), clique em enviar solicitação.
- Se isso funcionar, você será redirecionado para a página do artigo com o comentário "clique em mim"; assim que você mover o mouse sobre ele, uma janela de prompt indicando ataque bem-sucedido aparecerá.
- Substitua os arquivos em /wp-includes, adicione scripts js em /wp-includes/js.
- Mova o arquivo de post simulado para a região do WP, abra a página do post simulado para testar a função PINGBACK/TRACEBACK.
- Se isso funcionar, você será redirecionado para a página do artigo com o comentário "âncora legal";
- Abra mal.com de outro domínio, teste o ataque CSRF.
Para defender o Wordpress contra o CVE-2019-9787, um novo campo chamado doggyNonce é introduzido. Nos casos em que o admin tenta adotar a função PINGBACK, e o _wp_unfiltered_html não pode ser fornecido, pedimos que o admin assine os atributos de suas Tags enviadas com seu cookie; isso nos permitirá defender contra ataque CSRF e garantir a integridade dos atributos das tags enviadas.
O Wordpress aceita automaticamente comentários sem token CSRF correto como uma solicitação PINFBACK e TRACEBACK, filtra esse comentário com um filtro de lista de permissões, extrai o campo href e reconstrói uma "tag a". Para defender essa vulnerabilidade, dois pontos-chave são levados em consideração: 1. O servidor não consegue distinguir solicitações CSRF ilegais de solicitações PINGBACK/TRACEBACK legais. 2. O atacante CSRF injeta seu código no campo href de uma "tag a"; o atributo da tag é alterado depois de ser filtrado. doggyNonce é um valor de hash que depende de *cookie(wp-setting-time-$uid) e de *atributo href enviado: doggyNonce=Hash(*uploaded href attrbute,*cookie) deve-se notar que o doggyNonce desempenha o papel de assinatura do admin no atributo href enviado.
1. 'mal.html' serve para simular um ataque CSRF e, portanto, deve ser colocado em um domínio diferente do Wordpress;
2. 'post.html' serve para simular a função PINGBACK/TRACEBACK e, portanto, deve ser colocado no mesmo domínio que o WP;