Port 9001 is used by Supervisord (process manager XML-RPC), MinIO console (S3-compatible storage web UI), and ETH2 beacon nodes. Supervisord's XML-RPC on port 9001 allows starting/stopping processes – unauthenticated access enables arbitrary process control. MinIO console requires authentication but exposes bucket management.
Port Number
9001
Protocol
TCP
Service
Supervisor XML-RPC / MinIO Console
Range
IANA Registered (1024–49151)
Test Supervisord XML-RPC access – if this returns state without auth, the service is dangerously exposed
curl -s http://localhost:9001/RPC2 -d '<?xml version="1.0"?><methodCall><methodName>supervisor.getState</methodName></methodCall>'List all Supervisord-managed processes and their current state via XML-RPC on port 9001
supervisorctl -s http://localhost:9001 statusCheck MinIO console health endpoint – should not leak environment variables (patched in RELEASE.2023-03-20)
curl -s http://localhost:9001/minio/health/liveIdentify whether port 9001 is Supervisord (python), MinIO (minio), or beacon node – determines security context
ss -tlnp | grep 9001Audit Supervisord configuration for authentication and bind address – both must be set
grep -n 'inet_http_server\|port\|username\|password' /etc/supervisor/supervisord.confsupervisord.conf: [inet_http_server] port=127.0.0.1:9001 username=admin password=pass
minio server /data --console-address :9001
supervisorctl -s http://localhost:9001 statusPort 9001 has dual heritage. Supervisord adopted it circa 2004 as the default inet_http_server port for its XML-RPC process management interface – a design that predated container orchestration and assumed trusted networks. MinIO chose port 9001 for its web console in 2020 (separating console from the S3 API on 9000) during the transition from browser-based to standalone console. CVE-2017-11610 made Supervisord on port 9001 notorious – it demonstrated that even authenticated Supervisord users could achieve RCE through XML-RPC method traversal, affecting thousands of Docker containers and legacy Linux deployments that used Supervisord as init.
How do I secure Supervisord on port 9001?
1) Set [inet_http_server] port=127.0.0.1:9001 (never 0.0.0.0). 2) Set username and password (even local-only, due to CVE-2017-11610 RCE path). 3) Upgrade to Supervisord 3.3.3+ which patches the XML-RPC traversal. 4) For remote access, use Unix socket + SSH: [unix_http_server] file=/var/run/supervisor.sock, then SSH tunnel. 5) Consider migrating to systemd for process management – it has no network listener attack surface.
Can I run both Supervisord and MinIO console on the same server?
Not on the same port. Change one: either set Supervisord to a different port ([inet_http_server] port=127.0.0.1:9002) or start MinIO with --console-address :9002. Both services on the same host is fine for development but in production, Supervisord should use Unix socket only (no TCP listener) and MinIO console should be behind a reverse proxy.
Is CVE-2017-11610 still exploitable today?
Yes, if running Supervisord < 3.3.3 with inet_http_server enabled. The exploit uses Python's nested attribute traversal in XML-RPC: supervisor.supervisord.options.warnings.linecache.os.system('COMMAND'). Patch: upgrade Supervisord. Mitigate: remove [inet_http_server] entirely and use Unix socket + supervisorctl. Docker images based on old base images frequently ship vulnerable Supervisord versions.