🔍 CVE-2026-23316

5.5
CVSS Score
MEDIUM
2026-03-25
2026-11-05 22:18
✅ 완료

🇰🇷 한글 설명

Linux 커널의 IPv4 멀티패스 해시 시드 처리 코드에서 구조체 전체를 READ_ONCE/WRITE_ONCE로 접근하면서 발생한 정렬(alignment) 문제를 수정합니다. Clang과 LTO 환경에서 64비트 ldar 명령이 4바이트 정렬 주소에 실행되어 ARM64에서 커널 패닉이 발생할 수 있으며, 쓰기 측도 두 개의 32비트 쓰기로 나뉘어 원자성이 깨지는 문제가 함께 수정되었습니다.

💡 쉬운 설명

리눅스 커널이 네트워크 경로 선택에 쓰는 내부 값을 잘못된 방식으로 읽고 써서, 특정 환경(ARM64 + Clang LTO)에서 시스템이 갑자기 멈출 수 있었습니다. 이번 패치는 값을 올바른 크기 단위로 읽고 쓰도록 바로잡아 이 문제를 해결합니다.

🇺🇸 원문 (English)

In the Linux kernel, the following vulnerability has been resolved: net: ipv4: fix ARM64 alignment fault in multipath hash seed `struct sysctl_fib_multipath_hash_seed` contains two u32 fields (user_seed and mp_seed), making it an 8-byte structure with a 4-byte alignment requirement. In `fib_multipath_hash_from_keys()`, the code evaluates the entire struct atomically via `READ_ONCE()`: mp_seed = READ_ONCE(net->ipv4.sysctl_fib_multipath_hash_seed).mp_seed; While this silently works on GCC by falling back to unaligned regular loads which the ARM64 kernel tolerates, it causes a fatal kernel panic when compiled with Clang and LTO enabled. Commit e35123d83ee3 ("arm64: lto: Strengthen READ_ONCE() to acquire when CONFIG_LTO=y") strengthens `READ_ONCE()` to use Load-Acquire instructions (`ldar` / `ldapr`) to prevent compiler reordering bugs under Clang LTO. Since the macro evaluates the full 8-byte struct, Clang emits a 64-bit `ldar` instruction. ARM64 architecture strictly requires `ldar` to be naturally aligned, thus executing it on a 4-byte aligned address triggers a strict Alignment Fault (FSC = 0x21). Fix the read side by moving the `READ_ONCE()` directly to the `u32` member, which emits a safe 32-bit `ldar Wn`. Furthermore, Eric Dumazet pointed out that `WRITE_ONCE()` on the entire struct in `proc_fib_multipath_hash_set_seed()` is also flawed. Analysis shows that Clang splits this 8-byte write into two separate 32-bit `str` instructions. While this avoids an alignment fault, it destroys atomicity and exposes a tear-write vulnerability. Fix this by explicitly splitting the write into two 32-bit `WRITE_ONCE()` operations. Finally, add the missing `READ_ONCE()` when reading `user_seed` in `proc_fib_multipath_hash_seed()` to ensure proper pairing and concurrency safety.

📍 영향받는 시스템

패치가 적용되지 않은 Linux 커널 (ARM64 아키텍처, Clang 및 LTO로 빌드된 커널에서 커널 패닉 위험; 배포판별 수정 버전은 각 벤더 보안 공지 참조)

⚔️ 공격 벡터

원격 공격 경로는 명확히 보고되지 않았으며, 로컬에서 멀티패스 해시 시드 sysctl을 변경하는 작업 등 정상 동작 중 발생하는 정렬 오류·원자성 문제에 해당하여 시스템 안정성(서비스 거부) 또는 값 손상 위험이 있습니다.

🛡️ 대응 방법

배포판 벤더가 제공하는 최신 보안 업데이트 커널로 업그레이드하고 재부팅하거나, 해당 커밋을 포함한 커널 버전을 사용하세요.

🔧 검증 코드

출력된 커널 버전을 배포판 보안 공지에서 CVE-2026-23316 수정이 포함된 패키지 버전과 비교하여, 현재 버전이 같거나 더 새로우면 패치된 것이고 이전 버전이면 업데이트가 필요합니다.

Shell / Script
uname -r && (dpkg -l linux-image-$(uname -r) 2>/dev/null || rpm -q kernel 2>/dev/null) | head -5

📊 CVSS Vector String

CVSS Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H

💻 영향받는 소프트웨어

Linux Kernel