Vulnerabilidade de SQL Injection não autenticada do WooCommerce

Em 15 de julho de 2021, circulavam notícias sobre uma SQL Injection não autenticada no WooCommerce. As vulnerabilidades foram detectadas em 13 de julho e corrigidas nas versões 3.3.6 a 5.5.1 do WooCommerce e nas versões 2.5.16 a 5.5.1 dos Blocos do WooCommerce. Este artigo é uma breve análise das vulnerabilidades, do patch e, em seguida, um PoC para os bugs!

 

Análise de patch

No artigo do blog de segurança, podemos ver que as vulnerabilidades estão no WooCommerce e no plug-in de recurso Blocos do WooCommerce. Podemos ver duas correções aqui: https://plugins.trac.wordpress.org/changeset?old_path=/woocommerce&old=2564657&new_path=/woocommerce&new=2564657&sfp_email=&sfph_mail=#file22 em ambos ‘class-wc-webhook-store.php ‘em WooCommerce e’ ProductFiltering.php ‘em Blocos.

Ambas as correções são muito interessantes. Contudo, para rastrear um pouco mais, eu busquei a fonte das versões vulneráveis ​​e configurei um site WordPress para ela (isso também será útil para o PoC, é claro). Eu sei da fonte, a parte vulnerável é através da API, então podemos visitar ‘woocommerce \ packages \ woocommerce-blocks \ src \ StoreApi \ RoutesController.php’ para obter uma boa lista das rotas de API.

Usando isso, podemos ver a rota ‘product-collection-data’ para a qual podemos navegar em ‘woocommerce \ packages \ woocommerce-blocks \ src \ StoreApi \ Routes \ ProductCollectionData.php’ que parece promissora!

Vulnerabilidade de injeção de SQL não autenticada do WooCommerce

Portanto, nosso caminho agora é / wp-json / wc / store / products / collection-data. A partir desse arquivo, podemos criar uma URL completa com bastante facilidade, pois isso detalha como usar essa rota específica. Voltando ao patch original, seguir ‘wc_sanitize_taxonomy_name’ nos leva à função da seguinte maneira:

Vulnerabilidade de injeção de SQL não autenticada do WooCommerce

Isso é realmente interessante, e depois de pesquisar no Google o uso de sanitize_title, obtemos:

Por padrão, converte caracteres de acento em caracteres ASCII e limita ainda mais a saída para caracteres alfanuméricos, sublinhado (_) e traço (-) por meio do filtro ‘sanitize_title’.

E este código também está usando urldecode, portanto, se codificarmos em URL uma carga útil 3 vezes para contornar isso, devemos ter um PoC totalmente funcional combinado com a URL criada anteriormente.

 

Explorando os bugs

Com as informações que descobrimos, agora podemos prosseguir e tentar explorar essas vulnerabilidades! Com base em todos os dados que adquirimos, nosso URL final seria o seguinte. A carga útil contém um comando SQL simples de suspensão:

http://127.0.0.1:8080/wordpress/wp-json/wc/store/products/collection-data?calculate_attribute_counts[0][taxonomy]=test%252522%252529%252520or%252520sleep%25252810.1%252529%252523

Executar esta PoC em uma versão vulnerável do WooCommerce realmente funciona!

E por fim, caso exista alguma dúvida, entre em contato com um de nossos especialistas em WordPress.

 

2021-07-22T16:56:40-03:00

Sobre o Autor:

A 2WP é uma empresa especializada em WordPress, que conta com uma equipe de especialistas altamente capacitados para fornecer soluções personalizadas para seus clientes. Nossos especialistas em WordPress possuem conhecimentos profundos em design, desenvolvimento, otimização e segurança de sites WordPress. Com anos de experiência e um portfólio impressionante, a equipe da 2WP está pronta para ajudar sua empresa a alcançar seus objetivos online com sucesso. Se você procura soluções eficazes para o seu site WordPress, a 2WP é a escolha certa para você.
Ir ao Topo