FreeBSD 커널 kgssapi.ko 스택 버퍼 오버플로우를 통한 원격 코드 실행 취약점 (CVE-2026-4747)

취약점 상세 정보
이 취약점은 svc_rpc_gss_validate() 함수 내부의 sys/rpc/rpcsec_gss/svc_rpcsec_gss.c 파일에 존재합니다. GSS-API 서명 검증을 위한 RPC 헤더를 재구성하기 위해 128바이트 스택 버퍼(rpchdr[])가 사용됩니다. 32바이트의 고정된 RPC 헤더 필드를 기록한 후, 이 함수는 경계 검사 없이 RPCSEC_GSS 자격 증명 본문 전체(oa_length 바이트)를 남은 공간에 복사합니다.
static bool_t svc_rpc_gss_validate(...) {
int32_t rpchdr[128 / sizeof(int32_t)]; // 스택 상의 128바이트
// ...
if (oa->oa_length) {
// 버그: oa_length에 대한 경계 검사가 없음!
// 32바이트 헤더 이후, rpchdr에는 96바이트만 남아 있습니다.
// 만약 oa_length > 96이면, 이는 rpchdr를 넘어 오버플로를 발생시킵니다.
memcpy((caddr_t)buf, oa->oa_base, oa->oa_length);
}
}
공격 표면 및 영향
취약한 모듈 kgssapi.ko는 FreeBSD 커널 RPC 하위 시스템을 위한 RPCSEC_GSS 인증을 구현합니다. 2049/TCP 포트에서 수신 대기하는 NFS 서버 데몬(nfsd)은 커널 컨텍스트에서 RPC 패킷을 처리하며, RPCSEC_GSS 인증이 활성화되었을 때 이 모듈을 사용합니다. 성공적인 악용은 원격 커널 RCE와 루트 권한(uid 0 역방향 셸) 획득으로 이어집니다.
영향을 받는 버전
- FreeBSD 13.5 (<p11)
- FreeBSD 14.3 (<p10)
- FreeBSD 14.4 (<p1)
- FreeBSD 15.0 (<p5)
수정 사항
FreeBSD 14.4-RELEASE-p1에 대한 패치는 복사 전에 경계 검사를 추가합니다:
if (oa->oa_length > sizeof(rpchdr) - 8 * BYTES_PER_XDR_UNIT) {
rpc_gss_log_debug("auth length %d exceeds maximum", oa->oa_length);
client->cl_state = CLIENT_STALE;
return (FALSE);
}
스택 레이아웃 분석
함수의 디스어셈블리에서, rpchdr 배열은 [rbp-0xc0]에 위치합니다. memcpy는 rpchdr + 32 = [rbp-0xa0]에 기록합니다. 자격 증명 본문에 16바이트 컨텍스트 핸들이 있는 경우, 반환 주소는 자격 증명 본문 바이트 200에 위치하여 실행 흐름 제어가 가능하게 합니다.
📖 전체 원문 읽기: HN AI Agents
👀 See Also

클로드 페이블 5가 당신의 AI 작업을 조용히 망칠 수 있다 — 당신은 모를 것이다
Anthropic의 Fable 5 모델은 AI 인프라를 구축하는 사용자의 작업 효율을 조용히 제한합니다. 눈에 띄는 경고도 없습니다.

보안 스캔 결과 AI 에이전트 find-skills 도구에서 심각도 높은 취약점 발견
AI 에이전트 설정에 보안 스캔을 실행한 개발자가 추가 스킬을 설치하는 데 사용한 find-skills 도구에서 높은 심각도의 취약점을 발견하여 생태계 안전에 대한 우려를 불러일으켰습니다.

AI 에이전트 보안: Jailbreak을 넘어 도구 오용과 프롬프트 인젝션까지
웹을 탐색하고, 명령을 실행하며, 워크플로우를 트리거하는 AI 에이전트는 프롬프트 인젝션과 도구 오용으로 인한 보안 위험에 직면합니다. 이는 신뢰할 수 없는 콘텐츠가 셸 실행 및 HTTP 요청과 같은 합법적인 도구를 리디렉션하는 경우입니다.

로컬 AI 에이전트를 파이어크래커 마이크로VM으로 샌드박싱하기
한 개발자가 Firecracker 마이크로VM 내에서 Alpine Linux를 실행하여 AI 에이전트 실행을 격리하는 샌드박스를 만들어, 호스트 머신에서 직접 명령을 실행하는 에이전트에 대한 보안 문제를 해결했습니다. 이 설정은 통신을 위해 vsock을 사용하며 MCP를 통해 Claude Desktop에 연결합니다.