CVE-2024-11578
Executive Summary
CVE-2024-11578 is a critical stack-based buffer overflow vulnerability in Luxion KeyShot, a professional 3D rendering and animation application. The flaw resides in the parsing of 3DS (3D Studio) files. By crafting a malicious 3DS file with an overly long data field, an attacker can overflow a stack-based buffer, leading to remote code execution (RCE) in the context of the current user. Exploitation requires user interaction—the victim must open the malicious file or visit a page that triggers the file load. The vulnerability was reported via the Zero Day Initiative (ZDI-CAN-23693) and currently has no official patch. The CVSS score is 7.8 (High), and the EPSS probability is 0.0%, indicating low active exploitation in the wild.
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
CVSS Breakdown & Threat Level
- CVSS Vector: CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H
- Base Score: 7.8 (High)
- Attack Vector (AV): Local (L) – The attacker must deliver the malicious file to the victim.
- Attack Complexity (AC): Low (L) – No special conditions required.
- Privileges Required (PR): None (N) – No authentication needed.
- User Interaction (UI): Required (R) – Victim must open the file.
- Scope (S): Unchanged (U) – The vulnerability does not affect other components.
- Confidentiality (C): High (H) – Full data compromise possible.
- Integrity (I): High (H) – Full data modification possible.
- Availability (A): High (H) – Full denial of service possible.
Threat Level: High. Although EPSS is low, the lack of a patch and the ease of exploitation (user opens a file) make this a significant risk for organizations using Luxion KeyShot.
Deep Dive & Mechanics
The vulnerability is a classic stack-based buffer overflow (CWE-121) in the 3DS file parser of Luxion KeyShot. The 3DS file format is a binary format used by Autodesk 3ds Max. When KeyShot parses a 3DS file, it reads various chunks (data blocks) that contain geometry, materials, and other scene data. The flaw occurs when the parser copies user-supplied data from a chunk into a fixed-size stack buffer without validating the length. By providing a chunk with an oversized data field, an attacker can overwrite the stack, including the return address and other critical data.
Technical Flow:
- The victim opens a malicious
.3dsfile in KeyShot. - The parser reads a chunk header (ID + length).
- The parser copies the chunk data into a stack buffer using a function like
strcpyormemcpywithout bounds checking. - The oversized data overwrites the stack, corrupting the saved return address.
- When the function returns, execution jumps to an attacker-controlled address (e.g., a ROP chain or shellcode).
- The attacker gains code execution in the context of the KeyShot process.
Root Cause: Lack of input validation on the length of chunk data before copying to a stack buffer.
Vulnerable vs. Patched Code
Since no official patch is available, we can only hypothesize the vulnerable code pattern. A typical vulnerable snippet might look like:
// Vulnerable code (hypothetical)
void Parse3DSChunk(FILE *file) {
char buffer[256];
uint16_t chunk_id;
uint32_t chunk_length;
fread(&chunk_id, 2, 1, file);
fread(&chunk_length, 4, 1, file);
// No length check before copy
fread(buffer, chunk_length, 1, file);
// Process buffer...
}
A patched version would include a length check:
// Patched code (hypothetical)
void Parse3DSChunk(FILE *file) {
char buffer[256];
uint16_t chunk_id;
uint32_t chunk_length;
fread(&chunk_id, 2, 1, file);
fread(&chunk_length, 4, 1, file);
if (chunk_length > sizeof(buffer)) {
// Handle error or truncate
return;
}
fread(buffer, chunk_length, 1, file);
// Process buffer...
}
Exploitation & Lab Setup
Red Team (Exploitation)
Prerequisites:
- Luxion KeyShot installed (any version prior to patch).
- Ability to deliver a malicious
.3dsfile to the victim (e.g., via email, download, or USB).
Exploitation Steps:
- Craft the Malicious 3DS File: Use a hex editor or a custom script to create a 3DS file with an oversized chunk. The chunk ID should be one that triggers the vulnerable code path (e.g., a material or geometry chunk). The data field should contain shellcode or a ROP chain.
- Deliver the File: Send the file to the victim via phishing email, social engineering, or a compromised website.
- Trigger the Vulnerability: The victim opens the file in KeyShot. The overflow occurs, and the attacker's payload executes.
- Post-Exploitation: The attacker gains code execution in the context of the KeyShot process, which can be used to install malware, exfiltrate data, or pivot to other systems.
Example Payload (Conceptual):
# Python script to generate a malicious 3DS file (conceptual)
import struct
def create_malicious_3ds():
# 3DS file header (0x4D4D = main chunk)
main_chunk = struct.pack('<H', 0x4D4D)
# Placeholder for chunk length (will be updated)
main_chunk += struct.pack('<I', 0)
# Malicious sub-chunk (e.g., 0xAFFF = material chunk)
sub_chunk_id = 0xAFFF
# Overflow data: NOP sled + shellcode + return address
overflow_data = b'\x90' * 100 # NOP sled
overflow_data += b'\xcc' * 100 # INT3 (breakpoint for testing)
overflow_data += struct.pack('<I', 0x41414141) # Overwritten return address
sub_chunk = struct.pack('<H', sub_chunk_id)
sub_chunk += struct.pack('<I', len(overflow_data) + 6) # Length includes header
sub_chunk += overflow_data
main_chunk += sub_chunk
# Update main chunk length
main_chunk = main_chunk[:2] + struct.pack('<I', len(main_chunk)) + main_chunk[6:]
with open('malicious.3ds', 'wb') as f:
f.write(main_chunk)
create_malicious_3ds()
Note: This is a conceptual example. Actual exploitation would require precise knowledge of the vulnerable function's stack layout and ASLR/DEP bypass techniques.
Blue Team (Defense)
Detection & Prevention:
- User Awareness: Train users not to open 3DS files from untrusted sources.
- Application Control: Use AppLocker or similar to restrict KeyShot execution to trusted users.
- Sandboxing: Run KeyShot in a sandboxed environment (e.g., Windows Sandbox, Firejail) to limit impact.
- Memory Protection: Enable DEP and ASLR on the system (usually enabled by default).
- File Scanning: Use antivirus/EDR solutions that can detect malicious 3DS files based on heuristic analysis.
- Network Segmentation: Limit the ability of KeyShot to communicate with external hosts.
Hunting Queries:
- Monitor for KeyShot crashes (Event ID 1000 in Windows Application log).
- Look for unusual child processes spawned by KeyShot.
- Detect outbound connections from KeyShot to unknown IPs.
Indicators of Compromise (IOCs)
- File Hashes (Example): (No known samples yet)
- Network Indicators: Outbound connections from KeyShot to attacker-controlled IPs.
- Process Indicators: KeyShot.exe spawning cmd.exe, powershell.exe, or other suspicious processes.
- File System Indicators: Creation of new executable files in temporary directories.
- Registry Indicators: Unusual registry modifications by KeyShot process.
Detection Engineering
YARA Rule
rule CVE_2024_11578_KeyShot_3DS_Overflow {
meta:
description = "Detects malicious 3DS files exploiting CVE-2024-11578"
author = "Valters IT"
date = "2025-04-10"
reference = "https://nvd.nist.gov/vuln/detail/CVE-2024-11578"
strings:
$chunk_header = { 4D 4D } // Main chunk ID
$overflow_pattern = /.{256,}/ // Data longer than 256 bytes (adjust as needed)
condition:
$chunk_header at 0 and #overflow_pattern > 0
}
Sigma Rule
title: CVE-2024-11578 KeyShot 3DS File Parsing Overflow
id: 8a9b3c2d-1e5f-4a7b-9c8d-0e1f2a3b4c5d
status: experimental
description: Detects KeyShot crashes or suspicious behavior related to CVE-2024-11578
author: Valters IT
date: 2025-04-10
logsource:
category: process_creation
product: windows
detection:
selection:
Image|endswith: '\KeyShot.exe'
CommandLine|contains: '.3ds'
condition: selection
falsepositives:
- Legitimate 3DS file processing
level: high
Suricata Rule
alert tcp $HOME_NET any -> $EXTERNAL_NET any (msg:"CVE-2024-11578 KeyShot 3DS File Download"; flow:to_server,established; content:"|4D 4D|"; depth:2; content:"|AFFF|"; within:100; classtype:attempted-user; sid:1000001; rev:1;)
Note: The Suricata rule is a placeholder for detecting malicious 3DS file downloads. Adjust the chunk ID and thresholds based on actual analysis.
Remediation & Mitigation
- Immediate Action: Discontinue use of Luxion KeyShot until a patch is released. If not possible, restrict file opening to trusted sources only.
- Vendor Patch: Monitor Luxion's official website for updates. Apply the patch as soon as it becomes available.
- Workaround: Use a file converter to convert 3DS files to a safer format (e.g., OBJ) before opening in KeyShot.
- Compensating Controls: Implement application whitelisting, sandboxing, and strict file upload validation.
- Long-Term: Adopt a secure development lifecycle for file parsers, including fuzzing and static analysis.
Valters IT
DevSecOps & Cyber Threat Intelligence
What is this? Security researchers use these exact search queries on Shodan.io (a search engine for internet-connected devices) to find vulnerable systems globally. You can copy these dorks to see if your organization's IP space is exposed.
💣 PoC CODE AVAILABLE
Exploit code for this CVE is tracked in our database.
Access poc_code via API Pro.