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

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

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

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

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

Категории

Все категории
Loading categories
codeql-sample-polkit — Все этапы исследования polkit CVE-2021-4034 с помощью codeql | Kitploit
Инструменты/GitHubGitHub/hohn/codeql-sample-polkit
Статический анализАнализ уязвимостейАнализ КодаСтатьи и ИсследованияОбучение и Образование
GitHubhohn/codeql-sample-polkit

codeql-sample-polkit

Все этапы исследования polkit CVE-2021-4034 с помощью codeql

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

Популярное

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

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

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

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

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

-- coding: utf-8 --

  • Ошибка polkit pkexec

** Обзор В этом репозитории исследуется ошибка polkit pkexec с помощью CodeQL. Здесь есть

  • инструкции по сборке баз данных
  • результирующие базы данных
  • последовательность запросов, иллюстрирующая подход к поиску этой ошибки

Выполнено:

  • сборка исходников / базы данных polkit
  • codeql-запрос для уязвимого исходного кода
  • иллюстрация CFG

Ещё предстоит сделать:

  • улучшения codeql-запроса для обработки пропатченного исходного кода
  • инструкции для командной строки

** Ошибка Ошибка Polkit pkexec [[https://blog.qualys.com/vulnerabilities-threat-research/2022/01/25/pwnkit-local-privilege-escalation-vulnerability-discovered-in-polkits-pkexec-cve-2021-4034][(CVE-2021-4034)]] начинается с ошибки выхода за границы массива относительно argv и развивается дальше. Выход за границы — это то, что мы можем исследовать с помощью библиотеки анализа диапазонов codeql.

Функция main() в pkexec в polkit/src/programs/pkexec.c имеет структуру #+begin_src text 435 main (int argc, char *argv[]) 436 { ... 534 for (n = 1; n < (guint) argc; n++) 535 { ... 568 } ... 610 path = g_strdup (argv[n]); ... #+end_src

Основные идеи:

  • Использовать простой анализ диапазонов для argc.
  • Ограничить rhs / lhs выражений только теми, что связаны с argc.

Версии для проверки:

  • Все версии Polkit с 2009 года уязвимы; первая версия — май 2009 года (коммит c8c3d83, «Add a pkexec(1) command»).

  • мы можем получить /a/ базу данных [[https://lgtm.com/projects/g/freedesktop/polkit/ci/#ql][с lgtm]], текущая <2022-02-11 Пт> — =...srcVersion_a6bedfd...= но эта версия уже содержит патч polkit: #+BEGIN_SRC text commit a6bedfd09b7bba753de7a107dc471da0db801858 (origin/master, origin/HEAD, master) Author: Xi Ruoyao [email protected] Date: Thu Jan 27 10:16:32 2022 +0000

      jsauthority: port to mozjs-91
    

    commit a2bf5c9c83b6ae46cbd5c779d3055bff81ded683 Author: Jan Rybar [email protected] Date: Tue Jan 25 17:21:46 2022 +0000

      pkexec: local privilege escalation (CVE-2021-4034)
    

    #+END_SRC И мы видим, что проблема исправлена: #+BEGIN_SRC text commit a2bf5c9c83b6ae46cbd5c779d3055bff81ded683 Author: Jan Rybar [email protected] Date: Tue Jan 25 17:21:46 2022 +0000

      pkexec: local privilege escalation (CVE-2021-4034)
    

    diff --git a/src/programs/pkcheck.c b/src/programs/pkcheck.c index f1bb4e1..768525c 100644 --- a/src/programs/pkcheck.c +++ b/src/programs/pkcheck.c @@ -363,6 +363,11 @@ main (int argc, char *argv[]) local_agent_handle = NULL; ret = 126;

    • if (argc < 1)
    • {
    •  exit(126);
      
    • }
    • /* Disable remote file access from GIO. */ setenv ("GIO_USE_VFS", "local", 1); #+END_SRC
  • Поэтому нам нужен [[https://gitlab.freedesktop.org/polkit/polkit.git][исходный код]] и сборка собственных баз данных: одна до патча, одна после.

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

** Сборка polkit и CodeQL DB Нам нужна среда сборки polkit, прежде чем мы сможем получить базу данных codeql.

Варианты операционных систем для сборки:

  • macOS стоит попробовать, но это становится сложным уже в начале. Использование =brew= для получения зависимостей работает до определённого момента, но зависимость =mozjs-78= — это конкретная версия spidermonkey, и собрать /её/ непрактично. #+BEGIN_SRC sh # autoconf... немного сложно на mac brew install autoconf automake libtool gtk-doc export PATH="/usr/local/opt/libtool/libexec/gnubin:$PATH" ./autogen.sh

    # Использовать meson?
    brew install meson ninja intltool glib gobject-introspection 
    

    #+END_SRC

  • Linux — это родная среда для polkit, но какая именно? Зависимость mozjs-78 — это конкретная версия spidermonkey; кроме того, polkit используется не всеми дистрибутивами:

    • Debian использует PolicyKit, а не polkit.
    • Ubuntu:
      • в 18.04 также отсутствует mozjs78 (только mozjs52)
      • в 22.04 есть mozjs78

Ubuntu 22.04 можно запустить несколькими способами: на оборудовании, в виртуальной машине (vmware, virtualbox, multipass и т. д.) или в docker-контейнере на другом хосте. Для этой задачи мы можем использовать Docker-контейнер и включить в него также инструменты командной строки codeql.

Определение контейнера находится в ./Dockerfiles, вот последовательность сборки: #+BEGIN_SRC shell # Базовый образ для настройки контейнера qlbuild docker pull ubuntu:jammy docker images docker run --cpus 4 -m 8GB -ti ubuntu:jammy

 # Образ, который будет настроен
 docker build -t qlbuild .

#+END_SRC Примечание: при использовании docker desktop на Windows и Mac ограничения памяти и ЦП необходимо увеличить там. После этого последовательность запуска контейнера проста: #+BEGIN_SRC sh # Запуск как демона, чтобы он оставался активным даже при отключении. docker run -d -p 127.0.0.1:2020:22 --cpus 8 -m 16GB qlbuild

 # И подключение
 ssh -p 2020 test@localhost

#+END_SRC

Сборка на Ubuntu 22.04 #+BEGIN_SRC sh # --------------------------------- # Настройка/установка системы, от root: echo "deb-src http://archive.ubuntu.com/ubuntu/ jammy main restricted" >> /etc/apt/sources.list apt-get update apt-get install -y zile build-essential git cmake
meson ninja-build
libmozjs-78-0 libmozjs-78-dev
libdbus-1-3 libdbus-1-dev apt-get build-dep -y policykit-1 apt install unzip

 # Версия polkit a2bf5c9c также требует некоторых дополнительных пакетов
 apt install duktape duktape-dev
 # более старая версия meson в /usr/local/bin
 pip3 install meson==0.60.3
 # Или получить исходники и использовать их:
 #     wget https://github.com/mesonbuild/meson/archive/refs/tags/0.60.3.tar.gz
 #     tar zxf 0.60.3.tar.gz
 #     и т. д.

 # ---------------------------------
 # Настройка codeql -- всё ещё от root

 # grab -- загрузка и извлечение codeql cli и библиотеки
 # Использование: grab version url prefix
 grab() {
     version=$1; shift
     platform=$1; shift
     prefix=$1; shift
     mkdir -p $prefix/codeql-$version &&
         cd $prefix/codeql-$version || return

     # Получить cli
     wget "https://github.com/github/codeql-cli-binaries/releases/download/$version/codeql-$platform.zip"
     # Получить библиотеку
     wget "https://github.com/github/codeql/archive/refs/tags/codeql-cli/$version.zip"
     # Исправить атрибуты
     if [ `uname` = Darwin ] ; then
         xattr -c *.zip
     fi
     # Извлечь
     unzip -q codeql-$platform.zip
     unzip -q $version.zip
     # Переименовать каталог библиотеки для VS Code
     mv codeql-codeql-cli-$version/ ql
     # Удалить архивы
     rm codeql-$platform.zip
     rm $version.zip
 }    

 grab v2.7.6 linux64 /opt
 grab v2.6.3 linux64 /opt

 # ---------------------------------
 # От пользователя test:
 # Получить исходники polkit
 cd /tmp && git clone https://gitlab.freedesktop.org/polkit/polkit.git

 # Собрать версию 0.119
 cd /tmp/polkit
 git checkout 0.119 
 git clean -fxd

 meson setup builddir
 meson compile -C builddir

 find builddir -name pkexec -ls
 : 139269     76 -rwxr-xr-x   1 test     root        76696 Feb 12 03:06 builddir/src/programs/pkexec

 # ---------------------------------
 # Создать базу данных codeql для версии 0.119
 cd /tmp/polkit
 git checkout 0.119 
 git clean -fxd
Скачать инструмент