私の答えの修正についてもっと理解しようとしています。
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)