OSSN-0106: Ironic API ramdisk endpoints require network-level access controls

Summary

The Ironic Bare Metal API combines authenticated endpoints for client use with unauthenticated endpoints for coordination with the Ironic Python Agent ramdisk into a single API service. Depending on the deployment architecture, this can expose security risks if the unauthenticated endpoints are reachable from untrusted networks.

Affected Services / Software

  • ironic (>=6.2.0) - /v1/lookup and /v1/heartbeat: API version 1.22 (Newton, ironic 6.2.0) - /v1/continue_inspection: API version 1.84 (2024.2)

Discussion

Ironic has three endpoints which allow unauthenticated access:

  • GET /v1/lookup

  • POST /v1/heartbeat/{node_ident}

  • POST /v1/continue_inspection

These endpoints are a documented aspect of Ironic’s architecture and are covered in the Ironic security guide. They already have significant security controls to mitigate risk, such as bootstrapping into credentials via the agent token mechanism (mandatory since the Victoria release), callback URL validation, and defaulting to limiting access to nodes whose provisioning state requires use of them.

Regardless of authentication methodology, operators in multi-tenant or untrusted environments should deploy a split-horizon API configuration where the unauthenticated endpoints are not reachable from public or tenant networks. Using Keystone does not eliminate the need for this network-level separation. Previously, Ironic only provided policy-based overrides to disable these endpoints, which required Keystone and left operators using HTTP basic auth or noauth without an equivalent control. A new [api]enable_ramdisk_endpoints configuration option is being added to allow any operator, regardless of authentication methodology, to disable these endpoints on a per-service basis.

For full details on the security model around these endpoints, refer to the Ironic security guide: https://docs.openstack.org/ironic/latest/admin/security.html

Contacts / References

Author: Julia Kreger (Red Hat), Jay Faulkner (G-Research OSS)