Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
path-auditor — Аудитор функций libc во время выполнения, который обнаруживает состояния гонки при доступе к файлам и уязвимости символьных ссылок путем перехвата системных вызовов файловой системы через LD_PRELOAD, регистрируя потенциальные пути повышения привилегий. | Kitploit
Инструменты/GitHubGitHub/google/path-auditor
Повышение привилегийАнализ уязвимостейДинамический анализ кода (DAST)ЭксплуатацияФаззингАнализ Бинарных ФайловArchived
GitHubgoogle/path-auditor

path-auditor

Аудитор функций libc во время выполнения, который обнаруживает состояния гонки при доступе к файлам и уязвимости символьных ссылок путем перехвата системных вызовов файловой системы через LD_PRELOAD, регистрируя потенциальные пути повышения привилегий.

Репозиторий
250385 лет назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

PathAuditor

PathAuditor — это инструмент для поиска уязвимостей, связанных с доступом к файлам, путём аудита функций libc.

Идея примерно следующая:

  • Аудит каждого вызова связанных с файловой системой функций libc, выполняемых бинарным файлом.
  • Проверка, доступен ли путь, используемый в системном вызове, для записи пользователем. В этом случае непривилегированный пользователь мог заменить каталог или файл на символическую ссылку.
  • Логирование всех нарушений как потенциальных уязвимостей.

Мы используем LD_PRELOAD для перехвата всех библиотечных вызовов, связанных с файловой системой, и логирования всех обнаруженных нарушений в syslog.

Это неофициальный продукт Google, не поддерживаемый официально.

Пример уязвимости

Рассмотрим пример уязвимости, которую может обнаружить этот инструмент. CVE-2019-3461 была ошибкой в tmpreaper — инструменте, который обходит /tmp и удаляет старые файлы. Обычно он запускается как cron-задача от root. Поскольку он не хочет удалять файлы за пределами tmp, он использовал следующий код для проверки, является ли каталог точкой монтирования:

root@kitploit:~
if (S_ISDIR (sb.st_mode)) {
    char *dst;

    if ((dst = malloc(strlen(ent->d_name) + 3)) == NULL)
        message (LOG_FATAL, "malloc failed.\n");
    strcpy(dst, ent->d_name);
    strcat(dst, "/X");
    rename(ent->d_name, dst);
    if (errno == EXDEV) {
        free(dst);
        message (LOG_VERBOSE,
                 "File on different device skipped: `%s/%s'\n",
                 dirname, ent->d_name);
        continue;
    }
    // [...]

Короче говоря, этот код вызывает rename("/tmp/foo", "/tmp/foo/x"), которая вернёт EXDEV, если "/tmp/foo" является точкой монтирования. PathAuditor пометил бы этот вызов как потенциальную уязвимость, если "/tmp/foo" принадлежит любому пользователю, кроме root. Чтобы понять почему, нужно подумать о том, что происходит в ядре при выполнении системного вызова rename (упрощённо):

  1. Ядро проходит по пути "/tmp/foo" для первого аргумента.
  2. Ядро проходит по пути "/tmp/foo/x" для второго аргумента.
  3. Если источник и цель находятся на разных файловых системах, возвращается EXDEV.
  4. В противном случае файл перемещается из первого каталога во второй.

Здесь присутствует состояние гонки, так как "/tmp/foo" будет разрешён дважды. Если этот путь контролируется пользователем, он может в любой момент заменить его на другой файл. В частности, нам нужно, чтобы "/tmp/foo" сначала был каталогом, чтобы пройти проверку if(S_ISDIR) в коде tmpreaper. Затем мы заменяем его на файл непосредственно перед тем, как код войдёт в системный вызов. Когда ядро обрабатывает первый аргумент, оно увидит файл с содержимым, контролируемым пользователем. Теперь снова заменяем его, на этот раз на символическую ссылку на произвольный каталог в той же файловой системе. Ядро второй раз разрешит путь, перейдёт по символической ссылке и переместит контролируемый файл в выбранный каталог.

Ограничение одной файловой системы связано с тем, что rename не работает между файловыми системами. Но в некоторых дистрибутивах Linux /tmp по умолчанию является просто папкой в корневой файловой системе, и вы могли бы использовать эту ошибку, чтобы переместить файл в /etc/cron, который будет выполнен от root.

Как запустить

Чтобы попробовать, нужно собрать libpath_auditor.so с помощью bazel и загрузить его в бинарный файл с помощью LD_PRELOAD. Все нарушения будут записаны в syslog, поэтому убедитесь, что он запущен.

root@kitploit:~
bazel build //pathauditor/libc:libpath_auditor.so
LD_PRELOAD=/path/to/bazel-bin/pathauditor/libc/libpath_auditor.so cat /tmp/foo/bar
tail /var/log/syslog

Также возможно запустить это для всех процессов в системе, добавив его в /etc/ld.so.preload. Однако предупреждаем, что это рекомендуется только на тестовых системах, так как может привести к нестабильности.

Для быстрого старта вы можете попробовать Docker-контейнер, поставляемый с этим проектом:

root@kitploit:~
docker build -t pathauditor-example .
docker run -it pathauditor-example
# LD_PRELOAD=/pathauditor/bazel-bin/pathauditor/libc/libpath_auditor.so cat /tmp/foo/bar
# cat /var/log/syslog
Скачать инструмент