È risaputo che un terminale tende a fidarsi delle cose che vengono stampate attraverso lo stdout / stderr, facendo in modo che i dati controllati dagli hacker vengano trasmessi al terminale a azione rischiosa . Sta usando cat -v
un modo efficace per disinfettare i dati non fidati che verranno inviati al terminale? Il mio modello di minaccia presuppone che il mio sottosistema di emulazione di terminale, multiplexer terminale o VT di Linux possa essere vulnerabile all'esecuzione di codice arbitrario se viene eseguito per stampare dati dannosi. I dati controllati dagli attaccanti possono provenire da fonti esterne, ad esempio da un sito Web, o da un utente minore, ad esempio quando si visualizza un file come root che è di proprietà e scrivibile da un utente minore e potenzialmente compromesso.
Alcuni esempi usano:
cat -v /home/lesseruser/evil.txt
curl -I example.com | cat -v
curl -s example.com/evil.txt | cat -v
telnet 198.51.100.98 23 | cat -v
Dalla sezione 3.1 della pagina Info GNU coreutils:
-v
--show-nonprinting
Display control characters except for LFD and TAB using ^ notation
and precede characters that have the high bit set with M-.
Dal codice sorgente per src/cat.c
, in coreutils versione 8.28:
if (show_nonprinting)
{
while (true)
{
if (ch >= 32)
{
if (ch < 127)
*bpout++ = ch;
else if (ch == 127)
{
*bpout++ = '^';
*bpout++ = '?';
}
else
{
*bpout++ = 'M';
*bpout++ = '-';
if (ch >= 128 + 32)
{
if (ch < 128 + 127)
*bpout++ = ch - 128;
else
{
*bpout++ = '^';
*bpout++ = '?';
}
}
else
{
*bpout++ = '^';
*bpout++ = ch - 128 + 64;
}
}
}
else if (ch == '\t' && !show_tabs)
*bpout++ = '\t';
else if (ch == '\n')
{
newlines = -1;
break;
}
else
{
*bpout++ = '^';
*bpout++ = ch + 64;
}
ch = *bpin++;
}
}
Sta utilizzando cat -v
per disinfettare l'input non attendibile prima di stampare utile per il mio modello di minaccia?