
CENG 325 - Принципы информационной безопасности и конфиденциальности
Участники группы
@canumay @aslihann @ezgigucuyener @mburakdonmez
Ссылки
Exploit DB - Apache Tika-server < 1.18 - Внедрение команд
Rhino Security Labs - Эксплуатация CVE-2018-1335: Внедрение команд в Apache Tika
Отказ от ответственности
Эксплойт-код написан исследователем в области кибербезопасности David Yesland @Daveysec и должен использоваться только в образовательных целях.
a. Краткое описание уязвимости
b. Способ эксплуатации уязвимости
a. Найдите или создайте код эксплойта, использующий уязвимость

b. Выделите уязвимые фрагменты кода и объясните, почему они уязвимы

Сервер Apache Tika формирует команду для выполнения, используя значения, предоставленные пользователем в запросе для запуска OCR на изображениях. Это позволяет пользователям манипулировать командой и выполнять вредоносный код. В данном случае config.getTesseractPath() извлекает заголовок X-Tika-OCRTesseractPath и добавляет его в начало команды. Хотя строка tesseract.exe добавляется в конец предоставленного пользователем пути, пользователь может заключить свой путь в двойные кавычки (") чтобы отбросить следующую строку tesseract.exe. Это позволяет пользователю запускать любые исполняемые файлы на сервере.
Сформированная команда:
"calc.exe"tesseract.exe C:\Users\Test\AppData\Local\Temp\apache-tika3299124493942985299.tmp C:\Users\Test\AppData\Local\Temp\apache-tika7317860646082338953.tmp -l eng -psm 1 txt -c preserve_interword_spaces=0
Встроенный в Windows CScript.exe — это язык сценариев, который принимает имя файла сценария, запускает его и игнорирует остальные аргументы. Если мы можем предоставить сценарий, предназначенный для cscript, мы можем выполнить его на сервере. Сервер Apache Tika берет наше изображение, предоставленное в теле запроса, и сохраняет его во временный файл для запуска OCR, поэтому вместо отправки бинарного изображения мы можем напрямую отправить строку, и строка будет сохранена как бинарные данные. Но сервер Tika проверяет, является ли бинарный файл изображением, за исключением типа файла jp2, в этом случае он сохраняется напрямую. Этот файл будет передан как аргумент исполняемому файлу cscript. Но расширение файла все равно будет .tmp, а нам нужно .jscript или .vbs. Чтобы обойти это, мы можем указать cscript запускать JScript независимо от расширения файла. Сервер Tika также передает config.getPageSetMode() в команду, которая отправляется пользователем в заголовке X-Tika-OCRLanguage. Если мы заменим его строкой //E:Jscript, cscript запустит сценарий как JScript независимо от расширения файла. И, наконец, строка, предоставленная в теле запроса, будет полезной нагрузкой для выполнения, которая также может вызвать другую консоль для полного доступа к системной оболочке.
Окончательная сформированная команда:
"cscript.exe"tesseract.exe C:\Users\Test\AppData\Local\Temp\apache-tika3299124493942985299.tmp C:\Users\Test\AppData\Local\Temp\apache-tika7317860646082338953.tmp -l //E:Jscript -psm 1 txt -c preserve_interword_spaces=0
Простая полезная нагрузка для вызова оболочки на JScript:
var oShell = WScript.CreateObject("WScript.Shell");
var oExec = oShell.Exec('cmd /c calc.exe');
a. Выполните найденный или созданный код эксплойта:

Сервер Apache Tika 1.17 работает внутри целевой виртуальной машины.

Мы можем получить доступ к серверу с нашей хост-машины по IP-адресу 192.168.233.167.

Затем мы выполнили созданный код эксплойта с полезной нагрузкой calc.exe, чтобы запустить калькулятор внутри целевой машины, демонстрируя возможность выполнения любого вредоносного кода внутри целевой машины. Кроме того, с помощью обратной оболочки мы можем создать интерактивный сеанс оболочки на целевой машине.

b. Каковы результаты выполнения кода эксплойта:
Как мы объяснили выше, с помощью этого эксплойта мы, по сути, выполняем программу-калькулятор внутри целевой машины, но, обладая возможностью удаленного выполнения кода, мы можем делать все, что захотим, на целевой машине с привилегиями пользователя, запустившего сервер Apache Tika. Например, мы можем получить доступ к файлам пользователя, отслеживать его активность и даже сделать снимок экрана или сфотографировать с помощью веб-камеры, если она есть.
c. Как можно убедиться, что уязвимость действительно существует:
Эта уязвимость уже сообщена надежными источниками, такими как NIST, а также подтверждена и исправлена самим Apache. Но чтобы доказать это, мы можем провести еще одно PoC-доказательство с использованием metasploit.

Сначала мы подтвердили, что установленная версия является уязвимой.

После подтверждения версии мы можем настроить наш сеанс metasploit с правильным IP-адресом и портом и выполнить команду check, чтобы проверить, уязвима ли цель.

Наконец, мы можем выполнить команду exploit, чтобы запустить эксплойт, и подтвердить, что оболочка активна, введя dir в оболочку. С этого момента единственным ограничением являются привилегии пользователя, запустившего сервер Apache Tika.