Bug 2550363 (CVE-2026-109971)
| Summary: | CVE-2026-109971 clevis: clevis: PKCS#11 token PIN exposed on command line via pkcs11-tool | ||
|---|---|---|---|
| Product: | [Other] Security Response | Reporter: | OSIDB Bzimport <bzimport> |
| Component: | vulnerability | Assignee: | Product Security <prodsec-ir-bot> |
| Status: | NEW --- | QA Contact: | |
| Severity: | medium | Docs Contact: | |
| Priority: | medium | ||
| Version: | unspecified | CC: | akhatavk, aos-team-art-private, asdas, dpaolell, jdelft, jupierce, lgarciaa, mbiarnes, ppalepu, ppostler, prdhamdh, rhel-process-autobot, security-response-team, sghai, sidsharm, suppawar, vlaad, watson-tool-maintainers |
| Target Milestone: | --- | Keywords: | Security |
| Target Release: | --- | ||
| Hardware: | All | ||
| OS: | Linux | ||
| Whiteboard: | |||
| Fixed In Version: | Doc Type: | --- | |
| Doc Text: |
A flaw was found in the clevis PKCS#11 pin. The clevis-decrypt-pkcs11 script passes the PKCS#11 token PIN as a command-line argument to pkcs11-tool, making it visible to any local user through process listing or the /proc filesystem.
|
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: | |||
| Deadline: | 2026-12-07 | ||
The clevis-decrypt-pkcs11 script passes the PKCS#11 token PIN via the -p command-line argument to pkcs11-tool at lines 121-122: pkcs11-tool --login --decrypt --input-file ${ENC} \ -p ${PIN_value} ${module_opt} ${mechanism_option} ${slot_opt} This makes the PIN visible to any local user via /proc/<pid>/cmdline or ps aux for the lifetime of the pkcs11-tool process. Unlike the daemon's -k flag (which is not used in production), this code path is exercised in the default production flow on every boot. The PIN is the authentication credential for the PKCS#11 token. An attacker who captures the PIN and has physical access to the token can perform unauthorized private key operations. The pkcs11-tool binary supports reading the PIN from an environment variable via the env: prefix on the -p flag (e.g., -p env:CLEVIS_PKCS11_PIN), which would prevent command-line exposure since /proc/<pid>/environ is mode 0400 (owner-only). This is supported by pkcs11-tool's util_get_pin() function in OpenSC source (src/tools/util.c). Additionally, the variables ${ENC}, ${PIN_value}, ${module_opt}, ${mechanism_option}, ${slot_opt} are all passed unquoted to pkcs11-tool, which is a secondary correctness issue (word splitting/globbing) but not security-critical. Affected files: src/pins/pkcs11/clevis-decrypt-pkcs11 (lines 121-122) Versions affected: >= v21 through v22 (latest) Steps to reproduce: 1. Boot a system using Clevis PKCS#11 pin for LUKS decryption. 2. During boot, as any local user: while true; do ps aux | grep '[p]kcs11-tool.*-p' && break; sleep 0.01; done 3. If the timing window is hit, the PIN appears in the pkcs11-tool command-line arguments.