Bug 2550363 (CVE-2026-109971) - CVE-2026-109971 clevis: clevis: PKCS#11 token PIN exposed on command line via pkcs11-tool
Summary: CVE-2026-109971 clevis: clevis: PKCS#11 token PIN exposed on command line via...
Keywords:
Status: NEW
Alias: CVE-2026-109971
Deadline: 2026-12-07
Product: Security Response
Classification: Other
Component: vulnerability
Version: unspecified
Hardware: All
OS: Linux
medium
medium
Target Milestone: ---
Assignee: Product Security
QA Contact:
URL:
Whiteboard:
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 2026-10-13 11:35 UTC by OSIDB Bzimport
Modified: 2026-10-14 09:07 UTC (History)
18 users (show)

Fixed In Version:
Clone Of:
Environment:
Last Closed:
Embargoed:


Attachments (Terms of Use)

Description OSIDB Bzimport 2026-10-13 11:35:13 UTC
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.


Note You need to log in before you can comment on or make changes to this bug.