Attackers broke into an organization's Oracle database through a SQL injection flaw in a public-facing web application, then installed a post-exploitation toolkit without writing an executable to disk. They fed Java source code to the database, let Oracle compile it into stored schema objects, and ran commands from inside the database engine.
Huntress, which tracks the toolkit as khunt, investigated after credential-theft detections fired on July 27, 2026, and traced the chain to SYSTEM-level code execution on the underlying Windows server.
The flaw sat in the application, where an autocomplete search field passed unvalidated input to the database over a Java Database Connectivity (JDBC) connection. The account behind that connection had enough privilege to create Java objects.
No Oracle patch closes either the application flaw or the account privilege behind it. Finding the toolkit means hunting: search the Oracle installation for object names beginning Khunt, and SQL logs for KHUNT%.
A Java class compiled into a database schema object is not a process, a binary, or a file on the filesystem, and endpoint detection and response products do not generally inspect Oracle's internals. As Huntress frames it, the database stops being something attackers query and becomes a beachhead they attack from.
Oracle ships an embedded Java Virtual Machine, and the CREATE JAVA SOURCE statement lets a user hand it Java code that the database compiles and stores as a schema object. In a user's own schema, Oracle's documentation puts the bar at a single system privilege, CREATE PROCEDURE. Spawning an operating-system process from that code runs through Runtime.exec, which needs its own file-execution permission, and Oracle says those are issued only by privileged administrators.
Huntress does not say which grants the compromised account held, or whether the attackers had to add any. The chain succeeded, so it had enough for both.
The technique is at least two decades old. Marco Ivaldi's raptor_oraexec.sql, dated 2006, creates an Oracle source object with command-execution and file-read methods, then publishes them to SQL through PL/SQL wrappers. The khunt objects use the same basic architecture. "The use of the technique in the wild has rarely been documented," Huntress said.
Six Java objects and several khunt_* PL/SQL wrappers made up the toolkit:
- KhuntCmd loaded cmd.exe and ran arbitrary operating-system commands passed in as SQL.
- KhuntHash read usernames and password hashes from Oracle's internal user table and wrote them to a file.
- KhuntFS and KhuntFS2 listed, read, searched, and sized files.
- KhuntT confirmed the toolkit was reachable, and KhuntUnzip unpacked archives.
Running cmd.exe /c whoami through KhuntCmd returned SYSTEM. The attackers then used PowerShell and reg.exe to copy the SECURITY and SYSTEM registry hives into F:\Oracle, ran tasklist /svc into khunttasks.txt, and copied the SAM and SECURITY hives with esentutl.exe.
Huntress observed the files being staged locally, but did not establish that they were exfiltrated. The firm named no threat actor and traced the malicious requests to 178.162.151[.]229.
Those indicators are specific to this toolkit, so no search for Khunt or KHUNT% will surface the technique behind it. The fix is parameterized queries and input validation in the application, plus least privilege underneath: an account serving a public-facing app should not be able to author Java sources or run stored procedures it has no reason to touch.