Разжился на днях исходниками, по идее позволяющие через вызов функции ядра socketpair() создать процесс, съедающий 100% процессорного времени и все файловые дескрипторы. Процесс, будучи запущенным от имени любого пользователя, может привести систему к состоянию полной неработоспособности. Назовём их условно hole1 и hole2.
Скомпилировал их под МСВС 5.0 (ядро 2.6.18) в виртуальной машине и запустил. Оба бинарника запустились с сообщением
Ошибка открытия /proc/net/dev!
Обе программы завершились через некоторое время без какого-либо зависания системы. Начало ободряющее.
Ну и забейте, никакой магии эта опция делать не должна. -Wno-* просто подавляют предупреждения. В нынешних версиях gcc предупреждения про ошибки формата по умолчанию и так не выводятся, возможно, раньше было по-другому.
Первым был запущен скрипт team-edward.py. Не взлетел (см. скриншот).
Далее был опробован код, который я назвал exploit01. Его даже не получилось скомпилировать.
Ну и на закуску был скомпилирован и запущен american-sign-language. Но запуск программы закончился безрезультатно.
По итогам остался некоторый осадок: не внесли ли авторы в коды данных эксплойтов ошибки, дабы ими не воспользовались "скрипт кидди"? Ведь вполне может оказаться, что полученные результаты обусловлены отнюдь не устойчивостью МСВС...
а вот на имеющейся у меня под рукой МСВС 5.0 (с ядром 2.6.32) такого файла просто нет. Если его заменить на sys/user.h — собирается (но не работает, что неудивительно):
Всё шло нормально до инициирования динамического связывания и загрузки $ORIGIN через LD_AUDIT и запуска программы по файловому дескриптору в /proc. Потом появились сообщения об отсутствии файла или каталога:
LD_AUDIT="\$ORIGIN" exec /proc/self/fd/3
bash: /proc/self/fd/3: Нет такого файла или каталога
bash: exec: /proc/self/fd/3: не могу запустить: Нет такого файла или каталога
Ради интереса вручную вбил команды whoami и id, которые окончательно подтвердили, что фокус не удался и root'вские права я не получил:
[officer@localhost ~]$ whoami
officer
[officer@localhost ~]$ id
uid=300(officer) gid=100(users) группы=100(users)