기타 Hacker News · 2026-10-16

37년 묵은 BSD 커널 버그 털어서 최신 보안 뚫고 루트 권한 딴 해커

핵심 요약
  • 보안 연구진이 OpenBSD 커널에서 37년 전 원조 BSD 코드에 기인한 공유 메모리 카운터 부호 정수 오버플로 취약점을 발견했습니다.
  • 프로세스 포크 반복으로 카운터를 음수로 꺾어 UAF와 Out-of-Bounds 쓰기를 유발, KARL·SMAP·SMEP 방어를 뚫고 로컬 루트 권한을 획득했습니다.
  • 해당 취약점은 공식 패치되었으며 연구진은 커널 메모리 할당자 무작위화 등 근본적인 구조 개선 방안을 제시했습니다.
요약 보안 연구 기업 Calif의 연구진이 보안성으로 유명한 오픈소스 운영체제 OpenBSD에서 무려 37년 동안 방치되어 있던 원시 BSD 시절의 커널 버그를 발굴하고, 이를 통해 최신 방어 체계를 무력화하며 최고 관리자 권한(root shell)을 획득하는 익스플로잇 과정을 공개했습니다. 이번에 발견된 취약점의 발단은 원조 BSD 커널 소스 코드 시절까지 거슬러 올라갑니다. 당시 공유 메모리 연결 카운터(shm_nattch)가 부호 있는 16비트 정수(signed short)로 정의되어 있어 최대치가 32,767에 불과했습니다. 연구진은 프로세스 fork를 반복하여 공유 메모리 연결 횟수를 강제로 오버플로시켰고, 카운터가 음수(-32,643)로 반전되도록 유도했습니다. 이로 인해 발생한 정수 오버플로가 레이스 컨디션을 통한 Use-After-Free 취약점으로 이어졌으며, 커널의 별도 Out-of-Bounds 쓰기 버그와 맞물려 로컬 권한 상승(LPE)이 가능해졌습니다. 특히 연구진은 OpenBSD의 핵심 보안 메커니즘인 KARL(Kernel Address Randomized Link), SMAP, SMEP이 모두 활성화된 상태에서 정보 유출 취약점 도움 없이 단독으로 루트 권한을 획득하는 데 성공했습니다. SysV 공유 메모리 세그먼트 해제와 프로세스 포크, sysctl 통계를 통한 힙 그루밍, 소켓 옵션 조작 및 close 과정에서의 원자적 감소 연산을 이용해 페이지 테이블 엔트리(PTE) 매핑을 유저에서 슈퍼바이저 접근 권한으로 변조했습니다. 연구진은 OpenBSD가 KARL을 통해 커널 바이너리를 재링크하지만, 초기 부팅 시점의 메모리 할당자 등이 결정론적(deterministic)이어서 하드웨어 재부팅 후에도 주요 구조체 포인터 주소가 예측 가능하다는 점을 파고들었습니다. 해당 취약점들은 OpenBSD errata 패치로 공식 해결되었으며, 연구진은 향후 유사한 공격을 차단하기 위한 안전한 언링크(safe-unlinking), PTE 베이스 무작위화, 부팅 메모리 할당자 무작위화 등의 구조적 방어 기법들을 제안했습니다.
Sponsored · 광고