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)

관련 정보