Che cosa, se del caso, le vulnerabilità di iniezione ci sono in bash e come posso proteggere contro di loro?

StackOverflow https://stackoverflow.com/questions/4587509

  •  14-10-2019
  •  | 
  •  

Domanda

Ho uno script bash che sto dando il via via procmail. Procmail passa nel Oggetto e dal da una e-mail come argomenti allo script bash. Dal momento che questi valori sono unsanitized in alcun modo, sto cercando di capire se ci sono vulnerabilità di iniezione in bash che qualcuno possa sfruttare e, se sì che cosa posso fare per la protezione contro questi. Ecco alcuni esempi di codice per illustrare quello che sta succedendo:

#!/bin/bash
/usr/sbin/sendmail -t <<EOF
From: "myhost Administrator" <admin@myhost.example.com>
To: john_doe@gmail.com
Subject: An email subject

You've received a new email.
It has a subject of "$2"
It was sent from "$1".
EOF

Questo script bash sarebbe stato chiamato da procmail con uno script .procmailrc come questo:

:0
* ^From:\s*\/.*
{
 FROM = "$MATCH"
}

:0
* ^Subject:\s*\/.*
{
 SUBJECT = "$MATCH"
}

:0 c:
* ^To:.*@example.com
| /home/john_doe/examplescript.bash "$FROM" "$SUBJECT"

Le due aree che sto chiedendo circa le vulnerabilità ad iniezione per sono nella esemplificazione dello script:

/home/john_doe/examplescript.bash "$FROM" "$SUBJECT"

e l'utilizzo delle variabili nello script.

/usr/sbin/sendmail -t <<EOF
From: "myhost Administrator" <admin@myhost.example.com>
To: john_doe@gmail.com
Subject: An email subject

You've received a new email.
It has a subject of "$2"
It was sent from "$1".
EOF

Se la vostra curiosità, qui è il caso applicativo concreto che ha portato a questa domanda in mente

È stato utile?

Soluzione

Per evitare i problemi di iniezione, si potrebbe anche solo tubo di tutti i messaggi all'indirizzo a cui tieni attraverso uno script che legge il messaggio di fuori di stdin e analizza nativamente le intestazioni che ti interessano.

È quindi possibile utilizzare le librerie disponibili nel linguaggio di scripting si è scelto di parlare SMTP al server di posta in esecuzione a livello locale.

In questo modo, non c'è l'esecuzione di comandi, e non c'è bisogno di preoccuparsi di ingresso unsanitized utilizzati come argomenti ad un programma.

Altri suggerimenti

Non sono un esperto di sicurezza, ma esistono diverse vulnerabilità di iniezione in qualsiasi input dell'utente non sterilizzate - soprattutto se si sta inviando che l'input grezzo ai comandi di sistema che possono avere un accesso privilegiato. Verificare sempre il vostro input prima di farlo.

Controllare $1 e $2 per assicurarsi che essi contengono solo caratteri stampabili e sono una ragionevole durata, come meno di 1000 caratteri, prima di mandarli via al sistema di posta.

che non è troppo difficile da fare, e ti impedisce di essere colpiti da qualche sconosciuta exploit.

Una delle cose che mi piace di Perl è il Modalità macchia che ti impedisce di fare le cose come questo a meno che non hai pulito il backup dei dati prima.

Lo script di shell di per sé è abbastanza sicuro. La parte più vulnerabile di una posta è l'intestazione, e non si consente al mittente di posta di cambiare qualcosa in esso.

L'unico modo che vedo nello script è che qualcuno potrebbe passare un puntino su una singola linea, che finirebbe la posta prematuramente. E ci può essere il caso di incorporare allegati utilizzando UUENCODE in questo modo:

Subject: subject
From: sender@example.com
To: receiver@example.com

text line 1
text line 2

begin 644 file-containing-abc
$86)C"G]_
`
end

Sono preoccupato per la linea nella .procmailrc, dal momento che non conosco le regole di quoting. Questo potrebbe essere un punto in cui un utente malintenzionato potrebbe iniettare codice, quindi è necessario cercare le regole nel manuale e testarli per essere sicuri. Alcuni personaggi si dovrebbe prova sono $, ", \, ritorni a capo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top