|
Message-ID: <CAGXu5jJ80=ujcXw_QUPy5bbq8vse=5eDviH4Px_ja6=XTuDuBg@mail.gmail.com> Date: Thu, 22 Jun 2017 21:27:10 -0700 From: Kees Cook <keescook@...omium.org> To: Solar Designer <solar@...nwall.com> Cc: "kernel-hardening@...ts.openwall.com" <kernel-hardening@...ts.openwall.com> Subject: Re: symlink/hardlink/FIFO restrictions On Wed, Jun 7, 2017 at 5:06 AM, Solar Designer <solar@...nwall.com> wrote: > On Tue, Jun 06, 2017 at 09:10:43PM -0700, Kees Cook wrote: >> On Tue, Jun 6, 2017 at 2:55 PM, Solar Designer <solar@...nwall.com> wrote: >> > The hardlink restrictions differ between -ow vs. grsecurity and upstream. >> > In -ow, I had the check in vfs_link(). In grsecurity (oldest I checked >> > now is grsecurity-2.1.11-2.4.35-200708071800), it's in sys_link() and >> > later in sys_linkat(), which is also called by sys_link(). Upstream >> > also has it right in the linkat() syscall function. Maybe there were >> > good reasons not to do it in vfs_link(), but I am unaware of those. >> > We need to know what currently happens and what we'd like to happen for >> > other callers to vfs_link(), such as kernel nfsd and CRIU - do we want >> > the restrictions to apply there? Maybe for some of those other callers, >> > but not for all? Do the same checks work correctly when called from >> > those other contexts or do we need revised checks there? >> >> Hm, yeah, I don't remember sys_linkat() vs vfs_link() coming up during >> review, but it's been a while. The nfsd thing is interesting... would >> it be right to refuse a client's linkat based on the server's link >> restriction sysctl? Hmm. > > Probably it would, because otherwise we have a bypass in case the > server's filesystem is or will be later also mounted elsewhere. > >> > As to the FIFO restrictions, those don't appear to have been merged >> > upstream yet. >> >> Do the FIFO restrictions exist in -ow too? > > Yes, and they pre-date grsecurity too. > >> I wonder what enabling that protection might break... > > I was adding notes on what broke to the -ow patch FAQ, but it lists > nothing for the FIFOs. So apparently nothing of note broke, maybe > because the restrictions were limited to what was required (e.g., didn't > apply to FIFOs opened without O_CREAT). > > +Restricted FIFOs in /tmp > +CONFIG_HARDEN_FIFO > + In addition to restricting links, you might also want to restrict > + writes into untrusted FIFOs (named pipes), to make data spoofing > + attacks harder. Enabling this option disallows writing into FIFOs > + not owned by the user in +t directories, unless the owner is the > + same as that of the directory or the FIFO is opened without the > + O_CREAT flag. > > @@ -1084,6 +1126,32 @@ do_last: > /* > * It already exists. > */ > + > +#ifdef CONFIG_HARDEN_FIFO > + /* > + * Don't write to FIFOs that we don't own in +t directories, > + * unless the FIFO is owned by the owner of the directory. > + * > + * Do this check early while we hold the directory. > + */ > + inode = dentry->d_inode; > + if (S_ISFIFO(inode->i_mode) && !(flag & O_EXCL) && > + (dir->d_inode->i_mode & S_ISVTX) && > + inode->i_uid != dir->d_inode->i_uid && > + current->fsuid != inode->i_uid) { > + up(&dir->d_inode->i_sem); > + if (!permission(inode, acc_mode)) > + security_alert("denied writing FIFO of %d.%d " > + "by UID %d, EUID %d, process %s:%d", > + "writes into a FIFO denied", > + inode->i_uid, inode->i_gid, > + current->uid, current->euid, > + current->comm, current->pid); > + error = -EACCES; > + goto exit_dput; > + } > +#endif > > The intent was to detect unintentional writes to FIFOs, where the > program expected to create a regular file with this very same call. > > An argument against restricting this is that similar attacks are also > possible via attacker-created regular files, especially now that we have > inotify, although FIFOs made the attacks particularly simple and > reliable (no need to win a race). [trying to get back to older emails...] Looks reasonable. Do you want to put together a patch for this? It seems like it'd be a useful addition to complement the link restrictions. -Kees -- Kees Cook Pixel Security
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.