🔍 CVE-2026-99059

0.0
CVSS Score
UNKNOWN
2026-10-23
2026-10-23 13:17
✅ 완료

🇰🇷 한글 설명

Linux 커널의 WireGuard noise 프로토콜 구현에서 동일한 핸드셰이크 응답을 여러 스레드가 동시에 처리할 때 중간에 새 핸드셰이크 initiation이 끼어들어 상태가 되돌아가는 경쟁 조건(race condition)이 존재했습니다. 이로 인해 동일한 세션이 중복 생성될 수 있었으며, 패치는 스택의 임시 개인키와 피어의 최신 핸드셰이크 상태 키를 비교하여 이를 차단합니다.

💡 쉬운 설명

VPN 연결을 맺는 과정에서 여러 작업이 동시에 같은 응답을 처리하다 보니 순서가 꼬여 같은 연결 정보가 두 번 만들어질 수 있었습니다. 이제는 이런 상황이 발생하지 않도록 검사가 추가되었습니다.

🇺🇸 원문 (English)

In the Linux kernel, the following vulnerability has been resolved: wireguard: noise: reject response consumption after intermediate initiation Two threads begin processing the identical response message, received twice. The first thread, A, runs. While it's running, the second one, B, gets partway through, and during that slow calculation, or even while blocking on down_write(), A completes and then also a handshake initiation that's already been queued up runs in thread C, which itself takes that same down_write(). The handshake initiation creation succeeds, and sets the state back to waiting-for-response, and calls up_write(), at which point thread B resumes, because either its finished its calculations or was finally allowed to acquire down_write(). Thread B then copies the state back to the peer, and begins a new session, using that state, which is the same session as the one made in thread A. Thread A Thread B Thread C down_read() sA = handshake->state memcpy(cA, handshake->crypto) up_read() if (sA != 1) goto fail slow_crypto(cA) down_read() sB = handshake->state memcpy(cB, handshake->crypto) up_read() if (sB != 1) goto fail slow_crypto(cB) down_write() if (sA != handshake->state) goto fail memcpy(handshake->crypto, cA) handshake->state = 2 up_write() down_write() if (handshake->state != 2) goto fail derive_session(handshake->crypto) up_write() down_write() slow_crypto(handshake->crypto) handshake->state = 1 up_write() down_write() if (sB != handshake->state) goto fail memcpy(handshake->crypto, cB) handshake->state = 2 up_write() down_write() if (handshake->state != 2) goto fail derive_session(handshake->crypto) up_write() This seems basically impossible to hit in a meaningful way in practice, but ensure that it absolutely cannot happen by comparing the ephemeral private key that's on the stack with the latest one that the peer's handshake state has.

📍 영향받는 시스템

WireGuard가 포함된 Linux 커널 (패치 이전 버전, 정확한 범위는 CVE 데이터 확인 필요)

⚔️ 공격 벡터

네트워크상에서 동일한 핸드셰이크 응답 메시지를 중복 전달하고 타이밍을 조작하여 경쟁 조건을 유발하는 방식으로, 실제 악용 가능성은 매우 낮은 것으로 평가됨

🛡️ 대응 방법

배포판의 최신 Linux 커널 업데이트를 적용하여 패치된 버전으로 재부팅

🔧 검증 코드

출력된 커널 버전을 배포판 보안 공지에서 해당 CVE 패치가 포함된 버전과 비교하여, 같거나 높으면 패치된 것이며 낮으면 커널 업데이트가 필요합니다.

Shell / Script
uname -r

💻 영향받는 소프트웨어

Linux Kernel