Я читал документацию по 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 без фактического выполнения системного вызова. Таким образом, программа может быть обманута и сохранена привилегиями суперпользователя в обстоятельствах, когда на нее можно повлиять, чтобы она сделала опасные вещи, поскольку она фактически не сбросила привилегии.)...