Maybe Go is not the only problem, I see SBCL compiling syscalls too.

Truth is libc is for C and not all programs are written in C nowadays.

Le jeu. 28 nov. 2019 à 21:04, Theo de Raadt <dera...@openbsd.org> a écrit :
>
> Miod Vallat <m...@online.fr> wrote:
>
> > > For dynamic binaries, valid regions are ld.so's text segment, the signal
> > > trampoline, and libc.so's text segment... AND the main program's text.
> > >
> > > Unfortunately our current go build model hasn't followed solaris/macos
> > > approach yet of calling libc stubs, and uses the inappropriate "embed
> > > system calls directly" method, so for now we'll need to authorize the main
> > > program text as well.  A comment in exec_elf.c explains this.
> > >
> > > If go is adapted to call library-based system call stubs on OpenBSD as
> > > well, this problem will go away.  There may be other environments creating
> > > raw system calls. I guess we'll need to find them as time goes by, and
> > > hope in time we can repair those also.
> >
> > Or you could use an ELF note to flag binaries allowed to issue syscalls
> > from their text section: only static binaries (including ld.so) and go
> > binaries would need them.
>
> Imagine a ld.so without the flag.  The kernel starts a userland process 
> running
> there.  So ld.so must be able to issue system calls
>
> Imagine a static binary without the flag.  It would fail.
>
> The kernel can alreayd identify these circumstances, and does not need a flag.
>
> The only special case is libc.so.  We discussed adding a linker option to add
> a note to libc.  And then build tooling to add the flag for libc.  And then 
> ld.so
> identification of this note.  But does it actually matter which way this is 
> done?
>
> I fear the option would be abused for other purposes.  In the future,
> why would we want programs doing system calls from other segments?  Are
> there any legitimate compelling reasons to avoid calling the libc stubs?
> I don't believe so.  Especially if those segments are in network facing
> programs and/or generated on the fly.  At worst a nasty JIT can generate code
> to call & of libc syscall(2) stub with SYS_* symbolic names.  That approach
> remains simple and workable for the developer, but somewhat more difficult for
> an attacker who not know the relevant locations.
>


-- 
 Thomas de Grivel
 kmx.io

Reply via email to