Innanzitutto, ovviamente, se c'è un bug nel client SSH, potrebbe consentire al server di eseguire il codice lì. Un bug davvero brutto potrebbe anche consentire a un man-in-the-middle di sfruttare il client. Il resto della superficie di attacco è costituito da dove SSH invia i dati che riceve dal server.
Il testo ricevuto tramite la connessione SSH è, nel tuo caso, inviato a un terminale. I terminal analizzano le sequenze di escape: è così che visualizzano i colori, spostano il cursore, ecc. Ci possono essere dei bachi nel parser della sequenza di escape. Inoltre, alcune sequenze di escape possono richiedere cose che vanno oltre il display, come cambiare il titolo del terminale, ridimensionare la finestra o iniettare dati di input (ad esempio un comando per interrogare la posizione del cursore o il titolo della finestra). I terminali moderni disattivano i comandi veramente pericolosi (quelli che causano input iniettati che possono essere impostati da un testo arbitrario attraverso un'altra sequenza di escape). Per ulteriori informazioni su questo argomento, vedi Can "cat -ing "un file può essere un potenziale rischio per la sicurezza? , Come posso proteggermi da questo tipo di abuso negli appunti? e Come evitare gli attacchi della sequenza di escape nei terminali? . La soluzione è verificare che il tuo terminale non consenta sequenze pericolose. Per maggiore sicurezza, invece di aprire un terminale in cui si esegue una shell in cui si esegue ssh
, eseguire ssh
direttamente nel terminale e disabilitare qualsiasi gestione della tastiera che potrebbe avere ( EscapeChar none
nella configurazione del client OpenSSH); in questo modo, anche se un server malintenzionato riesce a iniettare input, non c'è il rischio che venga eseguito come comando di shell sulla tua macchina.
SSH può anche inoltrare le connessioni di rete, consentendo al server di raggiungere il client oltre al terminale. Questo può bypassare una restrizione firewall. Due comuni connessioni di rete inoltrate comportano rischi autonomi. L'inoltro X11 consente al server di accedere al server X locale; questo è praticamente equivalente a dare l'accesso alla shell al server in quanto consente cose come l'iniezione di input in altre applicazioni (una funzione utile per cose come i macro recorder e la remapping degli input basata su window manager, ma manca il corretto firewall). L'inoltro dell'agente SSH consente al server di utilizzare le chiavi private per accedere eventualmente altrove. Quindi, quando ti connetti al server non attendibile, assicurati di non attivare alcun inoltro. Attiva l'inoltro in modo selettivo per i server conosciuti.
Inoltre esiste un'esposizione alla privacy se si invia un nome utente predefinito o un'offerta di chiave pubblica.