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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
OpenSovix — cve-2025-46285简单复现poc | Kitploit
도구/GitHubGitHub/yankeelucas/opensovix
Privilege EscalationVulnerability AnalysisCode AnalysisExploitationLearning & EducationBinary Exploitation
GitHubyankeelucas/opensovix

OpenSovix

cve-2025-46285简单复现poc

저장소 보기
11개월 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
웹사이트

CVE-2025-46285 취약점 심층 분석 및 개념 증명 중요 면책 조항: 다음 내용은 사이버 보안 교육, 방어적 연구 및 취약점 원리 분석 용도로만 제공됩니다. 승인되지 않은 환경에서 이 취약점을 테스트하거나 악용하지 마십시오. 시스템 취약점을 악용하면 법적 결과 및 장비 손상이 발생할 수 있습니다.

  1. 취약점 심층 분석 1.1 취약점 개요 CVE-2025-46285는 Apple 운영 체제(macOS, iOS, iPadOS, tvOS, watchOS, visionOS 포함)의 정수 오버플로우(Integer Overflow) 취약점입니다. 이 취약점의 핵심 문제는 타임스탬프(Timestamp) 처리 방식에 있습니다. Apple은 64비트 타임스탬프(64-bit timestamps)를 도입하여 이 문제를 해결했습니다. 원래 결함: 시스템이 특정 시간 관련 데이터를 처리할 때 더 작은 비트 폭(예: 32비트)의 정수를 사용하여 타임스탬프를 저장하거나 계산했습니다. 트리거 메커니즘: 시간 값이 해당 정수 유형의 최대 표현 범위를 초과할 때 랩어라운드(Wrap-around) 또는 오버플로우가 발생하여 계산 결과가 잘못됩니다. 수정 방안: 관련 데이터 구조, API 매개변수 및 내부 계산 로직을 64비트 정수(int64_t 또는 uint64_t)로 업그레이드하여 더 긴 시간 범위를 지원하고 오버플로우를 방지합니다. 1.2 기술 원리 상세 1.2.1 정수 오버플로우 원리 C/C++과 같은 저수준 언어에서 정수 오버플로우는 산술 연산 결과가 데이터 유형이 표현할 수 있는 범위를 초과할 때 발생합니다. 32비트 부호 있는 정수(int32_t): 최대값은 $2^{31}-1$ (2,147,483,647)입니다. Y2038 문제 연관: 고전적인 32비트 타임스탬프 문제는 2038년 1월 19일 03:14:07 UTC에 오버플로우됩니다. 그러나 Apple의 수정은 2038년 이전에도 특정 비즈니스 로직 또는 내부 카운터가 다른 이유(예: 누적 오류, 특정 알고리즘의 곱셈/덧셈)로 인해 32비트 정수 오버플로우가 발생할 수 있음을 시사합니다. 오버플로우 결과: 음수 시간: 오버플로우 후 음수가 되어 시스템이 시간을 "과거"로 간주하여 시간 기반 보안 검사(예: 인증서 유효 기간, 세션 시간 초과)를 우회할 수 있습니다. 비정상 메모리 할당: 타임스탬프가 메모리 할당 크기 매개변수로 사용되는 경우 오버플로우로 인해 매우 작거나 큰 메모리 블록이 할당되어 힙 오버플로우 또는 힙 언더플로우가 발생할 수 있습니다. 논리 오류: 상태 머신이 예상치 못한 상태로 전환됩니다. 1.2.2 Root 권한 상승으로 이어지는 이유 설명에 따르면 "An app may be able to gain root privileges"(애플리케이션이 root 권한을 얻을 수 있음)입니다. 이는 일반적으로 다음 경로를 통해 발생합니다: 권한 상승(Privilege Escalation): 취약점이 커널 또는 높은 권한의 데몬(예: launchd, kernel 하위 시스템)에 존재합니다. 보안 검사 우회: 애플리케이션이 특정 타임스탬프 매개변수를 구성하여 정수 오버플로우를 트리거하고, 커널이 권한이나 시간 유효성을 검증할 때 오판하도록 만듭니다. 임의 코드 실행: 메모리 손상 또는 논리 우회를 이용하여 셸코드를 실행하거나 시스템 호출(syscall)을 호출하여 최종적으로 root 권한을 획득합니다. 1.3 트리거 조건 영향받는 버전: macOS: < 14.8.3 (Sonoma), < 15.7.3 (Sequoia), < 26.2 (Tahoe) iOS/iPadOS: < 18.7.3, < 26.2 tvOS/visionOS/watchOS: < 26.2 공격 벡터: 로컬 공격: 애플리케이션이 로컬에서 실행되어야 하며 영향을 받는 커널 프레임워크 또는 시스템 API를 호출할 수 있어야 합니다. 시간 구성: 공격자는 시스템에 전달되는 시간 매개변수를 제어하거나 시스템 호출을 통해 간접적으로 오버플로우를 유발하는 시간 값을 구성할 수 있어야 합니다. 환경 종속성: 시스템에 최신 보안 패치가 설치되지 않음. 애플리케이션이 커널 경로를 트리거할 수 있는 충분한 권한을 가짐(일반적으로 샌드박스 탈출 또는 이미 존재하는 낮은 권한 취약점을 발판으로 필요). 1.4 영향 범위 기밀성: 높음. 공격자가 민감한 데이터에 접근할 수 있음. 무결성: 높음. 공격자가 시스템 파일 또는 구성을 수정할 수 있음. 가용성: 중간. 시스템 충돌 또는 서비스 거부를 초래할 수 있음. 권한: 매우 높음. 사용자 공간에서 커널 공간(Root)으로 상승.
  2. 개념 증명 코드 (POC) 참고: CVE-2025-46285는 커널 수준 정수 오버플로우와 관련되어 있으며 Apple이 이미 수정했으므로, 최신 시스템에서 직접 악용할 수 있는 POC를 제공할 수 없습니다. 다음 코드는 교육용 시뮬레이션 코드로, 32비트 타임스탬프 오버플로우의 원리와 코드에서 이 문제를 올바르게 수정하는 방법을 보여주기 위한 것입니다. 이 POC는 취약점이 있는 타임스탬프 처리 함수를 시뮬레이션하고 오버플로우가 어떻게 논리 오류를 유발하는지 보여줍니다. #include <stdio.h> #include <stdint.h> #include <time.h> #include <stdlib.h>

// 취약점이 있는 시스템 구성 요소 시뮬레이션 // 32비트 부호 있는 정수를 사용하여 타임스탬프 저장 - CVE-2025-46285의 근본 원인

typedef struct { int32_t timestamp; // 취약점: 32비트 정수 사용 int32_t duration; // 지속 시간 int is_valid; // 유효성 플래그 } TimeSensitiveData;

/**

  • 취약 함수: 만료 시간 계산

  • 문제: current_time + duration이 INT32_MAX를 초과하면 오버플로우 발생

  • 결과: timestamp가 음수가 되어 보안 검사 무효화 가능 */ int vulnerable_check_expiration(int32_t current_time, int32_t duration) { int32_t expiration_time;

    // 정수 오버플로우 시뮬레이션 // current_time이 INT32_MAX에 가까우면 duration을 더한 후 음수로 랩어라운드됨 expiration_time = current_time + duration;

    printf("[Vulnerable] Current Time: %d, Duration: %d\n", current_time, duration); printf("[Vulnerable] Calculated Expiration: %d\n", expiration_time);

    // 보안 검사: 현재 시간이 만료 시간보다 크면 무효 // 그러나 expiration_time이 오버플로우로 음수가 되고 current_time이 양수이면 // current_time > expiration_time이 항상 참이 되어 "만료됨" 판단 오류 발생 // 또는 일부 로직에서는 음수 시간이 "영구 유효"로 해석되거나 검증을 우회할 수 있음

    if (current_time > expiration_time) { return 0; // 만료됨 } else { return 1; // 유효 } }

/**

  • 수정 함수: 64비트 정수를 사용하여 타임스탬프 처리

  • 수정 방안: 64비트 타임스탬프 도입으로 오버플로우 방지 */ int fixed_check_expiration(int64_t current_time, int64_t duration) { int64_t expiration_time;

    // 64비트 정수 사용, 매우 넓은 범위로 오버플로우 거의 불가능 expiration_time = current_time + duration;

    printf("[Fixed] Current Time: %lld, Duration: %lld\n", current_time, duration); printf("[Fixed] Calculated Expiration: %lld\n", expiration_time);

    if (current_time > expiration_time) { return 0; // 만료됨 } else { return 1; // 유효 } }

/**

  • 공격 시나리오 시뮬레이션

  • 공격자가 INT32_MAX에 가까운 타임스탬프를 구성하고 작은 지속 시간을 더하여

  • 오버플로우를 유발하고 음수를 생성하여 시간 기반 보안 검사를 우회함 */ void demonstrate_attack() { printf("\n=== 정수 오버플로우 공격 시연 ===\n");

    // 32비트 정수 최대값에 가까운 시간 설정 // INT32_MAX = 2147483647 int32_t near_max_time = 2147483640; int32_t small_duration = 10;

    printf("공격자가 구성한 타임스탬프: %d\n", near_max_time); printf("공격자가 구성한 지속 시간: %d\n", small_duration);

    int result_vuln = vulnerable_check_expiration(near_max_time, small_duration);

    if (result_vuln == 1) { printf("[!] 취약점 악용 성공: 시스템이 데이터가 여전히 유효하다고 잘못 판단!\n"); printf("[!] 이유: 2147483640 + 10 = -2147483646 (오버플로우 랩어라운드)\n"); printf("[!] 현재 시간 (%d)이 만료 시간 (-2147483646)보다 크지 않으므로 유효 반환.\n", near_max_time); } else { printf("[*] 취약점 악용 실패\n"); } }

/**

  • 수정 후 동작 시연 */ void demonstrate_fix() { printf("\n=== 수정 후 동작 시연 ===\n");

    int64_t near_max_time_64 = 2147483640; int64_t small_duration_64 = 10;

    int result_fixed = fixed_check_expiration(near_max_time_64, small_duration_64);

    if (result_fixed == 1) { printf("[+] 수정 유효: 시스템이 데이터를 올바르게 유효하다고 인식.\n"); printf("[+] 이유: 2147483640 + 10 = 2147483650 (오버플로우 없음)\n"); printf("[+] 현재 시간 (%lld)이 만료 시간 (2147483650)보다 크지 않으므로 유효 반환.\n", near_max_time_64); } else { printf("[*] 데이터 만료됨\n"); } }

int main() { printf("CVE-2025-46285 개념 증명: 정수 오버플로우로 인한 타임스탬프 처리 오류\n"); printf("======================================================\n");

root@kitploit:~
// 1. 공격 시연
demonstrate_attack();

// 2. 수정 시연
demonstrate_fix();

printf("\n======================================================\n");
printf("결론: 64비트 정수(int64_t)를 사용하면 이러한 오버플로우 문제를 완전히 방지할 수 있습니다.\n");
printf("Apple은 iOS 18.7.3, macOS 14.8.3 등 버전에서 이 수정을 적용했습니다.\n");

return 0;

} 코드 주석 설명 데이터 구조 정의: TimeSensitiveData 구조체는 시스템에서 타임스탬프를 저장하는 객체를 시뮬레이션합니다. int32_t timestamp는 취약점의 근원으로, 시간 표현 범위를 제한합니다. vulnerable_check_expiration 함수: 취약점이 있는 로직을 시뮬레이션합니다. expiration_time = current_time + duration; 이 줄은 current_time이 INT32_MAX에 가까울 때 오버플로우를 발생시킵니다. 32비트 부호 있는 정수에서 2147483647 + 1은 -2147483648이 됩니다. 이후 비교 current_time > expiration_time은 음수 비교로 인해 잘못된 논리 분기가 발생하여 보안 정책이 우회될 수 있습니다. fixed_check_expiration 함수: Apple의 수정 방안을 보여줍니다: int64_t 사용. 64비트 정수의 최대값은 약 $9 \times 10^{18}$로, 서기 2920억 년까지 표현할 수 있어 오버플로우 가능성을 근본적으로 제거합니다. demonstrate_attack 함수: INT32_MAX에 가까운 타임스탬프(2147483640)와 작은 지속 시간(10)을 구성합니다. 실행 후 expiration_time이 음수가 됩니다. 2147483640 > -2147483646이 참이므로 함수는 0(만료됨)을 반환합니다. 참고: 일부 보안 로직에서 시스템이 "유효"에 대해 0이 아닌 값을 기대하거나 if (expiration_time < 0) return VALID;와 같은 논리가 있는 경우 공격자는 "영구 유효" 상태를 구성할 수 있습니다. 이 예제는 주로 오버플로우로 인한 값 이상을 보여줍니다. demonstrate_fix 함수: 64비트 정수를 사용하여 동일한 작업을 수행합니다. 오버플로우 없이 논리가 올바릅니다. 방어 권장 사항 시스템 업그레이드: macOS, iOS, iPadOS, tvOS, watchOS, visionOS를 최신 버전(macOS 14.8.3+, iOS 18.7.3+ 등)으로 즉시 업데이트하십시오. 코드 검토: 시간 처리가 포함된 코드를 개발할 때는 항상 64비트 정수(int64_t, uint64_t)를 사용하여 타임스탬프를 저장하십시오. 입력 검증: 모든 외부 입력 시간 매개변수에 대해 경계 검사를 수행하여 합리적인 범위 내에 있는지 확인하십시오. 표준 라이브러리 사용: 운영 체제가 제공하는 고수준 시간 API를 우선 사용하십시오. 이러한 API는 일반적으로 기본 오버플로우 문제를 이미 처리하고 있습니다.

도구 다운로드