Mellékleteink: HUP | Gamekapocs
Keres
Július 19-én SYSADMINDAY: egy teljes security meetup, számos szórakoztató program, és Felméri Péter standupja várja az érdeklődőket!

Javította a biztonsági hibát a LastPass

Gálffy Csaba, 2017. április 03. 14:50
Ez a cikk több évvel ezelőtt születetett, ezért előfordulhat, hogy a tartalma már elavult.
Frissebb anyagokat találhatsz a keresőnk segítségével:

A böngészős kiegészítőbe a JavaScript hiányos dokumentációja nyomán került sebezhetőség. A Project Zero is közreműködött a javításban, meglepő gyorsasággal sikerült megoldani a problémát.

hirdetés

A hétvégén elkészült a LastPass-sebezhetőség javítása, azt a cég már ki is adta a felhasználóknak, a böngészős beépülő pedig automatikusan frissült kliensoldalon. Ezzel a cég roppant gyorsan, mindössze néhány nap alatt javította a Google Project Zero által jelzett hibát, bőven a biztonsági kutatók által szabott (meglehetősen önkényes) 90 napos határidő előtt. A javítás kiadásával immár publikus a hiba és az arra adott megoldás is, JavaScript-fejlesztőknek tanulságos lehet annak tanulmányozása.

Korábbi cikkünk a témában itt érhető el.

Lássuk a szaftos részleteket

A sebezhetőség a LastPass kliensoldali részében, a böngészőbe épülő plugin kódjában volt. Ez tette lehetővő (hipotetikus) támadók számára, hogy ha sikerült a felhasználót egy megfelelően preparált weboldalra csábítani (phishing vagy más támadással), akkor hozzáférést nyerjenek a számítógéphez (távoli kódfuttatás) vagy ellopják a felhasználó LastPass szolgáltatásban tárolt jelszavakat. Fontos tehát, hogy nem a LastPass backendje volt sebezhető, és az (elvi) támadás csak felhasználóként működött volna - tömeges adatlopásra, az adatbázis teljes lemásolására nem adott elméleti lehetőséget sem.

A LastPass böngészős beépülője viszonylag egyszerű feladatot lát el: megnézi az épp betöltött weboldalt és bejelentkezési mezőket keres rajta. Amennyiben ilyent talál, azt kis LastPass-logós gombokkal jelöli meg, ezeket megnyomva hívható elő a szolgáltatás. Ez a gyakorlatban azt jelenti, hogy egy weboldal kontextusában egyszerre fut a beépülő megbízhatónak számító JavaScript kódja és a weboldal saját JS-e, utóbbi hagyományosan megbízhatatlanként, ellenségesként jelölve.

Ez biztonságos...

A két világot a böngészők szigorú izolációval választják el egymástól, ez teszi lehetővé, hogy azonos DOM-on dolgozzanak a programok, miközben nem férhetnek hozzá egymás belső változóihoz, függvényeihez, stb. Esetünkben ez az izoláció teszi lehetővé, hogy a LastPass scriptje ki tudja tölteni az űrlapot, az űrlap viszont nem tudja tetszőlegesen kiolvasni a jelszavakat a helyi tárolóból - legalábbis elvben.

...ez pedig nem.

Ahhoz ugyanis, hogy egy változó biztonságossá váljon, deklarálni kell azt - az "undefined" változókra az izoláció ugyanis nem vonatkozik. Ez kevéssé ismert tény, a JavaScript illetve a böngészők izolációs implementációjának dokumentációja sem tér erre ki - a LastPass fejlesztői sem voltak tisztában vele. Az eredmény: a beépülő által használt kód több ezer helyen használ undefined változókat, megannyi belépési pontot teremtve ezzel a támadók számára ahhoz, hogy a telepített LastPass bináris belső API-jához hozzáférjenek, ezáltal akár távoli kódfuttatást, akár a jelszavakhoz való hozzáférést elérve.

A hiba kijavítása ezért első látásra rendkívül időigényes: kézzel vagy valamilyen megbízható eszközzel végigfésülni a kódbázist és megtalálni minden egyes esetet elképesztően nagy feladat, amire alapesetben könnyen ráment volna a Project Zero által adott 90 napos türelmi idő jelentős része. Szerencsére volt ennél elegánsabb megoldás, a zerós csapat egyik tagja, Jann Horn ötlete egy proxyt iktat a kódba, ami segít globálisan megoldani a problémát.

A végső javítás végül ennek és számos más védelmi mechanizmus kombinációjával el is készült, a hétvégén automatikusan frissítette a LastPass az érintett beépülőket, az internetre kapcsolódó böngészők ezt már le is töltötték-telepítették időközben.

Automatikusan frissült.

A hiba felismerése óta egyébként Ormandy megvizsgálta a népszerűbb böngészős beépülőket és sok helyen visszaköszön a fenti probléma. Komoly biztonsági problémára azonban nem talált, a beépülő működését sikerült megzavarni, eltörni a betöltött oldalt vagy kivételt dobni - ezek pedig nem jelentenek érdemi kockázatot. Az eredeti dokumentációs probléma ettől még fennáll, így Ormandy jelezte, hogy a böngészőgyártókkal is felveszi a kapcsolatot annak érdekében, hogy ez a speciális eset jobb definíciót kapjon, illetve felmerült az is, hogy a window[id] hozzáférését is érdemes korlátozni, ez ugyanis a lapon futó scriptek munkájához nem szükséges.

További részletek a Project Zero leírásában gyakorló JavaScript-fejlesztőknek itt érhető el, a LastPass sterilebb, de a végfelhasználók számára olvashatóbb szövege itt található.

Facebook

Mit gondolsz? Mondd el!

Adatvédelmi okokból az adott hír megosztása előtt mindig aktiválnod kell a gombot! Ezzel a megoldással harmadik fél nem tudja nyomon követni a tevékenységedet a HWSW-n, ez pedig közös érdekünk.
A IT-üzemeltetők világnapján egy teljes security meetup, számos szórakoztató program, és Felméri Péter standupja várja az érdeklődőket az Ankertbe.