Thread (80 messages) 80 messages, 12 authors, 2024-08-09

Re: [RFC PATCH v19 1/5] exec: Add a new AT_CHECK flag to execveat(2)

From: Kees Cook <kees@kernel.org>
Date: 2024-07-08 19:38:20
Also in: linux-api, linux-fsdevel, linux-integrity, lkml

On Fri, Jul 05, 2024 at 07:53:10PM +0200, Mickaël Salaün wrote:
On Thu, Jul 04, 2024 at 05:04:03PM -0700, Kees Cook wrote:
quoted
On Thu, Jul 04, 2024 at 09:01:33PM +0200, Mickaël Salaün wrote:
quoted
Add a new AT_CHECK flag to execveat(2) to check if a file would be
allowed for execution.  The main use case is for script interpreters and
dynamic linkers to check execution permission according to the kernel's
security policy. Another use case is to add context to access logs e.g.,
which script (instead of interpreter) accessed a file.  As any
executable code, scripts could also use this check [1].

This is different than faccessat(2) which only checks file access
rights, but not the full context e.g. mount point's noexec, stack limit,
and all potential LSM extra checks (e.g. argv, envp, credentials).
Since the use of AT_CHECK follows the exact kernel semantic as for a
real execution, user space gets the same error codes.
Nice! I much prefer this method of going through the exec machinery so
we always have a single code path for these kinds of checks.
quoted
Because AT_CHECK is dedicated to user space interpreters, it doesn't
make sense for the kernel to parse the checked files, look for
interpreters known to the kernel (e.g. ELF, shebang), and return ENOEXEC
if the format is unknown.  Because of that, security_bprm_check() is
never called when AT_CHECK is used.
I'd like some additional comments in the code that reminds us that
access control checks have finished past a certain point.
Where in the code? Just before the bprm->is_check assignment?
Yeah, that's what I was thinking.

-- 
Kees Cook
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help