procmailを介して開始するbashスクリプトがあります。Procmailは、bashスクリプトへの引数として、電子メールの件名とfromフィールドを渡します。これらの値はどのような方法でもサニタイズされていないため、誰かが利用できるbashのインジェクションの脆弱性があるかどうか、もしそうなら、これらから保護するために私ができることを見つけようとしています。何が起こっているのかを説明するためのサンプルコードを次に示します。
#!/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
このbashスクリプトは、次のような.procmailrcスクリプトを使用してprocmailによって呼び出されます。
:0
* ^From:\s*\/.*
{
FROM = "$MATCH"
}
:0
* ^Subject:\s*\/.*
{
SUBJECT = "$MATCH"
}
:0 c:
* ^To:.*@example.com
| /home/john_doe/examplescript.bash "$FROM" "$SUBJECT"
インジェクションの脆弱性について疑問に思っている2つの領域は、スクリプトのインスタンス化です。
/home/john_doe/examplescript.bash "$FROM" "$SUBJECT"
スクリプト内の変数の使用法。
/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
興味があれば、この質問を思いついた実際のユースケースを次に示します。