Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
cve-2026-86547-mrubyc-op-enter — CVE-2026-86547에 대한 독립 실행형 개념 증명으로, mrubyc op_enter()의 4.0.0까지의 NULL 포인터 역참조 취약점입니다. | Kitploit
도구/GitHubGitHub/harshrajsinghania/cve-2026-86547-mrubyc-op-enter
Embedded Systems SecurityMemory ForensicsVulnerability AnalysisExploitationFuzzingPapers & Research
GitHubharshrajsinghania/cve-2026-86547-mrubyc-op-enter

cve-2026-86547-mrubyc-op-enter

CVE-2026-86547에 대한 독립 실행형 개념 증명으로, mrubyc op_enter()의 4.0.0까지의 NULL 포인터 역참조 취약점입니다.

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
저장소 보기
8시간 3분 전아직 검토되지 않음

CVE-2026-86547 — mrubyc OP_ENTER NULL 포인터 역참조

CVE-2026-86547에 대한 독립 실행형 개념 증명으로, 릴리스 4.0.0까지의 mrubyc op_enter() 핸들러에서 발생하는 NULL 포인터 역참조입니다.

요약

mrubyc는 임베디드 시스템을 위한 경량 Ruby 구현입니다. 이의 바이트코드 VM은 현재 호출 프레임 포인터를 mrbc_vm.callinfo_tail에 유지합니다. 최상위 레벨에서 mrbc_vm_begin()은 아직 메서드 호출 프레임이 존재하지 않기 때문에 이 포인터를 NULL로 초기화합니다.

release4.0.0의 취약한 op_enter() 구현에서 핸들러는 vm->callinfo_tail이 NULL인지 먼저 확인하지 않고 callinfo->reg_offset을 읽습니다:

root@kitploit:~
mrbc_callinfo *callinfo = vm->callinfo_tail;
int reg_offset = callinfo->reg_offset;

조작된 .mrb 바이트코드 프로그램은 최상위 레벨에 OP_ENTER를 배치할 수 있으며, 이로 인해 인터프리터가 NULL callinfo_tail을 가진 상태에서 이 코드에 도달하여 NULL 포인터 역참조를 통해 충돌합니다.

CVE: CVE-2026-86547
유형: CWE-476 — NULL 포인터 역참조
영향: 가용성 / 서비스 거부
영향받는 버전: mrubyc 4.0.0까지
심각도: 중간, CVSS 6.9 (권고 기준)

이 PoC가 보여주는 것

이 PoC는 관련된 mrbc_callinfo 및 mrbc_vm 레이아웃을 모방하고 전체 mrubyc 런타임과 독립적으로 취약한 메모리 접근을 재현합니다.

두 가지 경로를 보여줍니다:

  1. 취약한 경로: callinfo_tail이 NULL이고 callinfo->reg_offset이 가드 없이 역참조되어 세그멘테이션 폴트가 발생합니다.
  2. 수정된 경로: NULL 검사가 최상위 OP_ENTER를 안전하게 거부하며, 이어서 유효한 호출 프레임이 여전히 작동함을 보여주는 제어 테스트가 수행됩니다.

이 하네스는 취약한 포인터에 volatile을 사용하고 설명에 __builtin_trap()을 사용하여 재현기를 새니타이저 기반 관찰에 적합하게 만듭니다. 실제 취약한 접근은 callinfo->reg_offset 읽기입니다.

빌드 및 실행

GCC / Clang

root@kitploit:~
gcc -O0 -g -o poc poc.c
./poc

취약한 경로에서 예상되는 결과는 다음 이후의 세그멘테이션 폴트입니다:

root@kitploit:~
[VULNERABLE PATH] op_enter without NULL guard
  vm->callinfo_tail = NULL (top-level frame)
  About to dereference NULL...

AddressSanitizer

root@kitploit:~
gcc -O0 -g -fsanitize=address -fno-omit-frame-pointer -o poc-asan poc.c
./poc-asan

새니타이저는 NULL mrbc_callinfo 베이스로부터 reg_offset 필드에 해당하는 주소에서 SEGV를 보고해야 합니다. 여기서 사용된 구조체 레이아웃에서 offsetof(mrbc_callinfo, reg_offset)는 0x14입니다.

수정된 경로 제어

root@kitploit:~
./poc fixed

예상 출력은 다음을 포함합니다:

root@kitploit:~
[FIXED PATH] op_enter with NULL guard
  [GUARD] top-level OP_ENTER — rejected safely
  [control, valid frame] reg_offset = 5
Fixed path: no crash.

취약한 소스 위치

원래 취약한 핸들러는 mrubyc release4.0.0의 src/vm.c에 있으며, 약 1537번째 줄에 있습니다. 관련 작업은 NULL 검사 없이 vm->callinfo_tail을 callinfo에 할당한 후 callinfo->reg_offset을 직접 역참조하는 것입니다.

연구에서 참조된 수정 후 소스는 커밋 4261cf5e5ae5579e3110dab98a04b91c7d919429입니다.

실제 트리거

독립 실행형 하네스는 근본적인 메모리 오류를 보여줍니다. mrubyc 자체에서 트리거는 메서드 정의 외부의 최상위 레벨에 OP_ENTER 명령어를 포함하는 조작된 .mrb 바이트코드 파일을 필요로 합니다. 애플리케이션이 신뢰할 수 없는 .mrb 파일을 로드하고 실행하는 경우, 공격자가 제어하는 바이트코드 파일이 인터프리터 프로세스를 충돌시킬 수 있습니다.

이는 서비스 거부 조건입니다. 이 연구는 NULL 역참조를 넘어서는 코드 실행, 정보 노출 또는 메모리 손상을 주장하지 않습니다.

참고 자료

  • CVE-2026-86547
  • VulnCheck 권고
  • mrubyc release4.0.0 src/vm.c
  • 수정 후 src/vm.c
  • mrubyc 소스 저장소
  • CVE-2026-38976, op_enter() 감사를 촉발한 관련 OP_SUPER NULL 검사 문제

연구 이야기

발견 이야기는 다음에 문서화되어 있습니다: I Read Someone Else's Bug Report, Then Found The Same Missing Check In The Next Function Over.

핵심 연구 관찰은 op_super()가 동일한 vm->callinfo_tail 불변성 주변에 NULL 가드가 누락되어 있었다는 것입니다. 인접한 op_enter() 핸들러를 확인한 결과 동일한 가정이 해당 가드 없이 존재한다는 것이 드러났습니다.

도구 다운로드