News for hackers. Stuff that matters.
Re:I Built an Ld_preload Worm by timtzm on Monday April 29, 2024 @10:06PM (#40206520)
I still want dynamic linking, but only a few trusted library files would be allowed to make system calls. Like libc. Sorry but golang would have to change to use libc.

This breaks the ABI, but it breaks it for naughty programs the most.

Re:I Built an Ld_preload Worm by saagarjha on Monday April 29, 2024 @10:48PM (#40206749)
OpenBSD does this; it’s not very useful unless you have strong CFI to prevent people from doing a return-oriented attack into those libraries that are in your address space. And also note that there is a lot that you can without system calls to mess with stuff :)
Re:I Built an Ld_preload Worm by jdsalaro on Tuesday April 30, 2024 @02:58AM (#40208008)
> CFI

They're referring to Control Flow Integrity [1]

[1] https://en.m.wikipedia.org/wiki/Control-flow_integrity

Re:I Built an Ld_preload Worm by jiveturkey on Monday April 29, 2024 @10:12PM (#40206562)
I'm not sure how it's relevant exactly to TFA. The mechanism of propagation is an existing feature of libdl that uses an environment variable. With this worm, the loader still runs exactly as before, from libc and libdl.

As to restricting syscalls from certain calling libraries, macOS has this via entitlements, and I believe OpenBSD and/or NetBSD has this in some form as well.

Re:I Built an Ld_preload Worm by saagarjha on Monday April 29, 2024 @10:49PM (#40206758)
Entitlements cannot protect against things in your own process. They are always used to gate clients either across a kernel-user or XPC boundary.
Re:I Built an Ld_preload Worm by jiveturkey on Tuesday April 30, 2024 @01:05PM (#40213319)
isn't that exactly what the parent was asking for? limiting syscalls.

EDIT: oh. but not limited to the caller from a specific system library.

Re:I Built an Ld_preload Worm by rfoo on Tuesday April 30, 2024 @04:44AM (#40208621)
> but only a few trusted library files would be allowed to make system calls. Like libc

This is impossible (without having to do libc.so.7) on Linux, as:

    $ nm -D /lib/x86_64-linux-gnu/libc.so.6 | grep syscall
    000000000011b520 T syscall
https://elixir.bootlin.com/glibc/glibc-2.39/source/sysdeps/u...