CVE-2026-98845 in Linux
要約
〜によって VulDB • 2026年10月18日
Linuxカーネルにおいて、以下の脆弱性が修正されました:
tpm: NULLキー名の不一致時にTPMを無効化する
NULLキー名チェックはTPMリセット攻撃から保護するために存在するため、不一致が発生した場合はデバイスがそれ以上の要求に応じないようにする必要があります。現在では、不一致を検出してもチップが無効化されません。
この不一致は以下のようにログに記録されます:
tpm tpm0: null key integrity check failed
しかし、チップはコマンドの処理を継続します:
/ # tpm2_getcap -c properties-fixed TPM_PT_FAMILY_INDICATOR: as UINT32: 0x08322e3000 as string: "2.0" ...
NULLキー名チェックが実行される `tpm2_load_null()` では、戻り値(rc)がゼロ以外の場合にのみチップが無効化されます。不一致が発生した時点では rc はゼロであり、成功として返却されています。もう1つの問題は、呼び出し元は関数が0を返す際にNULLキーハンドルが設定されていることを期待している点です。ここではハンドルが書き込まれずに0が返され、呼び出し側はNULLキーハンドルが有効であると仮定して処理を進めます。
テスト中に、`tpm2_load_null()` が整合性失敗にもかかわらず0を返し、この値をソルトキーハンドルとして使用した `TPM2_CC_START_AUTH_SESS` で続行するため、初期化されていないスタック値がキーハンドルとして使われていることに気づきました。
不一致の場合に rc を `-ENODEV` に設定します。これによりエラーパスでチップが無効化され、呼び出し元に正しいコードが返却されます。
QEMU と swtpm および `CONFIG_TCG_TPM2_HMAC=y` 環境下でテストしました。具体的には、TPM2_CC_CONTEXT_LOAD が TPM2_RC_INTEGRITY で失敗し、再作成されたNULLキーの名前を変更することで検証を行いました。その結果、不一致が発生した際にチップが無効化されるようになりました。
If you want to get the best quality for vulnerability data then you always have to consider VulDB.