SCP má desítky let starou chybu, server může podvrhovat soubory

16. 1. 2019
Doba čtení: 2 minuty

Sdílet

Většina SCP klientů nekontroluje, zda od serveru dostává soubory, které byly skutečné objednány. Kompromitovaný server tak má možnost klientovi přepisovat jeho soubory či měnit přístupová práva.

Finský bezpečnostní analytik Harry Sintonen ze společnosti F-Secure objevil bezpečnostní chybu, která je v SCP klientech nejméně dvě dekády. Všichni běžní SCP klienti dovolí zákeřnému serveru, aby jim podstrkoval libovolné soubory. Nic netušící klient tedy může při kopírování legitimních souborů dostat také nechtěný přílepek, který jej může kompromitovat.

SCP původně vznikl jako zabezpečená varianta protokolu RCP z roku 1983, určenému pro přenos souborů po síti. Pro zajištění bezpečnosti balí SCP svůj provoz do SSH, čímž je zajištěn vysoký stupeň bezpečnosti, pokročilá autentizace obou stran a řada dalších užitečných vlastností.

SCP je možné používat pomocí samostatného příkazu scp, ale protokol je součástí celé řady dalších klientů jako OpenSSH, Putty nebo v populárním WinSCP. Ty také používají pro přenos souborů ve výchozím stavu právě protokol SCP, pokud uživatel explicitně nezvolí přechod na modernější protokol SFTP.

Čerstvé bezpečnostní varování obsahuje informace o čtyřech různých implementačních chybách:

  1. CVE-2018–20685 – SCP klient umožňuje vzdálenému serveru modifikovat práva v cílovém adresáři
  2. CVE-2019–6111 – zákeřný SCP server může přepisovat libovolné soubory v cílovém adresáři u klienta; pokud se navíc použije rekurzivní operace (parametr -r), může server ovlivňovat i podadresáře
  3. CVE-2019–6109 – terminálový výstup na klientské straně je možné ovlivnit pomocí ANSI kódu a ukrýt tak zákeřnou činnost před zraky uživatele
  4. CVE-2019–6110 – podobná chyba

Dohromady to znamená, že když například uživatel stahuje rekurzivně soubory do svého domovského adresáře, server mu může odeslat také vlastní verzi souboru .ssh/authorized_keys a tím si do klienta zajistit přístup pomocí vlastního páru autentizačních klíčů. Stejně tak může při ukládání do domovského adresáře přepsat .bashrc a podstrčit do něj vlastní skript. Možností zneužití je celá řada.

V každém případě je nutné, aby byl server kompromitován nebo aby se útočník postavil mezi server a klienta (útok typu MitM). Proti tomu je ovšem SSH chráněn oboustrannou autentizací veřejných klíčů, takže by nezodpovědný uživatel musel odsouhlasit cizí otisk (fingerprint) a umožnit útočníkovi, aby se za server vydával.

Zásadní je, že uživatel si kvůli další chybě nemůže všimnout nechtěného přenosu, protože server může jednoduše výpisy na terminálu skrýt. Z hlediska uživatele tedy celý přenos proběhl normálně a byly přeneseny jen legitimní soubory. Nechtěná zásilka ale byla doručena.

Potíž je totiž v tom, že klienti nehlídají, zda jim server předává jen skutečně objednané soubory. Jelikož má chyba kořeny už v samotném RCP,  nachází se desítky let ve většině běžně používaných SCP klientů. Situaci přehledně shrnuje následující tabulka:

bitcoin_skoleni

Implementace SCP Verze 1. chyba 2. chyba 3. chyba 4. chyba
OpenSSH SCP <=7.9 ano ano ano ano
PuTTY PSCP všechny ne ne ano ano
WinSCP SCP mode <=5.13 ne ano ne ne

Harry Sintonen problém objevil už v srpnu loňského roku a pracoval postupně na tom, aby byly dostupné opravy pro tyto nejrozšířenější implementace. Situace ovšem zatím není úplně dobrá, pro PuTTY zatím oprava neexistuje, stejně tak ještě problém nevyřešil tým OpenSSH.

Pro OpenSSH ovšem Sintonen napsal vlastní patch, který zajišťuje klienta proti většině pokusů o manipulaci ze strany serveru. Jediný klient, který problém skutečně opravil, je WinSCP ve verzi 5.14. Obecným řešením je přepnutí klienta na protokol SFTP, který je mladší a těmito zranitelnostmi netrpí.

Autor článku

Petr Krčmář pracuje jako šéfredaktor serveru Root.cz. Studoval počítače a média, takže je rozpolcen mezi dva obory. Snaží se dělat obojí, jak nejlépe umí.