CVE-2023-6535 Overview
A flaw was found in the Linux kernel's NVMe driver that allows an unauthenticated malicious actor to trigger a denial of service condition. By sending a set of crafted TCP packages when using NVMe over TCP, an attacker can cause a NULL pointer dereference in the NVMe driver, resulting in a kernel panic and complete system unavailability.
Critical Impact
This vulnerability enables remote attackers to crash affected Linux systems without authentication by exploiting the NVMe over TCP protocol, potentially causing significant service disruptions in enterprise and data center environments.
Affected Products
- Linux Kernel (all versions using NVMe over TCP)
- Red Hat Enterprise Linux 8.0 and 9.0
- Red Hat Enterprise Linux EUS 8.6 and 9.2
- Red Hat CodeReady Linux Builder EUS 8.6 and 9.2
- Red Hat Enterprise Linux for Real Time 9.2
- Red Hat Virtualization Host 4.0
- Red Hat Enterprise Linux Server AUS 8.6 and 9.2
- Red Hat Enterprise Linux Server TUS 8.6
Discovery Timeline
- 2024-02-07 - CVE-2023-6535 published to NVD
- 2025-11-04 - Last updated in NVD database
Technical Details for CVE-2023-6535
Vulnerability Analysis
CVE-2023-6535 is a NULL pointer dereference vulnerability (CWE-476) in the Linux kernel's NVMe (Non-Volatile Memory Express) driver. The flaw exists in the handling of NVMe over TCP connections, where specially crafted TCP packets can trigger a code path that attempts to dereference a NULL pointer. This vulnerability can be exploited remotely over the network without requiring any authentication or user interaction.
The NVMe over TCP (NVMe/TCP) protocol is commonly used in enterprise storage environments to provide high-performance access to NVMe storage devices over standard TCP/IP networks. Systems using this protocol for storage connectivity are particularly at risk.
Root Cause
The root cause of this vulnerability lies in improper input validation within the NVMe driver's TCP packet processing logic. When handling certain sequences of malformed or unexpected TCP packets, the driver fails to properly validate pointer assignments before dereferencing them. This results in a NULL pointer dereference when the driver attempts to access memory through an uninitialized or improperly set pointer.
The CWE-476 classification indicates that the code attempts to dereference a pointer that it expects to be valid but is actually NULL, leading to undefined behavior and, in this case, a kernel panic.
Attack Vector
The attack can be conducted remotely over the network by an unauthenticated attacker. The exploitation process involves:
- Identifying a target system with NVMe over TCP enabled and accessible
- Crafting a sequence of malicious TCP packets designed to trigger the vulnerable code path
- Sending the crafted packets to the NVMe/TCP service on the target system
- The NVMe driver processes the malformed packets and encounters the NULL pointer dereference
- A kernel panic occurs, causing immediate system crash and denial of service
Since this is a kernel-level vulnerability, no user interaction is required and the attack results in complete system unavailability until manual intervention (system reboot) occurs.
Detection Methods for CVE-2023-6535
Indicators of Compromise
- Unexpected kernel panic events with stack traces referencing NVMe driver functions
- System crashes correlating with unusual NVMe over TCP network traffic patterns
- Kernel logs showing NULL pointer dereference errors in the nvme_tcp module
- Repeated system reboots without clear cause in systems using NVMe/TCP storage
Detection Strategies
- Monitor kernel logs (dmesg, /var/log/kern.log) for NVMe-related NULL pointer dereference messages
- Implement network intrusion detection rules to identify anomalous TCP traffic patterns targeting NVMe/TCP ports (typically port 4420)
- Deploy endpoint detection solutions that can correlate kernel crashes with incoming network activity
- Utilize SentinelOne's kernel-level monitoring to detect exploitation attempts targeting the NVMe driver
Monitoring Recommendations
- Enable audit logging for NVMe subsystem events on critical systems
- Configure alerting for kernel panic events and unexpected system reboots
- Monitor network traffic to NVMe/TCP services for unusual patterns or sources
- Implement centralized log collection to correlate events across multiple systems
How to Mitigate CVE-2023-6535
Immediate Actions Required
- Apply vendor-provided kernel security patches immediately on all affected systems
- If patching is not immediately possible, consider disabling NVMe over TCP on systems where it is not critical
- Implement network segmentation to limit access to NVMe/TCP services from untrusted networks
- Review firewall rules to restrict NVMe/TCP port access to authorized hosts only
Patch Information
Multiple vendors have released security patches addressing this vulnerability:
- Red Hat: Security advisories RHSA-2024:0723, RHSA-2024:0724, RHSA-2024:0725, RHSA-2024:0881, RHSA-2024:0897, RHSA-2024:1248, RHSA-2024:2094, and RHSA-2024:3810 provide patched kernel packages
- Debian: Patches available via Debian LTS Announcement
- Fedora: Updates announced via Fedora Package Announcement
- NetApp: See NetApp Security Advisory ntap-20240415-0003
For detailed CVE information and analysis, refer to the Red Hat CVE Analysis for CVE-2023-6535 and Red Hat Bug Report #2254053.
Workarounds
- Disable NVMe over TCP functionality if not required by unloading the nvme_tcp kernel module: modprobe -r nvme_tcp
- Block NVMe/TCP traffic at the network perimeter using firewall rules on port 4420
- Implement network access controls to ensure only trusted hosts can reach NVMe/TCP services
- Consider using alternative storage protocols until patches can be applied
# Configuration example - Disable NVMe over TCP module
# Add to /etc/modprobe.d/disable-nvme-tcp.conf
echo "blacklist nvme_tcp" >> /etc/modprobe.d/disable-nvme-tcp.conf
echo "install nvme_tcp /bin/true" >> /etc/modprobe.d/disable-nvme-tcp.conf
# Unload the module if currently loaded
modprobe -r nvme_tcp
# Block NVMe/TCP port at firewall level (iptables example)
iptables -A INPUT -p tcp --dport 4420 -j DROP
iptables -A OUTPUT -p tcp --dport 4420 -j DROP
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

