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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2023-41992 — macOS 커널 취약점인 CVE-2023-41992에 대한 개념 증명으로, 악용 기술을 시연하고 패치 분석을 제공합니다. | Kitploit
도구/GitHubGitHub/whw0x455/cve-2023-41992
iOS SecurityMemory ForensicsVulnerability AnalysisExploitationBinary Exploitation
GitHubwhw0x455/cve-2023-41992

CVE-2023-41992

macOS 커널 취약점인 CVE-2023-41992에 대한 개념 증명으로, 악용 기술을 시연하고 패치 분석을 제공합니다.

저장소 보기
5512510개월 전Kitploit 검토 완료

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2023-41992

이것은 CVE-2023-41992에 대한 개념 증명입니다. 그리고 무엇보다도, 이것은 __jailbreak__와는 전혀 관련이 없습니다! 그리고 아직 개발 중입니다.

지금까지 도와주신 모든 분들께 감사드립니다. 개인정보 보호를 위해 여기에 이름을 적지 않을 수 있습니다. 원하시면 DM 보내주세요!

패치

내가 알기로는 패치는 ipc_right_destroy에 있습니다. 누군가 X(또는 Twitter)에서 이것을 지적했습니다.

root@kitploit:~
diff --git a/osfmk/ipc/ipc_right.c b/osfmk/ipc/ipc_right.c
index a81ac21..32a9a3e 100644
--- a/osfmk/ipc/ipc_right.c
+++ b/osfmk/ipc/ipc_right.c
@@ -912,7 +912,6 @@ ipc_right_destroy(
        mach_port_type_t type;
 
        bits = entry->ie_bits;
-       entry->ie_bits &= ~IE_BITS_TYPE_MASK;
        type = IE_BITS_TYPE(bits);
 
        assert(is_active(space));

ReportCrash 또는 SIGKILL 피하기

ipc_right_destroy를 사용하여 ipc 공간에 남아 있는 none 타입 ipc 항목을 얻으면 예외가 발생합니다. 아래 [0]과 [1]을 확인하세요.

root@kitploit:~
kern_return_t
ipc_right_destroy(
	ipc_space_t             space,
	mach_port_name_t        name,
	ipc_entry_t             entry,
	boolean_t               check_guard,
	uint64_t                guard)
{
...
		if (type == MACH_PORT_TYPE_SEND) {
			if (ip_is_pinned(port)) {
				assert(ip_active(port));
				is_write_unlock(space);
				mach_port_guard_exception_pinned(space,  // <---- [0]
                                        name, port, MPG_FLAGS_MOD_REFS_PINNED_DESTROY);
				return KERN_INVALID_CAPABILITY;
			}
			ipc_hash_delete(space, ip_to_object(port), name, entry);
		}
...
		if ((type & MACH_PORT_TYPE_RECEIVE) &&
		    (check_guard) && (port->ip_guarded) &&
		    (guard != port->ip_context)) {
			/* Guard Violation */
			uint64_t portguard = port->ip_context;
			ip_mq_unlock(port);
			is_write_unlock(space);
			/* Raise mach port guard exception */
			mach_port_guard_exception(name,  // <---- [1]
                                0, portguard, kGUARD_EXC_DESTROY);
			return KERN_INVALID_RIGHT;
		}

[0]은 서드파티 앱 샌드박스에서 태스크를 종료하지 않습니다. 이전에 mach_thread_self()를 선택한 이유는 그것이 내가 찾을 수 있는 유일한 고정된 전송 권리였기 때문입니다.

하지만 ReportCrash 또는 SIGKILL을 피하지 않으면, 이 버그는 WebContent 샌드박스에서 유용하지 않습니다. 그래서 조금 더 깊이 파고들었습니다.

root@kitploit:~
void
mach_port_guard_ast(thread_t t,
    mach_exception_data_type_t code, mach_exception_data_type_t subcode)
{
        ...
        	if (reason <= MAX_FATAL_kGUARD_EXC_CODE) {
		/*
		 * Fatal Mach port guards - always delivered synchronously.
		 * Check if anyone has registered for Synchronous EXC_GUARD, if yes then,
		 * deliver it synchronously and then kill the process, else kill the process
		 * and deliver the exception via EXC_CORPSE_NOTIFY.
		 */
		if (task_exception_notify(EXC_GUARD, code, subcode) == KERN_SUCCESS) {
			task_bsdtask_kill(task);
		} else {
			exit_with_guard_exception(get_bsdtask_info(task), code, subcode);
		}
        ...

커널의 mach_port_guard_ast는 mach 포트 가드 예외를 처리합니다. 치명적인 예외의 경우, 먼저 예외 포트를 찾습니다. 예외 알림이 KERN_SUCCESS를 반환하면 SIGKILL을 수행합니다. 유망해 보입니다. 치명적인 mach 포트 가드 예외를 발생시킨 모든 태스크가 종료됩니다. 하지만...

Fatal Mach port guards - always delivered synchronously.

버그를 트리거하는 스레드에 대해 스레드 예외 포트를 설정하고, 예외 알림을 처리하지 않으면 됩니다. 커널은 여기서 응답을 기다리기만 하므로 SIGKILL이 발생하지 않습니다.

NULL 포인터 참조

  1. 수신 포트와 피해자 포트를 만들고, 일부 권한을 삽입하고, 포트 가드를 수행합니다.
  2. 포트 디스크립터에서 피해자 포트를 수신 포트로 보냅니다.
  3. 다른 스레드에서 우리 자신의 예외 포트로 버그를 트리거합니다.
  4. 수신 포트에서 메시지를 수신하면 커널 패닉이 발생합니다.

NULL 항목으로 ipc_right_copyout()에서 패닉 발생.

참고자료

  • blanket, 테스트를 위해 일부 코드를 복사했습니다.
도구 다운로드