Каким образом вредоносный фильтр seccomp может привести к тому, что попытка использования `setuid(2)` вернет 0, фактически не выполняя системный вызов?

Каким образом вредоносный фильтр seccomp может привести к тому, что попытка использования `setuid(2)` вернет 0, фактически не выполняя системный вызов?

Я читал документацию по seccomp(2)своей системе Debian и наткнулся на следующее предложение из приведенного ниже абзаца:

Такой вредоносный фильтр может, например, привести к тому, что попытка setuid(2) установить идентификаторы пользователя вызывающего абонента на ненулевые значения вместо этого вернет 0 без фактического выполнения системного вызова.

Как можно seccompзлоупотреблять фильтрами, чтобы добиться описанного выше результата?

Если вредоносный фильтр запрещает setuid(2), то процесс, скорее всего, получит SIGSYSсигнал и завершится, а системный вызов не будет выполнен.

Если вредоносный фильтр позволяет setuid(2), то execve(2)программа корректно изменит UID пользователя.

Что я упускаю?

man seccomp:

...

В противном случае операция SECCOMP_SET_MODE_FILTER завершится ошибкой и вернет EACCES в errno. Это требование гарантирует, что непривилегированный процесс не сможет применить вредоносный фильтр, а затем вызвать set-user-ID или другую привилегированную программу с помощью execve(2), тем самым потенциально скомпрометировав эту программу. (Такой вредоносный фильтр может, например, привести к тому, что попытка использовать setuid(2) для установки идентификаторов пользователей вызывающей стороны в ненулевые значения вместо этого вернет 0 без фактического выполнения системного вызова. Таким образом, программа может быть обманута и сохранена привилегиями суперпользователя в обстоятельствах, когда на нее можно повлиять, чтобы она сделала опасные вещи, поскольку она фактически не сбросила привилегии.)

...

Связанный контент