Images have cryptographic signature verification enabled
OpenStack images are evaluated to verify that all four signature properties are configured: img_signature, img_signature_hash_method, img_signature_key_type, and img_signature_certificate_uuid. Signed images allow Nova to verify integrity before booting, detecting tampering or corruption.
Risk
Unsigned images can be tampered with to inject backdoors, malware, or rootkits without detection. Without signature verification, compromised storage backends or man-in-the-middle attacks can modify images between upload and boot. Nova cannot verify the integrity of unsigned images, allowing corrupted or malicious images to be launched.
Run this check with Prowler
Run in Prowler Cloudprowler openstack --checks image_signature_verification_enabledRecommendation
Sign all production images using Barbican-managed certificates. Enable signature verification in Nova (verify_glance_signatures=True). Implement an image signing pipeline in CI/CD. Regularly rotate signing certificates and audit image signatures.
Remediation
Other
Check Code
"""OpenStack Image Signature Verification Check."""
from typing import List
from prowler.lib.check.models import Check, CheckReportOpenStack
from prowler.providers.openstack.services.image.image_client import image_client
class image_signature_verification_enabled(Check):
"""Ensure images have cryptographic signature verification properties set."""
def execute(self) -> List[CheckReportOpenStack]:
"""Execute image_signature_verification_enabled check.
Iterates over all images and verifies that all four signature
properties are set: img_signature, img_signature_hash_method,
img_signature_key_type, and img_signature_certificate_uuid.
Returns:
list[CheckReportOpenStack]: List of findings for each image.
"""
findings: List[CheckReportOpenStack] = []
for image in image_client.images:
report = CheckReportOpenStack(metadata=self.metadata(), resource=image)
has_all_signatures = all(
[
image.img_signature,
image.img_signature_hash_method,
image.img_signature_key_type,
image.img_signature_certificate_uuid,
]
)
if has_all_signatures:
report.status = "PASS"
report.status_extended = f"Image {image.name} ({image.id}) has all signature verification properties configured."
else:
report.status = "FAIL"
report.status_extended = f"Image {image.name} ({image.id}) does not have all signature verification properties configured."
findings.append(report)
return findings