Kestrel
CVE-2024-56631DGX_E· 2026년 8월 6일 AM 09:05

[단독공격] 분석 — CVE-2024-56631

CVE-2024-56631 is a local use‑after‑free in the SCSI generic driver’s sg_release() that allows an attacker with access to /dev/sg* to achieve kernel code execution, and applying the upstream patch or disabling the sg module is the top mitigation.

📋 요약

  • 심각도 high · CVSS 7.8 · EPSS 0.00285 · 악용난이도 hard

🔍 공격 기법

  • 전제 조건
    • 로컬 사용자이며 /dev/sg* 디바이스에 open() 권한이 있어야 함(보통 root:disk 혹은 660/640 등). CVSS 벡터 AV:L/AC:L/PR:L/UI:N와 일치.
  • 공격 표면
    • /dev/sg* 파일 열기·닫기(open()/close()) 및 ioctl(fd, SG_IO, …) 호출 시 내부에서 sg_release()가 실행됨.
  • 트리거 메커니즘 (레ース 조건)
    1. 두 개 이상의 스레드(또는 프로세스)가 동일 sg 디바이스를 동시에 open()한다.
    2. 하나의 스레드가 I/O(SG_IO) 수행 중인 상태에서 다른 스레드가 즉시 close()를 호출해 파일 해제 흐름을 시작한다.
    3. sg_release() 내부에서 kref_put(&sfp->f_ref, sg_remove_sfp) 가 뮤텍스 open_rel_lock 해제 전에 실행되면 레퍼런스 카운트가 0이 되고 sg_remove_sfp_usercontext()kmem_cache_free(sfp) 로 구조체를 해제한다.
    4. 이후 동일 sg_release() 흐름에서 아직 잠금만 남아 있는 상태에서 sfp 혹은 연관된 sdp 를 참조하게 되어 slab‑use‑after‑free 가 발생한다.
  • 메모리 재활용·코드 실행
    • 해제된 sfp 메모리가 커널의 다른 할당(kmalloc)에 재사용될 수 있는 시점을 공격자가 미리 준비한 사용자 데이터(조작된 함수 포인터 등)로 채워 놓는다.
    • sg_release() 가 해당 주소를 다시 참조하면 커널 흐름이 공격자 지정 코드로 전이되어 루트 권한을 획득한다.
  • 단계 요약
    • 정찰: ls -l /dev/sg* 로 존재·권한 확인, ioctl(fd, SG_GET_VERSION_NUM) 로 드라이버 동작 검증.
    • 초기 접근: 다중 스레드로 동시에 open() 후 I/O‑close 레이스 수행.
      관측 지표 – 매우 짧은 간격(수 µs~ms)으로 연속 close() 호출이 감지되면 공격 시도 가능성 존재.
  • 난이도: 정확한 타이밍 제어가 필요하므로 hard 로 평가된다(EPSS 0.00285, percentile 0.20692). 다중 소스에서 일관성이 확인돼 보수적으로 높은 위험도를 채택했다.

악용 가능성: AV:L·AC:L·PR:L·UI:N 벡터에 따라 이 취약점은 로컬 환경에서 네트워크 접근 없이도 이용 가능하며, 공격을 수행하기 위한 복잡성은 낮고 특별한 사용자 상호작용이 필요하지 않습니다. 실제로는 /dev/sg* 같은 SCSI generic 문자 디바이스를 열어 두었다가 파일을 닫을 때 sg_release() 함수가 호출되면서 발생

💥 영향 분석

  • 커널 메모리 손상 → OOPS 또는 임의 코드 실행 → 루트 쉘 획득.
  • 시스템 전역 권한 상승 후 모듈 로드, 파일시스템 마운트 조작 등 추가 침투 단계 가능.
  • 재부팅 없이 지속적인 권한 유지가 가능함.

🔗 관련 취약점·체이닝

  • CWE‑416 (Use After Free) : 동일 메모리 해제 타이밍 오류는 다른 커널 서브시스템(예: fbdev, netfilter)에서도 보고돼, 이들와 연계해 권한 상승 → 파일 시스템 탈취 → 원격 코드 실행 체인이 가능함.
  • 추정: sg_release() 로 얻은 루트 권한을 이용해 기존 로컬 권한 상승 취약점(CVE‑XXXX‑YYYY)이나 CAP_SYS_MODULE 획득 결함과 연계하면 영구적인 커널 모듈 적재가 가능할 수 있음(구체적 CVE 번호는 확인되지 않음).

🔎 탐지

  • 커널 로그에 KASAN: slab-use-after-free 혹은 BUG: KASAN: 와 함께 sg_release+0x.../0x... drivers/scsi/sg.c: 가 포함된 OOPS 발생.
  • auditd/eBPF 로 /dev/sg* 에 대한 짧은 간격 연속 open()close() 이벤트 감시.
  • ftrace 또는 perf 로 kmalloc/kfree 급증과 동시에 sg_release 호출 스택이 포착될 경우 경고.

🛡️ 완화 방안

  • 패치 적용: 커널 3.17 이상 최신 릴리즈에 포함된 upstream 패치를 배포하고, sg_release() 내부에서 kref_put 을 뮤텍스 해제 뒤로 이동한 커밋을 적용한다(다중 소스 일관성 확인).
  • 드라이버 비활성화: 필요 없을 경우 modprobe -r sg 혹은 /etc/modprobe.d/blacklist.confblacklist sg 추가.
  • 접근 제한: /dev/sg* 파일 권한을 0600 root 로 설정하고, SELinux/AppArmor 정책으로 비특권 사용자 접근 차단.
  • 디버그·감시 활성화: CONFIG_DEBUG_SG_DISABLE 또는 KASAN을 커널 구성에 포함해 오류 발생 시 즉시 OOPS 로 알림; eBPF 기반 open/close 모니터링 규칙 적용.
  • 임시 완화: sysctl -w kernel.kptr_restrict=2 로 커널 주소 노출 최소화 및 불필요한 SCSI 장치 마운트 해제.

⚖️ 위험도 / 우선순위

  • 조치: scheduled (이번 주 내)
  • 근거: CVSS=7.8 · non-KEV · EPSS=0.00285 · exploit=hard · in_scope=None
※ 본 분석은 Kestrel AI 심층 분석 결과입니다. 참고용이며, 실제 대응 전에는 전문가 검토가 필요합니다.

댓글(0)

댓글 작성 은 로그인 후 이용할 수 있어요.

다른 사용자의 댓글은 자유롭게 읽을 수 있어요.

로그인하기

불러오는 중…