로부터 find
man 페이지 :
-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.
이것은 무엇을 의미 하는가? 시작 디렉토리에서 실행시 경쟁 조건이 발생하는 이유는 무엇입니까? 그리고 이러한 보안 위험은 어떻게됩니까?
답변
여기 에서 세부 사항을 찾았습니다 .
이
-exec
작업으로 인해 다른 프로그램이 실행됩니다. 당시 고려중인 파일의 이름을 프로그램에 전달합니다. 그런 다음 호출 된 프로그램은 일반적으로 해당 파일에 대한 조치를 수행합니다. 다시 한번, 여기에서 이용 될 수있는 경쟁 조건이 있습니다. 우리는 구체적인 예를 들어find /tmp -path /tmp/umsp/passwd -exec /bin/rm
이 간단한 예에서는 삭제할 파일을 하나만 식별하고 삭제를 호출
/bin/rm
합니다. find가-exec
조치 를 처리해야한다고 결정한 시점과/bin/rm
명령이 실제로 unlink () 시스템 호출을 실행하여 파일 시스템에서 파일을 삭제하는 시점 사이에 시간 간격이 있기 때문에 문제점이 있습니다
. 이 기간 내에 공격자는/tmp/umsp
디렉터리의 이름을 바꾸고에 대한 심볼릭 링크로 바꿀 수 있습니다/etc
./bin/rm
찾은 파일과 동일한 파일에서 작업하고 있는지 확인할 방법이 없습니다 . 일단 심볼릭 링크가 설정되면 공격자는/etc/passwd
파일을 삭제하도록 찾게 되는데 이는 실제로 호출 된 명령이 의도 한 효과가 아닙니다.
누구나이 취약점을 악용 할 가능성이 확실하지 않습니다. 그러나 나는 대답이 있다고 생각합니다!
답변
-exec
위험한 이유 는 사용자가 실행할 프로그램의 전체 이름과 경로를 지정하지 않으면 잠재적으로 잘못된 프로그램을 실행하기 때문입니다.
예:
find /some/path -exec coolprogram
에서 /some/path
, 누군가가 또 다른했다 coolprogram
, 그것은 나쁜 배우에 대한 모든 데이터를 업로드합니다.
그러나 잠깐, 당신은 그것을 실행하지 않아도 ./coolprogram
됩니까? 예, 그러나 일부 사람들은 PATH=.:/bin:whatever
현재 디렉토리에서 프로그램을 실행합니다.
이것은 간단하지만 아마도 어떤 경우에는 위험 할 수 있다고 생각합니다. 0 바이트 cpio
가 잘못된 디렉토리에 있는 문제를 해결 해야했습니다. cpio
디렉토리에서 0 바이트 파일을 실행하는 동안 작동하지 않아 프로그램이 중단되었습니다 .