
기가바이트의 GVCIDrv64.sys 커널 드라이버에 대한 개념 증명 익스플로잇으로, 임의의 물리 메모리 및 I/O 포트 읽기/쓰기를 통해 로컬 권한 상승을 달성합니다.
해커 여러분.
GVCIDrv64.sys는 Gigabyte의 BIOS 유틸리티와 함께 제공되는 서명된 커널 드라이버입니다. 이 드라이버는 보안 서술자 없이 \\.\GVCIDrv64를 생성하므로, 로컬 사용자라면 누구나 관리자 권한이나 UAC 없이 이를 열 수 있습니다. 이 드라이버는 접근 제어가 전혀 없는 3개의 IOCTL을 노출합니다: 물리 메모리 32 MB 매핑(0x9C406580), 매핑 해제(0x9C406584), 그리고 1/2/4 바이트의 원시 I/O 포트 읽기/쓰기(0x9C406588)입니다.
핵심은 이 중 2개가 어떻게 결합되는지에 있습니다. 매핑 IOCTL은 PCI 장치의 BAR0을 읽어 매핑하지만, 포트 IOCTL을 사용하면 먼저 그 BAR0을 다시 쓸 수 있습니다. BAR을 임의의 물리 주소로 지정하고 매핑을 호출하면 선택한 RAM 32 MB가 프로세스에 들어옵니다. 이것은 각각 무해하다고 여겨졌던 2개의 기능으로 만들어진 임의 물리 읽기/쓰기입니다.
그래서 무엇을 얻을 수 있을까요? 일반 사용자 계정에서 임의의 물리 메모리 읽기/쓰기와 임의의 I/O 포트 접근이 가능하며, 메모리 손상도 없고 대응할 완화 기법도 없습니다. 이 익스플로잇은 물리 메모리에서 System 프로세스(pid 4)를 스캔하고, 그 토큰을 읽고, 자신의 프로세스 토큰을 덮어쓰고 시스템 셸을 실행합니다. 데이터 전용이며, 커널 모드에 셸코드가 없습니다.
2가지 실용적인 제약이 있습니다. BAR0은 32비트이므로 윈도우는 4 GB 미만으로 유지됩니다. RAM이 2 GB 이하인 VM을 사용하세요. 그리고 이 익스플로잇은 NIC의 BAR0을 잠시 다시 쓰므로, 먼저 네트워크 어댑터를 비활성화하지 않으면 교체 중 인터럽트로 BSOD가 발생합니다.
VMware Workstation(2 GB RAM)의 Windows 10 x64 22H2에서 테스트되었습니다. 이 드라이버는 Gigabyte 유틸리티가 설치된 컴퓨터에 이미 로드되어 있으며, 익스플로잇은 테스트 박스에서 SCM을 통해 로드할 수도 있습니다.
gcc -O2 -o exploit.exe exploit.c -ladvapi32
exploit.exe
2026년 6월에 Gigabyte에 보고되었습니다. Gigabyte는 드라이버를 완전히 제거하고 GBT_VGA_26.08.24.01에서 GvVbiosDrv64.sys로 교체했습니다. 이전의 취약한 드라이버는 더 이상 존재하지 않습니다. 권고: Security Advisory 2454.
arb_rw.c는 독립 실행형 물리 메모리 읽기/쓰기/덤프 도구입니다.
SHA256 a2353030d4ea3ad9e874a0f7ff35bbfa10562c98c949d88cabab27102bbb8e48 GVCIDrv64.sys