findの{}代替パターンが注入攻撃に弱いのはなぜですか? [コピー]

findの{}代替パターンが注入攻撃に弱いのはなぜですか? [コピー]

私の答えの修正についてもっと理解しようとしています。

https://unix.stackexchange.com/revisions/510388/5

cd "{}"findコマンドのコンテキスト内で実行すると、注入攻撃の脆弱性はどのように発生しますか?

注:脆弱性を解決するための変更点は次のとおりです。

diff --git a/command b/command
index 26488d0..fed4c07 100644
--- a/command
+++ b/command
@@ -1 +1 @@
-find . -type d -exec sh -c 'cd {} && echo "Spawning a shell in $PWD..." && sh' \;
+find . -type d -exec sh -c 'cd "$1" && echo "Spawning a shell in $PWD..." && sh' sh {} \;

答え1

ディレクトリ名は中括弧のある場所に配置され、シェルによって制限されmkdir '$(reboot)'ますfind。それから - または想像したい他のコマンドをsh実行します。攻撃者が非常に狡猾で有効なディレクトリ名をエコーし​​ない限り、コマンドは失敗する可能性がありますが、それに関係なく被害はすでに発生していますcd $(reboot)cdルートとして厳しくないテストを実行するには、次のようにします。

$ mkdir '$(touch .evil_file; echo directory-name)'`

以下の結果が出力されます。

something
sh: line 0: cd: ./directory-name: No such file or directory

...そして:

$ ls -a
.  ..  .evil_file  $(touch .evil_file; echo directory-name)

関連情報