1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-22 19:05:07 +00:00

Kernel+ping: Only allow superuser to create SOCK_RAW sockets

/bin/ping is now setuid-root, and will drop privileges immediately
after opening a raw socket.
This commit is contained in:
Andreas Kling 2019-12-31 01:42:34 +01:00
parent 5c918d0e71
commit 3f254bfbc8
3 changed files with 8 additions and 0 deletions

View file

@ -2609,6 +2609,8 @@ size_t Process::amount_purgeable_nonvolatile() const
int Process::sys$socket(int domain, int type, int protocol) int Process::sys$socket(int domain, int type, int protocol)
{ {
if ((type & SOCK_TYPE_MASK) == SOCK_RAW && !is_superuser())
return -EACCES;
int fd = alloc_fd(); int fd = alloc_fd();
if (fd < 0) if (fd < 0)
return fd; return fd;

View file

@ -82,6 +82,7 @@ else
find ../Userland/ -type f -perm +111 -exec cp {} mnt/bin/ \; find ../Userland/ -type f -perm +111 -exec cp {} mnt/bin/ \;
fi fi
chmod 4755 mnt/bin/su chmod 4755 mnt/bin/su
chmod 4755 mnt/bin/ping
echo "done" echo "done"
printf "installing applications... " printf "installing applications... "

View file

@ -37,6 +37,11 @@ int main(int argc, char** argv)
return 1; return 1;
} }
if (setgid(getgid()) || setuid(getuid())) {
fprintf(stderr, "Failed to drop privileges.\n");
return 1;
}
struct timeval timeout { struct timeval timeout {
1, 0 1, 0
}; };