Full Path Disclosure уязвимост в плъгина Unyson за WordPress

unyson
Дата на публикуване 2018-07-22

За Unyson

Unyson е безплатен, мултифункционален фреймуърк с множество вградени разширения за лесно и бързо създаване на теми за известната система WordPress. Считано от средата на 2018, плъгинът има над 100,000 активни инсталации и намира широко приложение.

Уязвимостта

Както повечето плъгини, модули и други части от даден софтуер, Unyson не позволява директния достъп, от страна на трети лица, до неговите компоненти (в частност файловете). Това е често срещана практика, тъй като улеснява процеса по осигуряването на защита на приложението.

Въпреки това, съществува т.нар. FPD (Full Path Disclosure) уязвимост, която в случая е съвсем елементарна. Unyson позволява свалянето на последните шрифтове посредством файла load-latest-fonts.php, който се намира в директорията framework/bin/. Различното в случая е, че тук не се прави проверка дали файлът бива извикван от извън система или не и по-конкретно:

<?php if ( ! defined( 'FW' ) ) {
    die( 'Forbidden' );
}


Следователно позволява трети лица да достъпват отдалечено файлът директно посредством пълния му път в съответната WordPress инсталация:

../wp-content/plugins/unyson/framework/bin/load-latest-fonts.php

Това е постигнато посредством функцията download_file() която връща стойността на променливата $destination (съдържаща пълния път на акаунта):

function download_file($url, $destination) {
    echo 'downloading ' . $destination . "\n";
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt( $ch, CURLOPT_ENCODING, "UTF-8" );

    $data = curl_exec ($ch);
    $error = curl_error($ch);

    curl_close ($ch);

    $file = fopen($destination, "w+");
    fputs($file, $data);
    fclose($file);
}

Което връща сходна, на по-долу изложения пример, информация:

#!/usr/bin/env php
downloading /var/www/html/site/wp-content/plugins/unyson/framework/bin/../static/libs/entypo/css/entypo.css
downloading /var/www/html/site/wp-content/plugins/unyson/framework/bin/../static/libs/entypo/fonts/entypo.eot

Издавайки пълния път на акаунта.

Уязвимостта засяга версии 2.5.7 до 2.7.18 (включително).

Отстраняване на уязвимостта

За потребителите, които използват Unyson има добри новини. Разработчиците на Unyson вече са публикували нова версия (2.7.19), която отстранява описаната уязвимост. При това положение, всеки потребител може просто да обнови своята версия на плъгина до най-новата.

Технически, защитата се изразява в добавянето на допълнително условие с което се проверява дали файлът се извиква посредством CLI среда:

if ( php_sapi_name() != 'cli' ) {
    die();
}

За справка може да се разгледа и съдържанието на файла в  официалното GitHub хранилищи на ThemeFuse.

Препоръчва се потребители на WordPress, използващи плъгина Unyson, да обновят неговата версия до 2.7.19, за да не бъдат обект на атака, експлоатираща посочената уязвимост.

Коментари

Няма публикувани коментари.

Нов коментар