Přeskočit na hlavní obsah

Co je OAuth a OpenID, je react bezpečný, co je špatně s Copilotem a další

Znáte rozdíl mezi OAuth a OpenID? Používáte react (ne)bezpečně? Jaké nebezpečí vám hrozí, pokud se rozhodnete použít GitHub Copilot? Flipper Zero, Cloudflare breach...


🏆 Téma: OAuth 2.0 a OpenID Connect

OAuth 2.0

  • Standard pro online autorizaci (autorizační protokol, nikoli autentizační).
  • Umožňuje aplikaci přístup ke zdrojům jiné aplikace jménem uživatele.
  • Dává přístup a omezuje akce, které může aplikace dělat jménem uživatele bez sdílení uživatelských credentials.
  • Funguje na bázi access tokenů, které reprezentují přístup ke zdrojům jménem koncového uživatele.
  • Formát tokenu není definován (často se používá JWT), ale obsahuje datum expirace.
  • Po vypršení tokenu je možné si zažádat o nový prostřednictvím refresh tokenu, který je vytvořen spolu s access tokenem a má delší dobu expirace.
  • Definuje 4 role:
    • Vlastník zdroje: uživatel, nebo systém, který vlastní data a může k nim udělit přístup
    • Klient: systém, který požaduje přístup k datům (webová aplikace, mobilní aplikace…)
    • Autorizační server: server, který přijímá requesty od klienta a vystavuje access tokeny
    • Server se zdroji: chrání uživatelské zdroje a přijímá requesty na přístup ke zdrojům od klienta
  • Definuje scopes, které specifikují, ke kterým zdrojům je přístup udělen.
  • Definuje grant type - sadu kroků, které musí klient udělat, aby získat výsledný přístup; nejčastější grant types:
    • Autorizační kód: autorizační server klientovi vrátí jednorázový kód, který klient následně vymění za access token (vhodné pro webové a mobilní aplikace)
    • Klientské credentials: klient se identifikuje pomocí client id a client secret (vhodné pro automatizované procesy)
    • Refresh token: výměna refresh tokenu za access token
  • Chcete vědět, jak zneužít OAuth 2.0 díky XSS? Toto téma přednáším ve firmách, napište mi.

Jak to funguje

  • Před samotným použitím OAuth si musí klient vytvořit client id a client secret, které představují credentials, pomocí kterých se bude identifikovat - o to se stará autorizační server.
  • Klient odešle autorizační request na autorizační server. K tomu potřebuje client id, client secret a scopes, kterými řekne, ke kterým zdrojům chce přístup, a redirect URI, na kterou se má poslat vygenerovaný token nebo kód.
  • Autorizační server autorizuje klienta a komunikuje se serverem ohledně vytvoření přístupu ke zdrojům.
  • Autorizační server pošle autorizační kód, nebo access token a refresh token (v závislosti na grant type) na redirect URI.
  • Klient přistupuje ke zdrojům na serveru se zdroji pomocí vygenerovaného access tokenu.

OpenID Connect (OIDC)

  • Identity protokol, který využívá autorizační a autentizační mechanismus OAuth 2.0.
  • Narozdíl od OAuth 2.0 ověřuje identitu uživatele a poskytuje základní identifikační vrstvu.
  • Může sdílet uživatelské údaje jako je jméno, příjmení, e-mail, profilovou fotku a další.
  • Protokol předchází sdílení uživatelských credentials.
  • Jelikož je postavený nad OAuth 2.0, tak spolu s access tokenem vrací ještě ID token, který zapouzdřuje uživatelská data (claims).
  • ID token je často podepsaný a šifrovaný (HTTPS) pro zvýšení zabezpečení soukromí.
  • OpenID provider může být například Facebook, Google a další.

🎓 Učíme se společně

Co jsme se dozvěděli z přednášek, školení, čtení knih a dalších aktivit?

Let me show you how React applications get hacked in the real-world

  • Speaker: Liran Tal
  • React je skoro bezpečný by default (= stále může dojít k XSS).
  • React encoduje výstup, tzn. že <script> se vyrenderuje jako &lt;script&gt; (nedojde ke spuštění, ale k výpisu).
  • To neplatí pro HTML atributy, jako je např. href - <a href="{data.link}">, kde data.link obsahuje javascript:alert(1) Tady se kód spustí a zobrazí se alert, žádný encoding se nekoná.
    • Nevkládat uživatelský vstup do atributů.
    • Neimplementovat deny / black list (takřka vždy se na něco zapomene).
  • XSS zranitelnosti nemusí nutně souviset s kódem, který jsme napsali - může se vyskytovat v nějakém z balíčků, který jsme v projektu použili.
    • Kontrolovat zdraví balíčků pomocí Snyk Advisor nástroje.
    • Skenovat bezpečnost závislostí pomocí npm audit a dalších.
  • Nepoužívat funkce typu dangerouslySetInnerHTML()
    • ! To, že je nepoužíváme, neznamená, že je nepoužívá někdo jiný v balíčcích, se kterými pracujeme!
  • Přečtěte si víc o XSS v našem předchozím newsletteru.

What’s wrong with Copilot?

  • GitHub Copilot je produkt vytvořený Microsoftem, který vývojářům napovídá při programování.
  • Díky velké databázi GitHubu bylo možné takovou AI natrénovat.
  • Copilot vzbuzuje spoustu právních otázek týkajících se jak jeho tréninku, tak používání.
  • Zdrojový kód může být vystaven pod různým typem licencí - jako uživatel musím přijmout pravidla, která licence stanovuje.
  • Copilot licence při trénování AI nedodržuje a ohání se tím, že použití open source repozitářů pro trénink AI je fér. Nicméně nejde o otázku férovosti, ale práva.
  • Pokud vývojář použije kód vygenerovaný Copilotem, jaká je jeho licence?
  • Microsoft tvrdí, že Copilot je pouze nástroj pro napovídání, žádná licence tu tedy není a pokud se kód rozhodneme použít, je to náš problém (za bezpečnost atd. si ručíme sami).
  • Existuje však spousta případů, kdy Copilot nebyl pouhým nástrojem pro napovídání, ale doslova zkopíroval kód z repozitáře, který je pod restriktivní licencí.
    • Může se snadno stát, že akceptováním Copilot kódu porušíte nejen licenci, ale taky smlouvu se svým zaměstnavatelem nebo dodavatelem (osobně mám ve smlouvách často zákaz používání copy-left licencí).

📰 Co je nového

  1. SSRF v produktech Ivanti VPN je masově zneužívána.
    • Útoky využívají SSRF chybu v SAML komponentě aplikace Ivanti.
    • To umožňuje získání přístupu k jinak omezeným zdrojům bez přihlášení.
    • Problém souvisí s neaktualizovanou open source knihovnou, která nebyla aktualizována od června 2023.
    • Ivanti však neaktualizovala mnohem víc knihoven, což otvírá dveře dalším útokům.
    • Celkem bylo odhaleno přes 28 000 instancí systému ve 145 zemích - 610 z nich bylo napadeno.
  2. Cloudflare breach: hackeři získali přístup ke zdrojovému kódu a interním dokumentům.
    • Cloudflare se stal terčem mezinárodního útoku.
    • Útočník ukradl přihlašovací údaje a přihlásil se k Atlassian serveru a nakonec získal přístup k části dokumentace a zdrojovému kódu.
    • V návaznosti na to Cloudflare provedl rozsáhlou forenzní analýzu a rotoval přes 5000 různých credentials.
    • Útočník podle všeho exfiltroval 76 ze 120 repozitářů, které souvisely s backupy, konfigurací sítě, správou Cloudflare identit, remote accessem a použitím Terraformu a Kubernetes.
    • Některé repozitáře obsahovali šifrované credentials.
  3. Flipper Zero snadno rozbije iPhone.
    • Flipper Zero je hacking nástroj navržený pro security researchery, které umožňuje nahrát a reprodukovat různé bezdrátové signály (umožňuje například přečíst detaily kreditní karty přes oblečení).
    • Flipper Zero dokáže posílat nekonečné množství zpráv (pop-ups), které iPhone žádají o připojení přes Bluetooth.
    • Tato oznámení dokáží iPhone zahltit a učinit jej nepoužitelným.
    • Útok byl proveden na iOS verze 17 a jedinou možností, jak útoku předejít, je mít vypnutý bluetooth.

😂 Závěrečný ftípek: Why did the database administrator slice a tree stump in half? He needed a binary log.