🇰🇷 한글 설명
OpenStack Ironic의 리버스 프록시 모드에서 HTTP 기본 인증이 HTTPD 컨테이너에서만 검증되고 Ironic 서비스 자체에서는 검증되지 않아, 제어 평면의 Pod이나 로컬 사용자가 localhost:6388의 private 포트로 인증 없이 Ironic API에 접근할 수 있습니다. 이를 통해 공격자는 베어메탈 머신을 손상시키거나 새로운 이미지로 재프로비저닝할 수 있습니다.
💡 쉬운 설명
OpenStack 시스템에서 보안 검사가 중간 계층(리버스 프록시)에만 있어서, 직접 포트로 접근하면 누구나 승인 없이 들어갈 수 있습니다. 이를 악용하면 물리 서버를 마음대로 제어할 수 있습니다.
🇺🇸 원문 (English)
Ironic-image is an OpenStack Ironic deployment packaged and configured by Metal3. When the reverse proxy mode is enabled by the `IRONIC_REVERSE_PROXY_SETUP` variable set to `true`, 1) HTTP basic credentials are validated on the HTTPD side in a separate container, not in the Ironic service itself and 2) Ironic listens in host network on a private port 6388 on localhost by default. As a result, when the reverse proxy mode is used, any Pod or local Unix user on the control plane Node can access the Ironic API on the private port without authentication. A similar problem affects Ironic Inspector (`INSPECTOR_REVERSE_PROXY_SETUP` set to `true`), although the attack potential is smaller there. This issue affects operators deploying ironic-image in the reverse proxy mode, which is the recommended mode when TLS is used (also recommended), with the `IRONIC_PRIVATE_PORT` variable unset or set to a numeric value. In this case, an attacker with enough privileges to launch a pod on the control plane with host networking can access Ironic API and use it to modify bare-metal machine, e.g. provision them with a new image or change their BIOS settings. This vulnerability is fixed in 24.1.1.
📍 영향받는 시스템
OpenStack Ironic-image 24.1.0 이하, IRONIC_REVERSE_PROXY_SETUP=true 설정 시
⚔️ 공격 벡터
호스트 네트워킹이 활성화된 제어 평면 Pod에서 localhost:6388로 직접 Ironic REST API 요청 전송
🛡️ 대응 방법
ironic-image를 24.1.1 이상으로 업그레이드하거나 IRONIC_PRIVATE_PORT를 특정 값으로 설정하여 포트 바인딩 제한
🔧 검증 코드
6388 포트에서 인증 없이 노드 목록이 반환되면 취약, 거부되거나 401 응답하면 보호됨
curl -s http://localhost:6388/v1/nodes 2>/dev/null | grep -q 'nodes' && echo 'vulnerable' || echo 'protected'