어떻게 악의적인 seccomp 필터가 실제로 시스템 호출을 하지 않고 'setuid(2)'를 사용하여 0을 반환하도록 만들 수 있습니까?

어떻게 악의적인 seccomp 필터가 실제로 시스템 호출을 하지 않고 'setuid(2)'를 사용하여 0을 반환하도록 만들 수 있습니까?

나는 데비안 시스템에 관한 문서를 읽고 있었는데 seccomp(2), 아래 문단에서 다음 문장을 우연히 발견했습니다:

setuid(2) 예를 들어 이러한 악의적인 필터는 호출자의 사용자 ID를 0이 아닌 값으로 설정하려고 시도할 때 실제로 시스템 호출을 수행하지 않고 대신 0을 반환하도록 할 수 있습니다 .

seccomp위에서 설명한 내용을 달성하기 위해 필터를 어떻게 남용할 수 있습니까 ?

악성 필터가 를 허용하지 않으면 setuid(2)프로세스가 SIGSYS신호를 수신하고 종료될 가능성이 높으며 syscall은 실행되지 않습니다.

악성 필터가 허용하는 경우 setuid(2)' execve(2)d 프로그램은 사용자의 UID를 올바르게 변경합니다.

내가 무엇을 놓치고 있나요?

man seccomp:

...

그렇지 않으면 SECCOMP_SET_MODE_FILTER 작업이 실패하고 errno에 EACCES가 반환됩니다. 이 요구 사항은 권한이 없는 프로세스가 악성 필터를 적용한 다음 를 사용하여 set-user-ID 또는 기타 권한이 있는 프로그램을 호출하여 execve(2)잠재적으로 해당 프로그램을 손상시킬 수 없도록 보장합니다. (예를 들어 이러한 악의적인 필터는 호출자의 사용자 ID를 0이 아닌 값으로 설정하려고 시도하여 setuid(2) 실제로 시스템 호출을 하지 않고 대신 0을 반환하도록 할 수 있습니다. 따라서 프로그램은 속여서 수퍼유저 권한을 유지하도록 할 수 있습니다. 실제로 권한을 떨어뜨리지 않았기 때문에 위험한 일을 하도록 영향을 미칠 수 있는 상황에서는.)

...

관련 정보