업데이트로 돌아가기
UpdatedSep 3, 2026

CVE-2025-4275 — Updated!

CVE-2025-4275(Hydr0ph0bia)에 대한 분석 및 익스플로잇으로, 펌웨어 변수를 사용하여 이후 부팅 구성 요소에서 신뢰하는 공격자 제어 인증서를 도입하는 Secure Boot 신뢰 체인의 취약점입니다.

공유

🐞 CVE-2025-4275: Hydroph0bia SecureFlash 인증서 섀도잉

이 저장소는 Insyde H2O 기반 UEFI 호환 펌웨어에 영향을 미치는 Secure Boot 우회 취약점인 CVE-2025-4275와 관련된 연구 자료를 담고 있습니다. 이 취약점에 대한 기술적 분석, 문제에 연루된 바이너리, 그리고 연구자들이 실제 환경과 교육적 맥락 모두에서 이 취약점을 더 잘 이해하고 연구하며 실험할 수 있도록 돕기 위한 문서와 도구를 한데 모았습니다.




📑 목차




🧠 최초 발견 및 공식 참고 자료

CVE-2025-4275는 Nikolaj Schlej에 의해 최초로 발견되어 책임 있는 공개 절차를 거쳤으며, CERT/CC를 통해 조율되었습니다. 공식 및 커뮤니티 참고 자료:




🧪 취약점 개요 (분석, 익스플로잇, PoC)

Hydroph0bia(Insyde H2O를 비꼬는 말장난)라고 불리는 CVE-2025-4275는 Insyde H2O 플랫폼을 기반으로 구축된 UEFI 호환 펌웨어에 영향을 미치는 Secure Boot 우회 취약점입니다. 이 취약점은 펌웨어 업데이트 하위 시스템의 설계 결함에서 비롯됩니다. 신뢰할 수 있는 드라이버가 휘발성 NVRAM 변수에 로드하도록 의도된 서명 인증서를, 공격자가 비휘발성 변수로 미리 채워 넣을 수 있으며, 이로 인해 펌웨어가 마치 Insyde가 직접 서명한 것처럼 임의의 외부 코드를 신뢰하게 됩니다.

이 취약점이 특히 큰 영향을 미치는 이유는 그 단순함과 광범위한 적용 범위가 결합되어 있기 때문입니다. 익스플로잇에는 EFI 시스템 파티션에 파일을 쓰고 NVRAM 변수를 생성할 수 있는 로컬 관리자 권한만 있으면 충분하며, 2025년 6월 10일 이전에 빌드된 Insyde H2O 펌웨어를 실행하는 모든 시스템에 영향을 미칩니다. 이 공격은 OEM에 구애받지 않으므로 Acer, Dell, Framework, Fujitsu, HP, Huawei, Lenovo 및 Insyde 기반 펌웨어를 출하하는 기타 모든 벤더에 광범위하게 적용됩니다.


🔐 Insyde H2O의 NVRAM과 Secure Boot

UEFI는 NVRAM으로 알려진 비휘발성 변수 저장소에 대한 추상 인터페이스를 제공합니다. 이 인터페이스의 오랜 특이점 중 하나는 주어진 이름과 GUID를 가진 비휘발성 변수가 동일한 식별자를 가진 휘발성 변수와 공존하며 이를 가릴 수 있다는 점입니다. 코드가 (신뢰할 수 있는 드라이버에 의해 런타임에 생성된) 휘발성 변수를 기대하지만 동일한 이름의 비휘발성 변수가 이미 존재하는 경우, 비휘발성 버전이 대신 사용될 수 있습니다. 때때로 NVRAM 변수 섀도잉이라고 불리는 이 동작이 이 취약점의 근간입니다.

Insyde H2O의 펌웨어 업데이트 하위 시스템은 드라이버 간에 서명 인증서를 전달하기 위해 두 개의 NVRAM 변수에 의존합니다:

  • SecureFlashSetupMode: SecurityStubDxe가 읽어 인증서 기반 검증을 활성화하는 트리거 변수입니다.
  • SecureFlashCertData: EFI_SIGNATURE_LIST 형식의 서명 인증서를 담고 있으며, 펌웨어 업데이터 애플리케이션(isflash.bin)을 인증하는 데 사용되는 변수입니다.

예상되는 흐름에서 두 변수는 모두 펌웨어 업데이트 과정에서 BdsDxe에 의해 휘발성으로 생성됩니다. 그런 다음 SecurityStubDxe가 이들을 사용하여 isflash.bin이 실행되기 전에 Insyde의 인증서로 서명되었는지 검증합니다. 핵심 결함은 SecurityStubDxe가 이 변수들의 내용을 신뢰하기 전에 해당 변수가 휘발성인지 비휘발성인지 검증하지 않는다는 점입니다.


💣 NVRAM 변수 섀도잉

CVE-2025-4275의 근본 원인은 SecurityStubDxe가 GetVariable 런타임 서비스를 직접 호출하는 대신 일반 라이브러리 함수를 사용하여 SecureFlashSetupMode와 SecureFlashCertData를 읽는다는 점입니다. 이는 신뢰할 수 있는 BdsDxe가 설정한 휘발성 변수와 공격자가 미리 채워 넣은 비휘발성 변수를 구분할 수 없음을 의미합니다(이 특정 기법에 대한 자세한 설명은 다음 저장소를 참조하십시오 "TheMalwareGuardian: Exploitation Technique NVRAM Variable Shadowing").

결과적으로 로컬 관리자 권한을 가진 공격자는 다음을 수행할 수 있습니다:

  • 펌웨어 업데이트 흐름이 시작되기 전에 비휘발성 SecureFlashSetupMode 트리거 변수를 생성합니다.
  • EFI_SIGNATURE_LIST 형식의 공격자 제어 인증서를 담은 비휘발성 SecureFlashCertData 변수를 생성합니다.

다음 부팅 시 SecurityStubDxe는 두 변수를 모두 찾아 합법적인 것으로 간주하고, 공격자의 인증서로 서명된 모든 UEFI 실행 파일을 신뢰하여 사실상 Secure Boot를 완전히 우회합니다. 펌웨어 수준의 상호작용, 하드웨어 접근, 또는 메모리 손상 프리미티브의 익스플로잇은 필요하지 않습니다. 공격 표면은 단순히 권한 있는 OS 세션에서 접근 가능한 UEFI NVRAM 쓰기 인터페이스입니다.


💥 취약점 발견 및 익스플로잇

이 취약점은 Secure Boot, 펌웨어 비밀번호 및 기타 최신 보안 기능이 활성화된 Insyde H2O 기반 펌웨어를 실행하는 HUAWEI MateBook 14 2023에 대한 보안 검토 중에 발견되었습니다. 이러한 보호에도 불구하고 OS 수준의 관리자 권한만으로 완전한 익스플로잇이 달성되었습니다.

초기 익스플로잇 단계에는 다음과 같은 작은 Windows 도구(SFCD)가 필요합니다:

  • SetFirmwareEnvironmentVariable을 호출하는 데 필요한 SeSystemEnvironmentPrivilege 권한을 획득합니다.
  • 공격자 제어 인증서를 담은 비휘발성 SecureFlashCertData 변수를 생성합니다.
  • 1로 설정된 비휘발성 SecureFlashSetupMode 트리거 변수를 생성합니다.

재부팅 후 SecurityStubDxe는 두 변수를 읽고 공격자의 인증서로 서명된 모든 것을 신뢰하기 시작합니다. 이 첫 단계의 실질적인 시연은 사용자 지정 인증서로 서명된 CrScreenshotDxe UEFI 드라이버를 로드하는 것으로, Secure Boot가 활성화된 상태에서 BIOS Setup 화면의 스크린샷을 성공적으로 캡처하여 펌웨어 환경에서의 임의 코드 실행을 증명합니다.

중요한 미묘한 차이: CVE-2025-3052에 존재하는 IhisiParamBuffer 변수는 Insyde 기반 플랫폼에서 종종 잠겨 있어 직접적인 익스플로잇을 더 어렵게 만듭니다. CVE-2025-4275는 그러한 변수가 쓰기 가능할 것을 요구하지 않으며 어떤 메모리 손상 프리미티브에도 의존하지 않습니다. 이 공격은 공격자가 NVRAM에 쓸 수 있는 모든 Insyde H2O 시스템에서 작동하며, 이는 패치되지 않은 펌웨어의 기본 동작입니다.


🎯 공격 (파트 1 - Secure Boot 우회)

다음은 OS 수준 접근 권한을 가진 권한 있는 공격자를 가정하여, 초기 Secure Boot 우회 단계의 종단 간 공격을 설명합니다:

  1. 사용자 지정 인증서 생성: 공격자는 키 쌍을 생성하고 공개 인증서를 EFI_SIGNATURE_LIST 형식으로 감쌉니다.
  2. NVRAM 변수 설정: Windows 관리자 세션에서 SFCD 도구를 사용하여 공격자는 비휘발성 SecureFlashCertData(사용자 지정 인증서 포함)와 SecureFlashSetupMode(1로 설정)를 생성합니다.
  3. 페이로드 서명: 공격자는 사용자 지정 개인 키로 모든 UEFI 애플리케이션 또는 드라이버에 서명합니다.
  4. 페이로드 등록: 서명된 페이로드는 DriverXXXX 부팅 옵션 메커니즘을 통해 UEFI 드라이버로 등록되거나 UEFI Boot Manager의 부팅 항목으로 배치됩니다.
  5. 재부팅: 다음 부팅 시 SecurityStubDxe는 섀도잉된 NVRAM 변수를 읽고, 공격자의 인증서를 신뢰하며, Secure Boot 상태와 무관하게 서명된 페이로드의 실행을 허용합니다.

🔺 권한 상승 (파트 2 - DXE 볼륨 탈취)

파트 1에서 달성한 Secure Boot 우회는 훨씬 더 큰 영향을 미치는 두 번째 단계, 즉 Insyde 펌웨어 업데이트 프로세스 자체를 하이재킹하여 DXE 볼륨을 완전히 탈취하는 길을 열어줍니다.

Insyde H2O의 펌웨어 업데이트 하위 시스템은 다음과 같이 작동합니다: OS 업데이터가 펌웨어 캡슐과 서명된 업데이터 애플리케이션(isflash.bin)을 EFI 시스템 파티션에 배치한 다음, SecureFlashInfo NVRAM 변수 내에 SecureFlashTrigger=1 플래그를 설정합니다. 다음 부팅 시 펌웨어는 트리거를 감지하고, PEI 중에 플래시 쓰기 보호를 비활성화하며, 결국 Insyde 인증서에 대해 검증한 후 isflash.bin에 대해 LoadImage를 호출합니다. 이는 CVE-2025-4275가 공격자로 하여금 교체할 수 있게 하는 바로 그 인증서 메커니즘입니다.

Secure Boot 우회에서 DXE 탈취로 권한 상승하기 위해서는 세 가지 추가 기술적 단계가 필요합니다:

  • SecureFlashCertData 삭제 우회 : SecureFlashDxe는 LoadImage를 호출하기 전에 인증서 변수를 삭제하려 시도하며, Insyde AW(Authenticated Write) 특수 변수를 제거할 수 없는 naked SetVariable 호출을 사용합니다. 공격자는 이 삭제 시도를 견디기 위해 인증서를 AW 속성이 부여된 특수 변수로 다시 설정합니다.
  • InsydeVariableLock 잠금 해제: VariableRuntimeDxe는 BDS 시작 후 AW 변수 생성을 방지하는 전역 플래그(InsydeVariableLock)를 설정합니다. DriverXXXX를 통해 UEFI 드라이버를 등록하면(이 잠금이 걸리기 전에 실행됨) 공격자는 BdsArchProtocol->Entry 후크 체인을 파싱하여 메모리에서 플래그를 찾아 1에서 0으로 뒤집습니다.
  • SecureFlashInfo 설정: SecureFlashInfo 변수는 일반적으로 VariableLockProtocol에 의해 보호되지만, 이 잠금은 ReadyToBoot에서만 걸립니다. DriverXXXX를 통해 등록된 드라이버는 이 이벤트 전에 실행되어 펌웨어 업데이트 흐름을 시작하기 위해 SecureFlashTrigger=1을 자유롭게 설정할 수 있습니다.

세 가지 조건이 모두 충족되면 펌웨어는 업데이트 모드로 재부팅하고, 공격자의 사용자 지정 isflash.bin(공격자의 인증서로 서명되었으며, 이제 섀도잉된 SecureFlashCertData로 인해 신뢰됨)을 로드하며, SPI 플래시가 보호되지 않은 상태에서 이를 실행합니다. 이 위치에서 공격자는 DXE 볼륨에 임의의 내용을 쓸 수 있으며, OS 재설치와 대부분의 보안 제어를 견디는 방식으로 지속적 드라이버를 설치하거나 펌웨어 구성 요소를 수정할 수 있습니다.


🩹 수정 (파트 3 - 패치 분석)

Insyde는 2025년 6월 10일 패치 주기의 일부로 수정 사항을 발표했습니다. 이 수정 사항은 UEFITool로 생성된 보고서와 Diaphora를 통한 바이너리 디핑을 사용하여 두 개의 연속된 Dell BIOS 업데이트(하나는 패치 전, 하나는 패치 후)를 비교함으로써 분석되었습니다.

변경 사항은 세 개의 드라이버에 집중되었습니다:

  • BdsDxe: (AW 속성이 부여된 특수 변수를 제거할 수 없었던) naked gRT->SetVariable 호출을 SMM 통신을 사용하고 그러한 변수를 제거할 수 있는 LibSetSecureVariable 호출로 교체했습니다.
  • SecureFlashDxe: 동일한 LibSetSecureVariable 교체를 적용하고, 드라이버 진입점에서 SecureFlashSetupMode와 SecureFlashCertData의 명시적 삭제를 추가했으며, OS 수준 코드로부터의 생성을 차단하기 위해 두 변수에 대한 VariablePolicy를 등록했습니다.
  • SecurityStubDxe: `ExitBootServices 이벤트 핸들러에 대한 사소한 무관한 수정; 핵심 취약점 경로는 구조적으로 변경되지 않았습니다.

이 수정은 공격자가 VariablePolicy 또는 LibSetSecureVariable을 우회할 수 없다는 가정 하에 효과적입니다. 그러나 VariablePolicy의 기본 EDK2 구현은 내부적으로 전역 플래그를 사용하며, 이는 파트 2에서 무력화된 InsydeVariableLock과 구조적으로 유사합니다. SPI 프로그래밍 하드웨어를 통한 물리적 NVRAM 편집 역시 이 수정을 완전히 우회할 수 있지만, 물리적 공격은 관례적으로 Secure Boot 위협 모델의 범위를 벗어납니다.

연구자가 권장한 개선책인 BdsDxe와 SecurityStubDxe 사이의 인증서 릴레이 메커니즘에서 NVRAM을 완전히 제거하는 방안은 Insyde가 시도했으나 회귀를 일으켜 향후 엔지니어링 주기로 연기되었습니다.


📦 영향받는 벤더

2025년 6월 10일 이전에 빌드된 Insyde H2O 기반 펌웨어를 출하하는 모든 벤더가 잠재적으로 영향을 받습니다. 공개 시점의 확인된 상태:

벤더상태
Dell수정됨 - 엠바고 종료 직후 BIOS 업데이트 출시
Lenovo취약함 - 수정 발표됨, 2025-07-30부터 제공
Framework취약함 - 공개 시점에 제공 예상 시기 미제공
Acer공개 시점에 권고 또는 수정 발표 없음
Fujitsu공개 시점에 권고 또는 수정 발표 없음
HP공개 시점에 권고 또는 수정 발표 없음
Huawei최초 테스트 장치 벤더 - 수정 상태 불명



🤝 연구 및 협업

비슷한 작업을 하고 계신가요? UEFI, 커널 보안, 익스플로잇 또는 다른 흥미로운 보안 주제를 연구하고 계신가요? 익스플로잇 개발, 기법 탐구에 도움이 필요하거나 단순히 아이디어를 교환하고 싶다면 주저하지 말고 연락해 주세요. 저는 항상 연구에 대한 논의, 도울 수 있는 부분에서의 지원, 그리고 흥미로운 프로젝트에서의 협업에 열려 있습니다. LinkedIn으로 편하게 연락해 주세요.

카테고리