Атакуващите са проникнали в базата данни Oracle на организация чрез уязвимост от тип SQL инжекция в публично достъпно уеб приложение, след което са инсталирали набор от инструменти за следкомпрометиране (post-exploitation toolkit), без да записват изпълним файл на диска. Те са подали изходен код на Java към базата данни, оставили са Oracle да го компилира в съхранени схематични обекти и са изпълнили команди директно от ядрото на базата данни.
Компанията Huntress, която проследява инструментариума под името khunt, започна разследване, след като на 27 юли 2026 г. се задействаха детекции за кражба на идентификационни данни, и проследи веригата до изпълнение на код на ниво SYSTEM върху базовия Windows сървър.
Слабостта се намира в приложението, където поле за автоматично довършване при търсене предава невалидирани входни данни към базата данни чрез връзка от тип Java Database Connectivity (JDBC). Акаунтът зад тази връзка е имал достатъчно привилегии, за да създава Java обекти.
Нито една корекция за сигурност от Oracle не отстранява уязвимостта в приложението или привилегиите на акаунта зад него. Откриването на инструментариума изисква активно търсене: сканиране на инсталацията на Oracle за имена на обекти, започващи с Khunt, и на SQL регистрационните файлове (логове) за KHUNT%.
Java клас, компилиран в схематичен обект на база данни, не е процес, двоичен файл или файл във файловата система, и продуктите за откриване и реагиране на крайни устройства (EDR) обикновено не инспектират вътрешността на Oracle. Както описват от Huntress, базата данни спира да бъде нещо, към което атакуващите отправят заявки, и се превръща в предмостие, от което те атакуват.
Oracle се доставя с вградена Java виртуална машина (JVM), а операторът CREATE JAVA SOURCE позволява на потребителя да му подаде Java код, който базата данни компилира и съхранява като схематичен обект. В собствената схема на потребителя документацията на Oracle поставя границата при една системна привилегия – CREATE PROCEDURE. Стартирането на процес в операционната система от този код се извършва чрез Runtime.exec, което изисква собствено разрешение за изпълнение на файлове, а Oracle посочва, че такива се издават само от привилегировани администратори.
Huntress не уточнява какви права е притежавал компрометираният акаунт или дали атакуващите е трябвало да добавят нови. Веригата от действия е била успешна, така че той е имал достатъчно права и за двете.
Техниката е на поне две десетилетия. Инструментът raptor_oraexec.sql на Марко Ивалди от 2006 г. създава изходен обект в Oracle с методи за изпълнение на команди и четене на файлове, след което ги публикува в SQL чрез PL/SQL обвивки. Обектите на khunt използват същата базова архитектура. „Използването на тази техника в реални условия се документира рядко“, споделят от Huntress.
Инструментариумът се състои от шест Java обекта и няколко PL/SQL обвивки khunt_*:
- KhuntCmd зарежда
cmd.exeи изпълнява произволни команди на операционната система, подадени като SQL. - KhuntHash чете потребителски имена и хешове на пароли от вътрешната таблица с потребители на Oracle и ги записва във файл.
- KhuntFS и KhuntFS2 извеждат списъци, четат, търсят и определят размера на файлове.
- KhuntT потвърждава, че инструментариумът е достъпен, а KhuntUnzip разархивира архиви.
Изпълнението на cmd.exe /c whoami през KhuntCmd връща потребител SYSTEM. След това атакуващите са използвали PowerShell и reg.exe, за да копират регистрационните кошери SECURITY и SYSTEM в F:\Oracle, записали са изхода от tasklist /svc в khunttasks.txt и са копирали кошерите SAM и SECURITY с помощта на esentutl.exe.
От Huntress са наблюдавали локалното подготвяне на файловете, но не са установили дали те са били източени (ексфилтрирани). Компанията не назовава конкретен злонамерен субект и проследява злонамерените заявки до IP адрес 178.162.151[.]229.
Тези индикатори са специфични за този конкретен инструментариум, така че простото търсене на Khunt или KHUNT% няма да разкрие техниката зад него. Решението е използването на параметризирани заявки и валидиране на входните данни в приложението, както и прилагане на принципа на минималните привилегии: акаунт, обслужващ публично достъпно приложение, не трябва да има възможност да създава Java кодове или да изпълнява съхранени процедури, с които няма причина да работи.