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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2021-3899_PoC — состояние гонки в apport приводит к локальному повышению привилегий в Ubuntu | Kitploit
Инструменты/GitHubGitHub/liumuqing/cve-2021-3899_poc
Повышение привилегийАнализ уязвимостейЭксплуатацияТестирование на Проникновение
GitHubliumuqing/cve-2021-3899_poc

CVE-2021-3899_PoC

состояние гонки в apport приводит к локальному повышению привилегий в Ubuntu

Репозиторий
314 лет назадЕщё не проверено

Популярное

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

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

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

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

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

CVE-2021-3899: Доказательство концепции

Воспроизведение

  1. Установите старую версию apport: sudo apt-get install apport=2.20.11-0ubuntu27 (любая версия <= 2.20.11-0ubuntu27.10 подойдёт, но вам придётся загрузить исходный код)
  2. (опционально) установите маленькое значение pid_max. иначе подготовка к откату pid займёт больше времени. echo 10000 | sudo tee /proc/sys/kernel/pid_max
  3. разрешите любому пользователю запускать ping от root: добавьте ALL ALL=(root) NOPASSWD: /usr/bin/ping в /etc/sudoers
  4. выполните несколько раз ulimit -c unlimited; ./exploit
  5. вы должны увидеть файл в /etc/logrotate.d/core
  6. откройте другую оболочку и выполните nc -lvcp 1234
  7. дождитесь, пока сработает logrotate, вы можете:
    1. перевести часы на одну минуту вперед до срабатывания crontab-daily и ждать. (проверьте /etc/crontab)
    2. выполните sudo logrotate -vf /usr/sbin/logrotate /etc/logrotate.conf для немедленного запуска logrotate. (то же самое, что /etc/cron.daily/logrotate)
  8. появится обратная root-оболочка, подключённая к 127.0.0.1:1234

Подробности

Apport проверяет, не переиспользован ли pid, проверяя, больше ли время запуска процесса, чем у самого apport:

root@kitploit:~
  # /usr/share/apport/apport
  594 apport_start = get_apport_starttime()
  595 process_start = get_process_starttime()
  596 if process_start > apport_start:
  597 error_log('process was replaced after Apport started, ignoring')
  598 sys.exit(0)

Но этот pid может быть переиспользован сразу после запуска apport. В таком случае get_apport_starttime() == get_process_starttime().

Итак, вы можете заставить apport создать core-файл с правами -rw------- root:root, если сможете повторно занять этот PID другим процессом, работающим под uid==0:

  1. подготовьте процесс X для краха, чей pid равен A
  2. повторяйте fork процесса, пока текущий pid не достигнет A - 2
  3. вызовите крах процесса X, apport будет запущен ядром с pid A - 1. Мы убиваем процесс X, поэтому pid A теперь свободен.
  4. выполните команду sudo ping 8.8.8.8 с рабочей директорией /etc/logrotate.d/. Процесс, работающий от root:root, заново займет pid A.
  5. так как время запуска sudo и apport совпадает, проверка строки 596 обходится. Затем apport создает core-файл процесса X в /etc/logrotate.d
Скачать инструмент