~에서find
매뉴얼 페이지:
-exec command ; There are unavoidable security problems surrounding use of the -exec action; you should use the -execdir option instead. -execdir command {} + Like -exec, but the specified command is run from the subdirectory containing the matched file, which is not normally the directory in which you started find. This a much more secure method for invoking commands, as it avoids race conditions during resolution of the paths to the matched files.
무슨 뜻이에요? 시작 디렉터리에서 실행하면 경쟁 조건이 발생하는 이유는 무엇입니까? 이러한 보안 위험은 어떻습니까?
답변1
세부정보를 찾았습니다.여기:
이
-exec
작업으로 인해 다른 프로그램이 실행됩니다. 고려 중인 파일 이름을 프로그램에 전달합니다. 그런 다음 호출된 프로그램은 일반적으로 파일에 대해 일부 작업을 수행합니다. 여기서도 악용될 수 있는 경쟁 조건이 있습니다. 명령을 예로 들어보자find /tmp -path /tmp/umsp/passwd -exec /bin/rm
이 간단한 예에서는 삭제할 파일을 식별하고
/bin/rm
삭제를 호출합니다. find가 작업을 처리해야 한다고 결정한 시점 과 명령이 실제로 파일 시스템에서 파일을 제거하기 위해 unlink() 시스템 호출을 실행하는-exec
시점 사이에 시간 지연이 있기 때문에 문제가 발생합니다./bin/rm
이 시간 동안 공격자는 디렉터리/tmp/umsp
이름 을/etc
./bin/rm
심볼릭 링크가 설정되면 공격자는 find가/etc/passwd
실제로 호출된 명령의 의도된 효과가 아닌 파일 삭제를 유발하도록 설득할 수 있습니다.
누군가가 이것을 악용할 가능성이 얼마나 되는지 모르겠지만 대답은 거기에 있는 것 같습니다.
답변2
위험한 이유 -exec
는 사용자가 실행하려는 프로그램의 전체 이름과 경로를 지정하지 않으면 잘못된 프로그램이 실행될 수 있기 때문이라고 생각합니다.
예:
find /some/path -exec coolprogram
에서 /some/path
누군가가 또 다른 것을 만들어 coolprogram
모든 데이터를 나쁜 사람에게 업로드했습니다.
그런데 잠깐만요, 구현할 필요가 없다고요 ./coolprogram
? 예, 하지만 일부 사람들은 이를 가지고 PATH=.:/bin:whatever
있으며 현재 디렉토리에서 프로그램을 실행합니다.
이것은 단순할 수도 있지만 어떤 상황에서는 위험할 수도 있다고 생각합니다. 한번은 cpio
0바이트가 잘못된 디렉토리에 있는 문제를 해결해야 했습니다. cpio
디렉터리에서 0바이트 파일을 실행할 때 작동하지 않기 때문에 프로그램이 충돌하게 됩니다 .