Jakákoli aplikace spuštěná pod aktuálním uživatelem má přístup ke klávesnici, myši, displeji (např. pořízení snímku obrazovky), a to není dobré.
Všichni klienti X11 na ploše mohou vzájemně přistupovat do hloubky, včetně získávání obsahu libovolného okna, jeho změny, zavření jakéhokoli okna, předstírání události kláves a myši libovolnému jinému klientovi, zachycení jakéhokoli vstupního zařízení atd.
Návrh protokolu X11 je založen na myšlence, že všichni klienti jsou DŮVĚRYHODNÍ a budou spolupracovat, ne si navzájem šlapat po špičkách (to druhé zcela narušují moderní aplikace jako Firefox, Chrome nebo Java).
ALE, pokud nainstalujeme programy z oficiálního úložiště (například pro Debian), které pravděpodobně neobsahují keyloggery atd., pak je problém s nebezpečím zjevně přehnaný. Mýlím se?
Programy obsahují chyby, které lze zneužít. Server X11 a knihovny nemusí být aktuální. Například každý klient X11 může selhat X server v aktuální verzi Debianu (Buster 10) prostřednictvím neškodných požadavků Xkb. (To bylo opraveno v upstreamových zdrojích, ale v Debianu to ještě nebylo). Pokud jej dokáže zřítit, pak je zde určitá pravděpodobnost, že je také schopen spustit kód s oprávněními serveru X11 (přístup k hardwaru atd.).
Problémy s laxní autentizací v Xwaylandu (a běžném Xorg Xserveru v Debianu) najdete v poznámkách na konci této odpovědi.
Ano, můžete otevírat aplikace na samostatných serverech (například Xephyr), ale to je nepohodlné, protože neexistuje žádná sdílená schránka. Vytváření schránky založené na souborech tmp je také nepohodlné.
Všimněte si, že pokud neprovedete další kroky, Xephyr
umožňuje jakémukoli místnímu uživateli pro připojení k němu ve výchozím nastavení. Podívejte se na tuto diskuzi.
Vytváření sdílené schránky mezi více X11 servery je zajímavý problém, který si zaslouží vlastní otázky a odpovědi, spíše než smíchat s tímto.
Aplikace běžící na stejném počítači se stejným uživatelským účtem mohou používat ptrace
systémové volání pro vzájemnou modifikaci procesní paměti, takže X11 zde není nejvhodnější útočný prostor.
U aplikací, kterým plně nedůvěřujete, je musíte nejprve spustit s jiným uživatelským ID (jako to dělá Android s aplikacemi od různých výrobců) a můžete použít rozšíření XSECURITY k vygenerování „nedůvěryhodného“ přístupového tokenu pro X server. , kterým je omezen přístup aplikace k X11:
- žádný přístup ke vstupním událostem, které nejsou směrovány do vlastního okna
- žádný přístup k rozšíření XTEST
- žádná průhledná okna
Vstupní události v X11 mají Synthetic
pole, které říká, zda byla vstupní událost vygenerována ze vstupního zařízení nebo odeslána z jiného programu, a přijímající program rozhodne, co udělá se syntetickými událostmi, například xterm
jen je ignoruje. Rozšíření XTEST umožňuje generování non-Synthetic
události ze softwaru pro testovací účely, což je důvod, proč nedůvěryhodní klienti nesmějí toto rozšíření používat.