Hrošč v konfiguraciji X strežnika omogoča odklepanje brez gesla

Mandi

21. jan 2012 ob 19:59:45

Francoski bloger "Gu1" je prijavil zoprno napako v konfiguraciji X strežnika verzije 1.11 ali več, ki omogoča odklep zaklenjenega zaslona (xscreensaver) s pritiskom na tipke ctrl-alt-* (zvezdica na numeričnem delu tipkovnice), brez poznavanja gesla od trenutnega ali korenskega uporabnika.

Napaka potrjeno deluje na Fedori 16, unstable različici Debiana, Arch Linux, Gentooja oz. praktično na vseh distribucijah, ki uporabljajo sveže paketke. Trenutni (11.10 Oneiric) in prihajajoči (12.04 Precise) Ubuntu sicer ostajata na 1.10, in tudi mi napake nismo uspeli reproducirati na tem sistemu. 1.11 je sicer izšla lani konec avgusta.

Gu1 je še malo povohljal naokoli (kar je zaradi odprtokodne narave programja v celoti mogoče, dovoljeno in celo zaželeno) in našel vzrok. Razvijalci grafičnega strežnika X so dolgo nazaj vanj vgradili funkcijo AllowClosedownGrabs, ki omogoča ubitje programa, ki si je prisvojil tipkovnico in miš -- prikladno, če se tak program med razvojem ali celo normalno uporabo sesuje. Tipični kandidati so prav window oz. desktop managerji, wine igre in podobno, seveda pa zadeva tudi ohranjevalnike zaslona, ki rabijo za uspešen zaklep sistema dobiti ekskluziven dostop vhodnih naprav. V normalnih pogojih je ta opcija že več let izklopljena, a se je v 1.11-ki zaradi drugačne konfiguracije knjižnice xkb vklopila nazaj. Fedora je že objavila popravek, uporabniki ostalih distribucij pa si jo lahko izklopite v xorg.conf, odsek ServerFlags:


$ cat xorg.conf
Section "ServerFlags"
    Option "AllowDeactivateGrabs" "false"
    Option "AllowClosedownGrabs" "false"
EndSection

$ man xorg.conf
Option "AllowDeactivateGrabs" "boolean"
    This option enables the use of the
    Ctrl+Alt+Keypad-Divide key sequence to deactivate any
    active keyboard and mouse grabs. Default: off.

Option "AllowClosedownGrabs" "boolean"
    This option enables the use of the Ctrl+Alt+Keypad-Multiply key
    sequence to kill clients with an active keyboard or mouse grab
    as well as killing any application that may have locked the
    server, normally using the XGrabServer(3x) Xlib function.
    Default: off.
    *Note* that the options AllowDeactivateGrabs and
    AllowClosedownGrabs will allow users to remove the grab used
    by screen saver/locker programs. An API was written to such
    cases. If you enable this option, make sure your screen
    saver/locker is updated.

Option “DontZap” "boolean"
    This disallows the use of the Terminate_Server XKB action (usu‐
    ally on Ctrl+Alt+Backspace, depending on XKB options). This
    action is normally used to terminate the Xorg server. When this
    option is enabled, the action has no effect. Default: off.

Dolgoročna rešitev je seveda popravek za xscreensaver. Avtorji X strežnika so njegove programerje posebej opozorili na varnostne implikacije od AllowClosedownGrabs in jim celo ponudili poseben API, preko katerega lahko ctrl-alt-* preprosto ignorirajo (podobno kot lahko C koda ignorira KILL/TERM/HUP in druge signale). Žal to nikoli ni bilo izvedeno.

Uporabniki, ki imate občasne težave z neodzivnimi X aplikaciji (zlasti wine ali druge celozaslonske igre) boste morda hoteli vklopiti te opcije. Če ne drugega, bo Option "DontZap" "false" omogočil, da ponovno zaženete grafični vmesnik ne glede na vse. Sicer še vedno obstaja možnost prehoda v tekstovni terminal (ctrl-alt-f1) in poboj problematične aplikacije od tam, oz. če še to ne dela, dostop preko ssh-ja. S tem da je treba povedati, da Ubuntu in še nekatere druge distribucije po privzetem več ne vključujejo ssh strežnika.