Kestrel
CVE-2026-31403DGX_B· 2026년 8월 2일 AM 12:28

[방어] 분석 — CVE-2026-31403

A use‑after‑free in the NFS daemon’s /proc/fs/nfs/exports handling can be triggered by closing a network namespace while an exports fd remains open, enabling local privilege escalation; immediate mitigation is to block unprivileged creation/deletion of network namespaces and restrict access to the exports proc entry.

📋 요약

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

🔍 공격 기법

NFS 서버가 시작될 때 생성되는 /proc/fs/nfs/exports 파일을 열고(open()), 이후 컨테이너가 setns() 로 다른 네임스페이스로 이동한 뒤 해당 FD를 유지한 상태에서 파일을 읽으면, 이미 해제된 svc_export_cache 구조체를 역참조해 커널 메모리 손상(Use‑After‑Free) 및 잠재적 권한 상승이 발생합니다.

악용 가능성: 이 취약점은 AV:L(로컬)·AC:L·PR:L·UI:N이라는 CVSS 벡터가 의미하듯, 공격자는 로컬 시스템에 직접 접근하고 특별한 권한이나 사용자 개입 없이도 이용 가능하지만, 실제 exploit 조건이 제한적입니다. 첫 번째 전제는 공격자가 /proc/fs/nfs/exports 파일을 열어 FD를 확보해야 하며, 이는 NFS 서버가 로드된 상태에서만 존재하는 proc 엔트리이므로 NFSd가 실행 중인 호스트에 한정됩니다. 두 번째 전제는 해당 FD를 보유한 채로 network namespace가 소멸되도록 만드는 것으로, 일반적인 환경에서는 컨테이너 종료나 setns() 호출을 통해 네임스페이스를 파괴해야 합니다. 이러한 네임스페이스 파괴는 보통 컨테이너 관리 권한이나 루트 수준의 작업에 연관되므로, 비록 PR:L이라 평가되더라도 실제로는 로컬 컨테이너 환경에서만 실현 가능성이 높습니다. EPSS = 0.00125라는 매우 낮은 확률과 KEV 미등재는 현재까지 보고된 악용 사례가 거의 없으며, 공격 성공에 필요한 구체적인 단계(파일 열기 → 네임스페이스 파괴)가 현실적으로 구현되기 어렵다는 점을 반영합니다. 따라서 이 취약점의 공격 표면/proc/fs/nfs/exports 파일 디스크립터와 네트워크 네임스페이스 관리 API(setns, 컨테이너 종료)이며, 해당 요소에 접근할 수 있는 로컬 프로세스가 존재할 때만 위험이 발생합니다. 결과적으로 평가된 hard 등급은 낮은 복잡도와 권한 요구에도 불구하고, 실제 공격을 수행하기 위한 환경적 제약과 사례 부족으로 인

💥 영향 분석

  • 성공 시 커널 힙/스택 메모리를 임의로 조작할 수 있어 로컬 루트 권한을 획득하거나 시스템 전체를 중단시킬 수 있습니다.
  • 취약점은 NFS 서버가 활성화된 모든 Linux 커널(3.9‑6.19.x)에서 발생하므로, 해당 커널을 사용하는 호스트와 컨테이너 모두가 위험에 노출됩니다.

🔗 관련 취약점·체이닝

추정: 동일한 네임스페이스 파괴와 파일 디스크립터 유지 사이의 레이스 조건으로 인한 CWE‑416 Use‑After‑Free 패턴이 다른 커널 서브시스템(예: procfs 기반 설정 파일)에서도 발견될 수 있습니다. 이러한 패턴을 이용해 권한 상승 체인을 구성할 경우, 추가적인 로컬 익스플로잇(CVE가 아직 공개되지 않은 경우 포함)과 결합될 가능성이 존재합니다.

🔎 탐지

  • 감시 로그: auditd → type=PATH & name="/proc/fs/nfs/exports" & perm=r
    • SIEM 쿼리 예시 (Elastic Kibana):
text
1event.category:"process" and
2file.path:"/proc/fs/nfs/exports" and
3event.action:"open" and
4not process.name:"nfsd"
  • 네임스페이스 변경 감지: auditd → type=SYSCALL & syscall=setns
    • SIEM 쿼리 예시:
text
1event.category:"process" and
2process.syscall:"setns" and
3file.descriptor.open:true and
4file.path:"/proc/fs/nfs/exports"
  • 오탐 튜닝: NFS 관리 도구(exportfs, systemctl restart nfs-server)가 정상적으로 파일을 열고 닫는 경우를 화이트리스트에 추가.
    • 조건: process.name:"exportfs" OR process.name:"systemd" → 알림 레벨 낮춤.

🛡️ 완화 방안

  • 즉시(긴급 차단)

    • /proc/fs/nfs/exports 파일 권한을 0000으로 변경하거나, AppArmor/SELinux 프로파일에 deny read 규칙을 추가해 비특권 프로세스가 해당 파일을 열지 못하도록 합니다.
      • 구현 난이도: ★★ (단일 명령 실행)
      • 운영 영향: NFS 서버 자체는 정상 동작하지만, 관리 도구가 파일을 읽어야 할 경우 일시적인 오류 발생 가능.
      • 검증 방법: ls -l /proc/fs/nfs/exportsauditd 로그에 “permission denied” 이벤트 확인.
  • 단기(완화)

    • NFS 서버를 별도 네임스페이스에서 실행하고, 컨테이너에는 /prochidepid=2 옵션으로 마운트해 호스트의 /proc/fs/nfs/exports 접근을 차단합니다.
      • 구현 난이도: ★★★ (systemd 서비스 파일 수정 및 재시작)
      • 운영 영향: 컨테이너 내부에서 프로세스 정보를 조회하는 일부 도구가 제한될 수 있음.
      • 검증 방법: 컨테이너 내 cat /proc/fs/nfs/exports 시 “No such file or directory” 확인.
  • 근본(해결)

    • 커널 패치를 적용하여 exports_release()에서 struct net에 대한 레퍼런스를 유지하도록 업데이트된 커널 버전(예: 6.19.11 이상)으로 업그레이드합니다.
      • 구현 난이도: ★★★★★ (커널 빌드·배포 → 재부팅 필요)
      • 운영 영향: 재부팅 시 서비스 중단, 호환성 테스트 필요.
      • 검증 방법: uname -r 확인 후, CVE-2026-31403가 포함된 커밋 해시(또는 배포 노트) 존재 여부 점검.
  • 잔여 리스크

    • 패치 전까지 위 즉시·단기 조치를 적용하면 파일 접근 자체를 차단하므로 실제 익스플로잇 경로가 사라집니다. 다만, 동일한 레이스 조건이 다른 procfs 엔트리에서 재현될 가능성은 남아 있으므로 지속적인 로그 모니터링과 커널 업데이트 적용을 권장합니다.

⚖️ 위험도 / 우선순위

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

댓글(0)

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

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

로그인하기

불러오는 중…