惡意 seccomp 過濾器如何導致嘗試使用“setuid(2)”返回 0,而不實際進行系統呼叫?

惡意 seccomp 過濾器如何導致嘗試使用“setuid(2)”返回 0,而不實際進行系統呼叫?

我正在閱讀我的 Debian 系統上的文檔seccomp(2),並偶然發現了以下段落中的以下句子:

例如,此類惡意過濾器可能會導致嘗試將setuid(2) 呼叫者的使用者 ID 設為非零值,而不是實際進行系統呼叫而傳回 0。

如何seccomp濫用過濾器來實現上述目的?

如果惡意過濾器不允許setuid(2),則進程可能會收到SIGSYS訊號並終止,並且系統呼叫將不會執行。

如果惡意過濾器允許setuid(2)execve(2)d 程式將正確變更使用者的 UID。

我缺什麼?

man seccomp

否則,SECCOMP_SET_MODE_FILTER 操作將會失敗並在 errno 中傳回 EACCES。此要求可確保非特權程序無法套用惡意過濾器,然後使用 呼叫 set-user-ID 或其他特權程序execve(2),從而可能危及該程序。 (例如,此類惡意過濾器可能會導致嘗試將 setuid(2) 呼叫者的使用者 ID 設為非零值,而不是傳回 0,而不是實際進行系統呼叫。因此,程式可能會被欺騙以保留超級使用者權限在可能影響它做危險事情的情況下,因為它實際上並沒有放棄特權。

相關內容