CVE-2016-9223
📋 TL;DR
This vulnerability allows unauthenticated remote attackers to install Docker containers with high privileges on Cisco CloudCenter Orchestrator systems. It affects all CCO deployments where Docker Engine TCP port 2375 is open and bound to 0.0.0.0. Attackers can exploit this to gain full control of affected systems.
💻 Affected Systems
- Cisco CloudCenter Orchestrator (CCO), formerly CliQr
📦 What is this software?
⚠️ Risk & Real-World Impact
Worst Case
Complete system compromise allowing attackers to install malicious containers, exfiltrate data, pivot to other systems, and establish persistent backdoors.
Likely Case
Attackers gain root-level access to deploy containers, potentially stealing sensitive data, disrupting services, or using the system for further attacks.
If Mitigated
No impact if Docker Engine is properly secured with authentication and network restrictions.
🎯 Exploit Status
Simple Docker API calls can exploit this vulnerability without authentication. Public exploit scripts exist for Docker API vulnerabilities.
🛠️ Fix & Mitigation
✅ Official Fix
Patch Version: Not version-specific - configuration fix required
Vendor Advisory: https://tools.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-20161221-cco
Restart Required: Yes
Instructions:
1. Secure Docker Engine configuration. 2. Disable TCP port 2375 or restrict binding. 3. Enable TLS authentication. 4. Restart Docker service.
🔧 Temporary Workarounds
Disable Docker TCP Port
linuxRemove or disable Docker Engine TCP port 2375 exposure
Edit /etc/docker/daemon.json to remove -H tcp://0.0.0.0:2375
systemctl restart docker
Bind to Localhost Only
linuxChange Docker binding to localhost only instead of all interfaces
Edit Docker config to use -H tcp://127.0.0.1:2375 instead of 0.0.0.0
systemctl restart docker
🧯 If You Can't Patch
- Implement strict network ACLs to block external access to port 2375
- Deploy host-based firewall rules to restrict Docker port access to trusted IPs only
🔍 How to Verify
Check if Vulnerable:
Check if Docker is listening on TCP port 2375 bound to 0.0.0.0: netstat -tlnp | grep 2375 or ss -tlnp | grep 2375
Check Version:
docker version
Verify Fix Applied:
Verify port 2375 is not listening on external interfaces: netstat -tlnp | grep 2375 should show only localhost or no output
📡 Detection & Monitoring
Log Indicators:
- Unauthenticated Docker API calls in Docker logs
- Unexpected container creation events
- Connection attempts to port 2375 from unauthorized sources
Network Indicators:
- External connections to TCP port 2375
- Docker API requests without authentication headers
SIEM Query:
source_port=2375 AND (dest_ip!=127.0.0.1 OR protocol=TCP)