Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

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

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

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
detect_CVE-2026-86950 — CVE-2026-86950을 악용하는 PDF 파일을 탐지하는 Python 도구 | Kitploit
도구/GitHubGitHub/decalage2/detect_cve-2026-86950
Static AnalysisVulnerability ScannersVulnerability AnalysisExploitationMalware AnalysisPapers & Research
GitHubdecalage2/detect_cve-2026-86950

detect_CVE-2026-86950

CVE-2026-86950을 악용하는 PDF 파일을 탐지하는 Python 도구

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-86950 PDF 익스플로잇 탐지기

이 프로젝트와 CVE-2026-86950에 대한 자세한 내용은 https://decalage.info/CVE-2026-86950/ 를 참조하세요.

면책 조항: 이 readme의 대부분과 탐지 코드는 AI 코딩 에이전트의 도움을 받아 작성되었습니다. 이 도구는 수천 개의 정상적인 PDF 파일과 여기에 공개된 사용 가능한 개념 증명(proof-of-concept) 파일에서 성공적으로 테스트되었습니다. 그러나 이 도구는 새롭고 탐지 알고리즘이 상당히 복잡하므로 주의해서 사용하시기 바랍니다.

detect_cve_2026_86950.py는 CVE-2026-86950("The Great Glyph Grift")을 익스플로잇하도록 조작된 내장 폰트가 포함된 PDF 파일을 정적으로 스캔합니다. 이 취약점은 Apple CoreGraphics의 앤티앨리어싱 글리프 래스터라이저에서 발생하는 범위를 벗어난 쓰기(out-of-bounds write)이며, iOS / macOS 26.7.1에서 수정되었습니다.

이 도구는 폰트를 렌더링하거나 익스플로잇 코드를 실행하지 않습니다. 대신 PDF와 내장 폰트 프로그램을 파싱하여 공격의 구조적 서명을 찾습니다.

취약점 (탐지가 작동하는 이유)

CoreGraphics는 부동 소수점 장치 좌표를 대략 다음과 같은 방식으로 16.12 고정 소수점 정수로 변환합니다.

int32_t aa_double_to_fixed(double px) { return (int32_t)(0.5 + 4096.0 * px); }

4096 * px가 int32 범위를 초과하면 캐스트는 정의되지 않은 동작이 되며, 두 호출 지점(aa_moveto vs. aa_lineto)이 서로 다르게 동작합니다 — 하나는 포화되고, 하나는 잘립니다. 이러한 불일치는 aa_add_edges의 글리프 경계 상자 계산을 손상시켜, aa_cache_render의 커버리지 버퍼가 너무 작게 할당되고 래스터라이저가 범위를 벗어나 기록하게 됩니다. 26.7.1 패치는 ±0x3FFFF001로의 명시적 클램핑을 추가합니다.

공개된 개념 증명은 이러한 과대 좌표를 강제하는 악성 TrueType 폰트를 구성합니다:

  • 복합 글리프의 깊은 체인으로, 각각 이전 것을 약 2배로 스케일링합니다 (F2Dot14 스케일이 최대값 ~1.99994에 근접);
  • 큰 좌표에 축퇴된 2점 윤곽을 가진 작은 리프 글리프;
  • 따라서 최상위 글리프의 실제 윤곽은 약 1,600만 폰트 단위(em 사각형의 약 1000배)에 도달하는 반면, 글리프의 저장된 경계 상자는 작게 유지됩니다;
  • 큰 텍스트 크기(/Tf 1024)에서 4096 × device_coord가 int32를 오버플로합니다.

탐지기가 검사하는 항목

  1. pikepdf로 모든 내장 윤곽 폰트 프로그램을 추출합니다 — TrueType(/FontFile2) 및 CFF / OpenType(/FontFile3).
  2. fontTools로 각 폰트를 파싱하고 각 글리프의 실제 좌표 범위를 측정합니다:
    • TrueType: 복합 구성 요소를 재귀적으로 해석합니다 (따라서 중첩된 스케일링 체인이 실제 범위까지 추적됨);
    • CFF / Type2: 제어 경계 펜을 통해 각 charstring을 그립니다 (따라서 많은 상대 연산자에 걸쳐 누적된 좌표가 측정됨).
  3. 다음 중 하나라도 해당하면 폰트를 플래그합니다:
    • 글리프의 실제 윤곽이 em 사각형을 훨씬 초과하여 확장됨 (정당한 글리프는 그렇지 않음 — 임계값 10× em, 100× em 초과 시 거의 확실);
    • 실제 범위가 글리프 자체의 선언된 경계 상자를 왜소하게 만듦 (익스플로잇이 의존하는 경계 상자 "거짓말");
    • (TrueType 전용) 깊은 복합 중첩과 업스케일링(>1) 구성 요소의 결합 — 공개 PoC가 사용하는 좌표 증폭 체인.
  4. 최악의 경우 좌표를 페이지 콘텐츠 스트림에서 사용된 텍스트 크기(/Tf, Tm)와 결합하고 4096 × device_coord가 실제로 INT32_MAX를 초과하는지 — 즉 고정 소수점 오버플로에 도달 가능한지 — 확인합니다.

판정: exploit (오버플로 도달 가능), suspicious (과대 기하이지만 관찰된 크기에서 오버플로하지 않음), clean.

설치 및 실행

# with uv (recommended)
uv venv
uv pip install -r requirements.txt

# or any environment with pikepdf + fonttools
python3 detect_cve_2026_86950.py suspicious.pdf
python3 detect_cve_2026_86950.py -v *.pdf      # per-font details
python3 detect_cve_2026_86950.py --json f.pdf  # machine-readable

종료 코드: 0 정상, 1 익스플로잇/의심 발견, 2 오류.

제한 사항

  • 이 CVE의 근본 원인은 CoreGraphics의 공유 aa_* 경로 래스터라이저에서의 고정 소수점 변환으로, 이 래스터라이저는 TrueType glyf와 CFF/Type2 외곽선을 모두 렌더링합니다. 공개된 PoC는 TrueType 복합 글리프를 사용하여 좌표를 증폭시키며, CFF 폰트는 상대 연산자를 누적하는 등의 방식으로 과대한 좌표에 직접 도달할 수 있으므로 /FontFile2와 /FontFile3 모두 분석됩니다. 복합 체인 휴리스틱은 TrueType에 특화되어 있으며, CFF의 경우 신호는 과대 좌표/경계 상자 거짓말 검사입니다.
  • 콘텐츠 스트림의 텍스트 크기(/Tf, Tm) 스캔은 최선의 노력 방식이며, PDF 그래픽 상태/CTM을 완전히 평가하지는 않습니다. 크기를 찾지 못한 경우 오버플로 검사에는 보수적인 기본값 1024가 가정됩니다. 폰트 고유의 과대 기하 신호는 이에 의존하지 않습니다.
  • 이는 샌드박스 렌더러가 아닌 휴리스틱 구조 탐지기입니다. 즉, 알려진 익스플로잇 패턴과 명백히 잘못된 폰트를 잡아내기 위한 것이지, 파일이 안전함을 증명하기 위한 것이 아닙니다.
도구 다운로드