Bug 2552101 (CVE-2026-110522)

Summary: CVE-2026-110522 oc-mirror: oc-mirror: execution of unsigned opm binary extracted from catalog image in v1 cache rebuild
Product: [Other] Security Response Reporter: OSIDB Bzimport <bzimport>
Component: vulnerabilityAssignee: Product Security <prodsec-ir-bot>
Status: NEW --- QA Contact:
Severity: high Docs Contact:
Priority: high    
Version: unspecifiedCC: akhatavk, aos-team-art-private, asdas, dpaolell, jdelft, jupierce, lgarciaa, mbiarnes, ppalepu, ppostler, prdhamdh, security-response-team, sghai, sidsharm, suppawar, vlaad
Target Milestone: ---Keywords: Security
Target Release: ---   
Hardware: All   
OS: Linux   
Whiteboard:
Fixed In Version: Doc Type: ---
Doc Text:
A flaw was found in oc-mirror's legacy v1 catalog cache rebuild. When the --build-catalog-cache flag is used, oc-mirror extracts an opm binary from the remote operator catalog image and executes it on the host without verifying its signature, digest, or integrity. An attacker who publishes a malicious catalog image to a registry could supply a trojanized opm binary that is executed with the privileges of the user running oc-mirror, resulting in arbitrary code execution on the mirroring host.
Story Points: ---
Clone Of: Environment:
Last Closed: Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description OSIDB Bzimport 2026-10-14 07:36:14 UTC
When rebuilding an operator catalog cache, oc-mirror v1's processCatalogRefs() (https://github.com/openshift/oc-mirror/blob/main/v1/pkg/cli/mirror/catalog_images.go#L312) function executes an opm binary extracted from a remote catalog image without any integrity verification.

The copyOPMBinary() function (https://github.com/openshift/oc-mirror/blob/main/v1/pkg/cli/mirror/catalog_images.go#L591-L640) reads the catalog image's ENTRYPOINT (L600) or CMD (L604-606) to locate the opm binary path, extracts it from the image layers via extractCatalog() (L613), and copies it to the workspace bin/ directory. In processCatalogRefs(), when withCacheRegeneration (L333) is true, this binary is set as opmCmdPath = filepath.Join(artifactDir, config.OpmBinDir, "opm") (L361) and executed directly via exec.Command(opmCmdPath, "serve", ...) (L376) on the operator's workstation. There is no signature verification, no digest check, and no integrity validation of the binary before execution.

A malicious operator catalog image can supply an arbitrary executable as its opm binary. When an administrator mirrors this catalog with --build-catalog-cache, the attacker-controlled binary is executed with the privileges of the user running oc-mirror.

This vulnerability is independent of the path traversal issue tracked as CVE-2026-101295. The CWE-22 fix (sanitizeArchivePath) does not mitigate this issue — the opm binary is extracted to a valid, sanitized path within the workspace and then executed without integrity checks.

The OPM_BINARY environment variable (L358-359), if set, causes oc-mirror to use a trusted local binary instead of the extracted one, fully mitigating this issue.

oc-mirror v2 does not execute extracted binaries and is not affected. v1 is deprecated since OCP 4.18 but still shipped and functional.