NextGen Gallery – krytyczna luka w ponad 800 tys. instalacji WordPress.

9 lutego, 2021 08:11


img

Ujawniono Cross-Site Request Forgery (CSRF) w NextGen Gallery, wtyczce WordPress z ponad 800 000 instalacji. Chodzi głównie o krytyczną lukę w zabezpieczeniach, która może prowadzić do zdalnego wykonania kodu (RCE) i lukę XSS. Wykorzystanie tych luk może doprowadzić do przejęcia witryny, złośliwych przekierowań, wstrzyknięcia SPAMu, phishingu i wielu innych.

CWE-352

Chodzi o budowę funkcji “is_authorized_request()” którą możemy po prostu ominąć. Funkcja ta jest używana do kontroli dostępu ustawień wtyczki. Wychodzi na to że możemy wysłać żądanie bez wymaganego parametru nonce. Czyli na przykład można przesłać dowolny kodu do pliku CSS z podwójnym rozszerzeniem (np. plik.php.css), a także przesłać taki plik jako szablon galerii, i podczas odwiedzania takiej galerii używającej tego szablonu na stronie – będziemy ofiarami podatności RCE i XSS.

Używacie wtyczki NextGen Gallery w wersji poniżej 3.5.0? Czytajcie dalej.

Przykłady luki NextGen Gallery.

 

function is_authorized_request($privilege = NULL)
{
    $retval = TRUE;
    if (!$privilege) {
        $privilege = $this->object->get_required_permission();
    }
    // Ensure that the user has permission to access this page
    if (!M_Security::is_allowed($privilege)) {
        $retval = FALSE;
    }
    // Ensure that nonce is valid
    if ($this->object->is_post_request() && (isset($_REQUEST['nonce']) && !M_Security::verify_nonce($_REQUEST['nonce'], $privilege))) {
        $retval = FALSE;
    }
    return $retval;
}

Ta funkcja łączy zbyt wiele w sobie i jest niepoprawnie skonstruowana. Niestety, błąd logiczny w funkcji is_authorized_request oznacza, że jej przebieg pozwoliłoby na kontynuację, nawet gdyby brakowało parametru $_REQUEST [„nonce”].

A to błąd.

Galeria NextGen wykorzystywała również oddzielną funkcję bezpieczeństwa, validate_ajax_request, dla różnych działań AJAX, np. do wgrywania na serwer zdjęć:

function validate_ajax_request($action = NULL, $token = false)
{
    if ($token === TRUE) {
        $token = isset($_REQUEST['nonce']) ? $_REQUEST['nonce'] : FALSE;
    }
    // TODO: Remove !$action condition. Necessary for Proofing at the moment
    return (!$action || M_Security::is_allowed($action)) && (!$token || M_Security::verify_nonce($token, $action));
}

Ta funkcja miała podobną wadę logiczną, która umożliwiałaby przetwarzanie żądań w przypadku braku parametru $ _REQUEST [„nonce”].

A więc kolejny błąd.

Obydwa błędy są to krytyczne i bardzo ważne luki w zabezpieczeniach, które mogą prowadzić do pełnego przejęcia witryny.

Zalecenia

Aby uchronić się przed możliwością wykorzystania luk, które mogą prowadzić nawet do przejęcia witryny zalecamy jak najszybszej zaktualizować wtyczkę do wersji 3.5.0 dostępnej w repozytorium WordPress.

 

Znajdź NextGen Gallery na serwerze

Mamy wiele stron WordPress na serwerze z DirectAdmin i nie wiemy czy nasze WordPressy posiadają NextGen Gallery?

Logujemy się po SSH i wykonujemy:

find $HOME -type d -name "nextgen-gallery" 2>/dev/null

co zwróci:

/home/uzytkownik1/domains/innadomena.pl/public_html/wp-content/plugins/nextgen-gallery
/home/uzytkownik1/domains/mojadomena.pl/public_html/wp-content/plugins/nextgen-gallery

 

Źródło: Severe Vulnerabilities Patched in NextGen Gallery Affect over 800,000 WordPress Sites (wordfence.com)

 

Ochrona przed lukami we wtyczkach WordPress?

 

Ochrona przed malware, atakami i podatnościami w WordPress!

Dla klientów Hostingu pod WordPress, Hostingu Elastycznego SSD oraz Hostingu WWW udostępniamy ochronę wspomaganą przez algorytmy sztucznej inteligencji (AI), które ustrzeże Twój serwer przed najnowszymi atakami, również atakami 0-Day zanim wyjdą hot-fixy!

Oprogramowanie analizuje to, co skrypty robią, a nie to, co faktycznie znajduje się w kodzie.

Sprawdź nasz Hosting pod WordPress!

O zabezpieczeniach… | Hosting pod WordPress


Podziel się lub polub!

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

czternaście + 11 =