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

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

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

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
edk2-security — EDK2 BrotliCustomDecompressLib 보안 취약점 발견 사항 — 조정된 공개 | Kitploit
도구/GitHubGitHub/lukr54/edk2-security
Embedded Systems SecurityVulnerability ScannersVulnerability AnalysisExploitationHardware & IoT SecurityPapers & ResearchFirmware AnalysisBinary Exploitation
GitHublukr54/edk2-security

edk2-security

EDK2 BrotliCustomDecompressLib 보안 취약점 발견 사항 — 조정된 공개

저장소 보기
171일 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

EDK2 BrotliCustomDecompressLib — 힙 오버플로 (미수정)

EDK2 자체의 Brotli 압축 해제 글루 코드 (MdeModulePkg/Library/BrotliCustomDecompressLib)에 존재하는 힙 버퍼 오버플로로, 2017년부터 존재해 왔으며 2026-10-25 기준 HEAD에서도 미수정 상태입니다. 개념 증명 (PoC)과 엔드투엔드 제어된 손상 데모로 ASAN에서 확인되었습니다.

요약

EDK2의 Brotli 래퍼는 공격자가 제어하는 GUIDed 섹션 헤더에서 압축 해제된 출력 크기를 읽고, 아무런 가드 없이 UINT64 → UINT32로 잘라낸 뒤, 해당 크기의 버퍼를 할당하는 DXE 코어에 전달합니다. 그런 다음 BrotliDecompressInternal이 그 버퍼로 무제한으로 압축을 해제합니다 — Brotli 스트림이 끝날 때까지 계속 실행되며 할당된 범위를 넘어 씁니다.

결과: Secure Boot 검증이 완료되기 전인 DXE 단계에서의 힙 오버플로(쓰기 프리미티브). 펌웨어 이미지(플래시, 캡슐 또는 ESP)를 제어하는 공격자는 인접한 풀 객체 — 함수 포인터, 보안 플래그, 프로토콜 구조체 — 를 선택한 바이트로 덮어쓸 수 있습니다.

이것은 CVE-2021-28211의 간과된 Brotli 형제 격입니다(LZMA는 2021년에 >MAX_UINT32 가드를 받았지만, Brotli는 결코 받지 못했습니다). 변형 전수 조사 결과 Brotli는 잘림 가드와 출력 경계를 모두 갖추지 못한 EDK2의 유일한 압축 해제기임이 확인되었습니다.

영향받는 코드

파일역할
BrotliDecompress.c:238UINT64 디코딩 크기를 UINT32로 캐스팅 — MAX_UINT32 가드 없음
BrotliDecompress.c:118–157경계 검사 없이 대상 버퍼로 압축 해제
GuidedSectionExtraction.cGetInfo를 호출한 뒤 Decompress 호출 — 선언된 크기를 신뢰
CoreSectionExtraction.c:1597선언된 크기로 대상 버퍼 할당

모두 tianocore/edk2, MdeModulePkg/Library/BrotliCustomDecompressLib에 위치합니다.

증거

산출물설명
harness/edk2_brotli_overflow_poc.cASAN 개념 증명: 4096바이트 스트림을 64바이트 버퍼로
harness/asan_output.txtASAN 출력: BrotliDecompressInternal → memcpy에서 heap-buffer-overflow
harness/edk2_brotli_overflow_demo.c엔드투엔드 데모: 인접 풀 객체의 제어된 손상
harness/demo_output.txt데모 출력: 함수 포인터 탈취, Secure Boot 비활성화
harness/lvfs_brotli_scan.pyLVFS 펌웨어 스캐너 (영향 범위 측정)
harness/lvfs_scan_output.txt스캔 결과: 200개 펌웨어 이미지 중 0개가 Brotli 사용
evidence/HEAD 시점의 취약한 EDK2 소스 파일 사본
FINDINGS.md전체 분석 문서: 라인 참조, 선행 사례 검색, 변형 전수 조사, LZMA 감사

영향 범위

좁음. 두 개의 독립적인 조사에서 실제로 Brotli GUIDed 섹션을 사용하는 플랫폼이 전혀 없음을 확인했습니다:

  • GitHub 코드 검색 (모든 공개 저장소): BrotliCustomDecompressLib를 참조하는 플랫폼 DSC 파일이 0개. 모든 검색 결과는 MdeModulePkg.dsc 자체입니다.
  • LVFS 펌웨어 스캔 (출하 이미지 200개, 벤더 9곳): Brotli GUID는 200개 중 0개 이미지에서 발견됨. LZMA(양성 대조군)는 200개 중 161개에서 발견됨.

취약한 코드는 EDK2 트리에 포함되어 출하되지만 현재는 죽은 코드입니다 — 2017년에 추가되었으나 IBV나 OEM에 의해 채택된 적이 없습니다. 버그는 실제이며 원칙적으로 악용 가능합니다; Brotli 채택이 늘어나면 즉시 도달 가능해집니다.

수정

LZMA와 Tiano가 이미 갖추고 있는 것과 일치하는 두 가지 변경:

  1. MAX_UINT32 가드 추가 — BrotliUefiDecompressGetInfo (BrotliDecompress.c:238)에서: CVE-2021-28211 이후 LzmaDecompress.c:149가 하는 것처럼 MAX_UINT32보다 큰 디코딩 크기를 거부.
  2. 출력 경계 설정 — BrotliDecompressInternal에서: 기록된 바이트 수를 추적하고 Tiano 압축 해제기가 mOrigSize로 하는 것처럼 DestinationSize에서 중단.

재현

libbrotli와 GCC를 사용하여 Linux에서 PoC를 빌드:

# ASAN proof (aborts at the overflow)
gcc -fsanitize=address -g -O1 -o poc harness/edk2_brotli_overflow_poc.c \
    -lbrotlienc -lbrotlidec
./poc

# Controlled-corruption demo (completes the overflow, shows the damage)
gcc -g -O1 -o demo harness/edk2_brotli_overflow_demo.c \
    -lbrotlienc -lbrotlidec
./demo

선행 사례

  • CVE-2021-28211 — 2021년에 수정된 LZMA 형제 버그. Brotli 경로는 간과되었다.
  • CVE-2026-111497 — 별개의 업스트림 Brotli 디코더 버그(9.2). EDK2도 영향을 받지만(이슈 #13378), 이는 다른 발견 사항이다.
  • Brotli 글루 오버플로를 다루는 공개 CVE, 권고, 이슈 또는 PR은 없다. 확인 대상: 14개의 EDK2 GHSA 전체, 29개의 Brotli 이슈 전체, 28개의 Brotli PR 전체, CVE/NVD, EDK2 HEAD.

공개

완전한 공개 공개, 2026-10-26. TianoCore에는 조정된 공개 기간이 주어지지 않았다. 좁은 영향 범위(출하되는 펌웨어 중 영향받는 것 없음)와 형제 LZMA 버그가 2021년부터 공개되어 왔다는 사실이 이 결정에 영향을 주었다.

작성자

@lukr54

도구 다운로드