Kasutaja:Heyyythatsprettygood/liivakast

Allikas: Vikipeedia

Murdskriptimise haavatavus TweetDeckil (2014)

TweetDeck on 2008. aastal loodud klientrakendus sotsiaalmeediaplatvormile Twitter, mille peamiseks väärtuseks on lisaks 280-tähemärgiliste (2014. aastal 140 tähemärki) lühisõnumite ehk säutsude (ingl tweet) postitamine läbi Twitteri API ehk rakendusliidese ka konto organisatoorse poole lihtsustamine. 2009. aasta seisuga oli TweetDeck ligi 20-protsendilise turuosalusega twitter.com-i järel populaarseim Twitteri klientrakendus.[1][2]

2014. aastal tuli ilmsiks, et TweetDeckil on haavatavus murdskriptimisele (ingl cross-site scripting, XSS).

Haavatavus[muuda | muuda lähteteksti]

Turvaaugu illustreerimiseks kasutame ühte paljudest postitustest, mis antud turvaauku ära kasutasid. 11. juunil 2014 koostas Twitteri kasutaja @andy* järgmise sisuga säutsu:

"<script class=”xss”>$(‘.xss’).parents().eq(1).find(‘a’).eq(1).click();$(‘[dataaction=retweet]’).click();alert(‘XSS in Tweetdeck’)</script>♥".

Säutsu sisuks oli HTMLi skriptimärgendite vahel olev käsujada, mille ülesandeks oli JavaScripti teeki jQuery kasutades lehelt üles leida "xss" klassinime kandva DOM-elemendi vanematest teine ning sellest omakorda teine link, mis oli TweetDeckis postituse jagamise (ingl retweet) funktsiooni täitev nupp, ning sellele vajutada. Kui inimene prooviks sarnaselt toimida, siis avaneks eelmainitud käskude järel ka hüpikaken, mis küsib kinnitust, kas kasutaja ikka soovib postitust jagada. Selle jaoks otsib skript üles DOM-elemendi, mille "data-action" atribuudi väärtuseks on "retweet", ning vajutab sellele.

Järgmiseks skripti ülesandeks on kuvada kasutajale hüpikaken , mis annab kasutajale teada, et TweetDeckil on haavatavus murdskriptimisele inglisekeelse sõnumiga: "XSS in Tweetdeck." Selleks kasutas @andy* JavaScripti vaikefunktsiooni "alert()".

Peale skripti lõppu tähistava sulgevate skriptimärgendite lisamist jäi toonasest Twitteri postituse maksimaalsest võimalikust tähemärkide arvust üks üle, mille otsustas kasutaja täita Unicode emotikoniga, mis jäljendas südant.

Peatselt tuli ilmsiks, et TweetDeckil oli tõepoolest haavatavus murdskriptimisele. Iga kord kui antud postitus kasutaja uudistevoole kuvati, siis nägi veebilehitseja skriptimärgendeid, mille vaheline käsujada veebilehitseja poolt ellu viidi. Sealjuures kasutajale käsujada ei kuvatud.

Erinevate hinnangute järgi jagati postitust just murdskriptimise teel umbes 80 000 korda. Populaarseimate jagajate seas oli @BBCBreaking, millel oli 2010. aasta seisuga 10 miljonit jälgijat.[3]

Turvaaugu kirjeldus[muuda | muuda lähteteksti]

Murdskriptimine on üks suurimaid turvanõrkusi veebirakenduste vallas ning püsib juba üle kümne aasta autoriteetse OWASP veebirakenduste turvanõrkuste Top 10 edetabelis.[4] Seda eriti selliste rakenduste nagu Twitter puhul, kus kuvatakse kasutaja sisestatud informatsiooni vahetult rakenduse kasutajatele tagasi. Murdskriptimist võib käsitleda koodisüstimise (ingl code injection) alamliigina.

XSSi puhul saadab ründaja pahaloomulise koodi, tavaliselt veebilehitsejas käivitatava koodi näol, veebirakendusele, mida viimane teiste kasutajate veebilehitsejatesse edasi saadab.[5] Veel spetsiifilisemalt võiks TweetDecki rünnaku liigitada Stored XSSi alla: ründaja sisestatud pahaloomuline kood salvestatakse rakenduse andmebaasis, mida vastavate päringutega andmebaasile kuvatakse teistele kasutajatele ning seejärel käivitatakse ilma viimase teadmata tema masinas.[6]

Nii juhtus ka TweetDecki puhul. Kõnealust postitust ei kuvatud kasutajatele manipuleeritud lihttekstina, mis peaks olema läbinud filtri, mis puhastaks sisendi, et vältida XSSi, vaid kuvati täpselt sellisena nagu antud säutsu autor ta lõi.

Turvaaugu ilmsikstulekul TweetDeck likvideeris haavatavuse, kuid paraku ei avalikustanud, mis probleemi tekitas ning kuidas see likvideeriti. Saab vaid oletada, et sisendi töötlemisel tekitas probleemi autori lisatud südameemotikon, kuna TweetDeck töötles Unicode sümboli pildiks. Ka postituse autor arvas, et probleemi tekitas Unicode sümboli ümbertöötlemine pildiks.[3] Pilt oli vaja paigutada HTMLi img-märgendite vahele ning sellest võib oletada, et seetõttu ignoreeritigi kasutaja sisestatud skriptimärgendeid ja kuvati neid kahte lihtsalt koos.

Üheks võimalikuks viisiks, kuidas ohtlikke tähemärke nagu nurksulud siinkohal inimesele kuvada, oleks kasutaja sisend töödelda ning kasutada HTML escape’i. HTML escape’iga väldime tundliku ja ohtliku info käivitamist, kui oleme selle näiteks veebilehele kuvanud div-elemendi sisse. Antud võte näeks ette, et kuvame 6 ohtlikku tähemärki (&, <, >, “ , ', /) hex entityna.[7]

& --> &amp;
< --> &lt; 
> --> &gt;
" --> &quot;
' --> &#x27;     
/ --> &#x2F;     

Selliselt kuvatud nurksulgudega ei oleks antud rünnak tõenäoliselt läbi läinud.

Probleemi tõsidust illustreerib fakt, et ainuke, mis siinkohal oleks potensiaalset rünnakut tagasi hoidnud, oli postituse 140 tähemärgiline piirang. 140 tähemärgi sisse on keeruline pahaloomulist koodi süstida, kuid kui potensiaalne ründaja leiaks viisi, kuidas tähemärkide piirangut eirata, siis oleks tal vabad käed, millist koodi ohvri arvutis käivitada.

Tagajärjed[muuda | muuda lähteteksti]

Peale ajutist teenuse piiramist paranduste ajaks TweetDecki töö jätkus.[8]

Teadaolevalt turvaauku kasu saamise eesmärgil ära ei kasutatud.

Viited[muuda | muuda lähteteksti]

  1. Sysomos (juuni 2009). "Inside Twitter: An In-Depth Look Inside the Twitter World". {{netiviide}}: nähtamatu tähemärk (reavahetus) parameetris |pealkiri= positsioonil 16 (juhend)
  2. "CrunchBase TweetDeck profile". Vaadatud 15.01.2020.
  3. 3,0 3,1 Kelly Fiveash (12. juuni 2014). "Sealed with an XSS: I gave TweetDeck a heart attack, says teen comp sci boff Firo". Vaadatud 15. jaanuar 2020.
  4. "OWASP Top Ten Project". Vaadatud 15.01.2020.
  5. "Cross-Site Scripting (XSS)". Vaadatud 15.01.2020.
  6. "Types of Cross-Site Scripting". Vaadatud 15.01.2020.
  7. "Cross-Site Scripting Prevention Cheat Sheet". Vaadatud 15.01.2020.
  8. Violet Blue (12.06.2014). "TweetDeck wasn't actually hacked, and everyone was silly". Vaadatud 15.01.2020.