CVE-2014-3657
NoneCVSS
—
EPSS
2.8%
Published
Oct 6, 2014
CISA due date
—
Cloudanix analysis
A bug in virtualization software lets an attacker send one bad request that freezes the service and stops it from managing virtual machines until it is restarted.
- Exploitation
- Remote Unauthenticated
- Attacker needs
- None
- Complexity
- Low
- Impact
- Denial Of Service
- Component
- Library
- Class
- Denial of service
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
The virDomainListPopulate function fails to release a domain list lock when virConnectListAllDomains receives a NULL second parameter, leaving the lock held and causing a permanent deadlock in the libvirt daemon.
Why it matters to the business
Virtualization management services become unresponsive, blocking VM lifecycle operations, migrations, and monitoring across any systems that rely on the affected libvirt instance until the process is restarted.
How an attack unfolds
An attacker with network reachability to a libvirt daemon issues the virConnectListAllDomains API call supplying NULL for the domain list pointer; the missing unlock in virDomainListPopulate causes the global lock to remain held, deadlocking subsequent API consumers and the management stack.
How to fix it
Upgrade libvirt to version 1.2.9 or later; if immediate upgrade is not possible, restrict network access to the libvirt socket or daemon and restart the libvirtd process when deadlock symptoms appear.
How to confirm the fix worked
After patching, confirm the installed libvirt version is at least 1.2.9, then exercise virConnectListAllDomains with a NULL list pointer in a test environment and verify the daemon continues to service subsequent calls without deadlock.
Typical attack path
- Obtain network access to the libvirt daemon port
- Authenticate or exploit an exposed unauthenticated libvirt socket
- Invoke virConnectListAllDomains with a NULL second argument
- Observe that the daemon no longer processes further API requests
- Maintain the condition to sustain denial of service
How to detect it
Review libvirt daemon logs for repeated or stalled domain listing operations, monitor for sustained high CPU or unresponsive API behavior, and correlate with any external connections attempting virConnectListAllDomains calls around the time of service degradation.
What your security team should do
- Prioritize upgrade of all libvirt installations to 1.2.9 or newer
- Restrict libvirt daemon exposure to only trusted management networks
- Implement process monitoring and automatic restart for libvirtd on deadlock detection
- Review and tighten API authentication and authorization settings
The record
The virDomainListPopulate function in conf/domain_conf.c in libvirt before 1.2.9 does not clean up the lock on the list of domains, which allows remote attackers to cause a denial of service (deadlock) via a NULL value in the second parameter in the virConnectListAllDomains API command.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| Debian:11 | libvirt | 0 | 1.2.9-1 |
| Debian:12 | libvirt | 0 | 1.2.9-1 |
| Debian:13 | libvirt | 0 | 1.2.9-1 |
| Mageia:3 | libvirt | 0 | 1.0.2-8.6.mga3 |
| Mageia:4 | libvirt | 0 | 1.2.1-1.2.mga4 |
| Red Hat:enterprise_linux:6::client | libvirt | 0 | 0:0.10.2-46.el6_6.2 |
| Red Hat:enterprise_linux:6::client | libvirt-client | 0 | 0:0.10.2-46.el6_6.2 |
| Red Hat:enterprise_linux:6::client | libvirt-debuginfo | 0 | 0:0.10.2-46.el6_6.2 |
| Red Hat:enterprise_linux:6::client | libvirt-devel | 0 | 0:0.10.2-46.el6_6.2 |
| Red Hat:enterprise_linux:6::client | libvirt-lock-sanlock | 0 | 0:0.10.2-46.el6_6.2 |
| Red Hat:enterprise_linux:6::client | libvirt-python | 0 | 0:0.10.2-46.el6_6.2 |
| Red Hat:enterprise_linux:6::computenode | libvirt | 0 | 0:0.10.2-46.el6_6.2 |
| Red Hat:enterprise_linux:6::computenode | libvirt-client | 0 | 0:0.10.2-46.el6_6.2 |
| Red Hat:enterprise_linux:6::computenode | libvirt-debuginfo | 0 | 0:0.10.2-46.el6_6.2 |
| Red Hat:enterprise_linux:6::computenode | libvirt-devel | 0 | 0:0.10.2-46.el6_6.2 |
| Red Hat:enterprise_linux:6::computenode | libvirt-lock-sanlock | 0 | 0:0.10.2-46.el6_6.2 |
| Red Hat:enterprise_linux:6::computenode | libvirt-python | 0 | 0:0.10.2-46.el6_6.2 |
| Red Hat:enterprise_linux:6::server | libvirt | 0 | 0:0.10.2-46.el6_6.2 |
| Red Hat:enterprise_linux:6::server | libvirt-client | 0 | 0:0.10.2-46.el6_6.2 |
| Red Hat:enterprise_linux:6::server | libvirt-debuginfo | 0 | 0:0.10.2-46.el6_6.2 |
| Red Hat:enterprise_linux:6::server | libvirt-devel | 0 | 0:0.10.2-46.el6_6.2 |
| Red Hat:enterprise_linux:6::server | libvirt-lock-sanlock | 0 | 0:0.10.2-46.el6_6.2 |
| Red Hat:enterprise_linux:6::server | libvirt-python | 0 | 0:0.10.2-46.el6_6.2 |
| Red Hat:enterprise_linux:6::workstation | libvirt | 0 | 0:0.10.2-46.el6_6.2 |
| Red Hat:enterprise_linux:6::workstation | libvirt-client | 0 | 0:0.10.2-46.el6_6.2 |
| Red Hat:enterprise_linux:6::workstation | libvirt-debuginfo | 0 | 0:0.10.2-46.el6_6.2 |
| Red Hat:enterprise_linux:6::workstation | libvirt-devel | 0 | 0:0.10.2-46.el6_6.2 |
| Red Hat:enterprise_linux:6::workstation | libvirt-lock-sanlock | 0 | 0:0.10.2-46.el6_6.2 |
| Red Hat:enterprise_linux:6::workstation | libvirt-python | 0 | 0:0.10.2-46.el6_6.2 |
| Red Hat:enterprise_linux:7::client | libvirt | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::client | libvirt-client | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::client | libvirt-daemon | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::client | libvirt-daemon-config-network | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::client | libvirt-daemon-config-nwfilter | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::client | libvirt-daemon-driver-interface | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::client | libvirt-daemon-driver-lxc | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::client | libvirt-daemon-driver-network | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::client | libvirt-daemon-driver-nodedev | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::client | libvirt-daemon-driver-nwfilter | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::client | libvirt-daemon-driver-qemu | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::client | libvirt-daemon-driver-secret | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::client | libvirt-daemon-driver-storage | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::client | libvirt-daemon-kvm | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::client | libvirt-daemon-lxc | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::client | libvirt-debuginfo | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::client | libvirt-devel | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::client | libvirt-docs | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::client | libvirt-lock-sanlock | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::client | libvirt-login-shell | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::client | libvirt-python | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::computenode | libvirt | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::computenode | libvirt-client | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::computenode | libvirt-daemon | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::computenode | libvirt-daemon-config-network | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::computenode | libvirt-daemon-config-nwfilter | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::computenode | libvirt-daemon-driver-interface | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::computenode | libvirt-daemon-driver-lxc | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::computenode | libvirt-daemon-driver-network | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::computenode | libvirt-daemon-driver-nodedev | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::computenode | libvirt-daemon-driver-nwfilter | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::computenode | libvirt-daemon-driver-qemu | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::computenode | libvirt-daemon-driver-secret | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::computenode | libvirt-daemon-driver-storage | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::computenode | libvirt-daemon-kvm | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::computenode | libvirt-daemon-lxc | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::computenode | libvirt-debuginfo | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::computenode | libvirt-devel | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::computenode | libvirt-docs | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::computenode | libvirt-lock-sanlock | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::computenode | libvirt-login-shell | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::computenode | libvirt-python | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::server | libvirt | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::server | libvirt-client | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::server | libvirt-daemon | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::server | libvirt-daemon-config-network | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::server | libvirt-daemon-config-nwfilter | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::server | libvirt-daemon-driver-interface | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::server | libvirt-daemon-driver-lxc | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::server | libvirt-daemon-driver-network | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::server | libvirt-daemon-driver-nodedev | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::server | libvirt-daemon-driver-nwfilter | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::server | libvirt-daemon-driver-qemu | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::server | libvirt-daemon-driver-secret | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::server | libvirt-daemon-driver-storage | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::server | libvirt-daemon-kvm | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::server | libvirt-daemon-lxc | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::server | libvirt-debuginfo | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::server | libvirt-devel | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::server | libvirt-docs | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::server | libvirt-lock-sanlock | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::server | libvirt-login-shell | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::server | libvirt-python | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::workstation | libvirt | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::workstation | libvirt-client | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::workstation | libvirt-daemon | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::workstation | libvirt-daemon-config-network | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::workstation | libvirt-daemon-config-nwfilter | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::workstation | libvirt-daemon-driver-interface | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::workstation | libvirt-daemon-driver-lxc | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::workstation | libvirt-daemon-driver-network | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::workstation | libvirt-daemon-driver-nodedev | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::workstation | libvirt-daemon-driver-nwfilter | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::workstation | libvirt-daemon-driver-qemu | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::workstation | libvirt-daemon-driver-secret | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::workstation | libvirt-daemon-driver-storage | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::workstation | libvirt-daemon-kvm | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::workstation | libvirt-daemon-lxc | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::workstation | libvirt-debuginfo | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::workstation | libvirt-devel | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::workstation | libvirt-docs | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::workstation | libvirt-lock-sanlock | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::workstation | libvirt-login-shell | 0 | 0:1.1.1-29.el7_0.3 |
| Red Hat:enterprise_linux:7::workstation | libvirt-python | 0 | 0:1.1.1-29.el7_0.3 |
| SUSE:Linux Enterprise Desktop 12 | libvirt | 0 | 1.2.5-21.1 |
| SUSE:Linux Enterprise Server 12 | libvirt | 0 | 1.2.5-21.1 |
| SUSE:Linux Enterprise Server for SAP Applications 12 | libvirt | 0 | 1.2.5-21.1 |
| SUSE:Linux Enterprise Software Development Kit 12 | libvirt | 0 | 1.2.5-21.1 |
| SUSE:Linux Enterprise Workstation Extension 12 | libvirt | 0 | 1.2.5-21.1 |
| Ubuntu:14.04:LTS | libvirt | 0 | 1.2.2-0ubuntu13.1.7 |
| openSUSE:Tumbleweed | libvirt | 0 | 2.5.0-1.1 |
Related vulnerabilities
- CVE-2024-2494 A flaw was found in the RPC library APIs of libvirt. Also affects libvirt
- CVE-2024-2496 A NULL pointer dereference flaw was found in the udevConnectListAllInterfaces() function… Also affects libvirt
- CVE-2024-1441 An off-by-one error flaw was found in the udevListInterfacesByStatus() function in… Also affects libvirt
- CVE-2021-4147 A flaw was found in the libvirt libxl driver. Also affects libvirt
- CVE-2016-5008 libvirt before 2.0.0 improperly disables password checking when the password on a VNC… Also affects libvirt
- CVE-2011-4600 The networkReloadIptablesRules function in network/bridge_driver.c in libvirt before… Also affects libvirt
- CVE-2014-0179 libvirt 0.7.5 through 1.2.x before 1.2.5 allows local users to cause a denial of service… Also affects libvirt
- CVE-2023-3750 A flaw was found in libvirt. Also affects libvirt