🇰🇷 한글 설명
Linux 커널의 TPM2 세션 처리 과정에서 비동기 KPP(Key Pair Parameter) 작업 완료를 기다리지 않고 메모리를 해제하여 발생하는 취약점입니다. 비동기 백엔드를 사용하는 환경에서 작업이 완료되기 전 요청 객체가 해제되어 커널 메모리 오류(Use-After-Free)를 유발할 수 있습니다.
💡 쉬운 설명
컴퓨터의 보안 칩(TPM)이 암호 계산을 하는 동안, 계산이 끝나기도 전에 관련 데이터를 지워버려 시스템이 충돌하거나 오류가 발생하는 문제입니다. 이 과정은 사용자가 직접 실행하지 않아도 시스템 내부에서 자동으로 발생할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
tpm: tpm2-sessions: wait for async KPP completion in tpm_buf_append_salt
tpm_buf_append_salt() in drivers/char/tpm/tpm2-sessions.c calls
crypto_kpp_generate_public_key() and crypto_kpp_compute_shared_secret()
without installing a completion callback, discards both return values,
and immediately frees the kpp_request via kpp_request_free(). When the
resolved ecdh-nist-p256 KPP backend is asynchronous (atmel-ecc, HPRE,
keembay-ocs), either operation returns -EINPROGRESS and the deferred
completion worker dereferences the freed request.
The path fires automatically from the hwrng_fillfn kernel thread via
tpm_get_random -> tpm2_get_random -> tpm2_start_auth_session ->
tpm_buf_append_salt on every entropy poll, without any userland action.
Install crypto_req_done as the completion callback, wrap both KPP
operations in crypto_wait_req(), and propagate errors to the caller.
The wait is a no-op for synchronous backends.
📍 영향받는 시스템
비동기 KPP 백엔드(atmel-ecc, HPRE, keembay-ocs 등)를 사용하는 Linux 커널 시스템
⚔️ 공격 벡터
사용자 개입 없이 커널의 엔트로피 폴링(hwrng_fillfn) 과정에서 자동으로 트리거되는 로컬 취약점
🛡️ 대응 방법
커널 패치를 통해 crypto_wait_req()를 적용하여 KPP 작업 완료를 보장하도록 업데이트해야 합니다.
🔧 검증 코드
현재 실행 중인 커널 버전을 확인하여 해당 취약점이 해결된 최신 패치 버전인지 확인합니다.