Implicazioni sulla sicurezza di Suprocess in esecuzione con una shell attiva contro nessuna shell

2

Quando eseguiamo un sottoprocesso come segue:

sub_ret = subprocess.Popen (args, stdout = subprocess.PIPE, shell = True)

Questo comporta un rischio per la sicurezza poiché consente agli utenti malintenzionati di iniettare comandi tramite il parametro args.

Sarebbe più sicuro usare la shell come falsa? Ad esempio:

sub_ret = subprocess.Popen (args, stdout = subprocess.PIPE, shell = False)

O anche questo rappresenterebbe un rischio per la sicurezza?

    
posta Nitin_Ramesh 28.06.2017 - 06:09
fonte

1 risposta

3

La principale differenza è il modo in cui costruisci i tuoi comandi:

subprocess.Popen("ls -l /tmp", shell=True)

vs

subprocess.Popen(['ls', '-l','/tmp'])

Il primo esempio è una stringa e funziona con shell impostato su true, il secondo esempio è senza. Ciò richiede che ciascuna parte del comando venga passata come elemento separato nell'array. Il pericolo è quando accetti parte del comando come input da una fonte non attendibile.

Ad esempio se si accetta una parte del comando da un utente, nel primo esempio può letteralmente digitare qualsiasi comando che desidera, mentre nel secondo esempio può solo definire su parametro o destinazione. L'aggiunta di ulteriori comandi non sarà possibile in quanto il sottoprocesso avrà esito negativo (a patto che non si costruisca l'array in base all'input dell'utente, ma si accetti solo un argomento per una posizione specifica).

    
risposta data 28.06.2017 - 12:19
fonte

Leggi altre domande sui tag