보안 취약점 · 3 min read · Nov 29, 2025
구글 대 마이크로소프트; 구글 연구팀, 윈도우 7/8 취약점 두 개 추가 공개

구글 대 마이크로소프트 전쟁이 격화되면서 구글이 윈도우 7과 윈도우 8의 두 가지 취약점을 공개합니다.
구글 연구팀은 목요일에 구글 프로젝트 제로의 자발적인 90일 대기 기간이 만료된 후, 두 개의 패치되지 않은 윈도우 취약점을 공개했습니다.
이러한 공개에 대해 좋지 않게 반응한 마이크로소프트는 다가오는 2월 패치 화요일 보안 게시물에서 두 가지 취약점 중 하나를 패치할 것이라고 밝혔습니다. 두 번째 결함은 큰 보안 문제가 아닌 것으로 보입니다.
독자들은 구글 연구팀이 90일 자발적 대기 기간이 만료된 후 윈도우 7의 권한 상승 취약점을 공개했음을 기억할 수 있습니다. 구글의 12월 29일 공개는 보안 애호가들 사이의 공개 논쟁을 다시 불러일으켰고 두 회사 모두에서 불만과 공개적인 태도를 촉발했습니다.
마이크로소프트는 구글이 조정된 취약점 공개 프로그램을 따르기를 원하며, 구글에게 이번 주에 발표된 1월 보안 게시물까지 취약점 공개를 보류해 줄 것을 요청했습니다. 반면 구글은 자발적인 90일 유예 기간에 의존하고 있어 이를 거부하고 공개를 진행했습니다.
마이크로소프트의 크리스 베츠는 “구글이 발표한 공개 일정에 따라 진행하는 것은 맞지만, 이 결정은 원칙보다는 ‘잡기’처럼 느껴지며, 그 결과 고객이 고통받을 수 있습니다. 구글에 맞는 것이 항상 고객에게 맞는 것은 아닙니다. 우리는 구글이 고객 보호를 우리의 공동 주요 목표로 삼기를 촉구합니다.”라고 말했습니다.
기술 대기업 간의 전쟁은 구글 연구팀이 두 개의 윈도우 취약점을 공개하면서 끝나지 않았습니다. 두 가지 취약점은 아래에 재현되어 있습니다:
문제 번호 127, 마이크로소프트에 2013년 10월 17일 보고, 2014년 1월 15일 공개
플랫폼: 윈도우 7 32/64 비트, 윈도우 8+는 취약하지 않음
클래스: 보안 우회 시스템 호출 NtPowerInformation은 특정 전원 기능을 수행하기 전에 호출자가 관리자임을 확인하는 검사를 수행합니다. 이 검사는 PopUserIsAdmin 함수에서 수행됩니다. 대략적인 구현은 다음과 같습니다: BOOLEAN PopUserIsAdmin() {
SECURITY_SUBJECT_CONTEXT ctx; SeCaptureSecurityContext(&ctx); return SeTokenIsAdmin(SeQuerySubjectContextToken(&ctx));
} 윈도우 7에서는 이 검사를 우회할 수 있습니다. 왜냐하면 SeTokenIsAdmin 함수가 토큰의 임시 수준을 고려하지 않으며 나머지 코드도 이를 고려하지 않기 때문입니다. 따라서 일반 사용자가 관리자 토큰을 가장하여 보호된 기능을 호출할 수 있습니다(연결된 토큰을 통해 또는 시스템 토큰을 납치하여). 윈도우 8+에서는 SeTokenIsAdmin 방법이 임시 수준을 확인하도록 변경되었으므로 취약하지 않습니다. 이것이 심각한 보안 영향을 미치는지는 불확실하므로 그대로 공개됩니다. 일부 기능은 권한 검사로도 확인되지만, 주체 컨텍스트는 별도로 캡처되므로 검사 간에 TOCTOU 창이 존재하여 악용될 수 있습니다. PoC 목적을 위해 함수 45 “PopRequestPowerListInfo”를 사용하기로 선택했습니다(특별한 트릭이 필요하지 않습니다. 또한 이 함수는 PopPowerRequestObjectCount의 크기를 얼마나 밀어붙일 수 있는지에 따라 이론적인 정수 오버플로우 취약점이 있습니다. 첨부된 간단한 PoC는 윈도우 7에서 실행되는 문제를 보여줍니다. 재현하려면 다음 단계를 따르십시오. 1) 분할 토큰 관리자로 실행되고 있는지 확인하십시오. 이는 PoC가 연결된 토큰을 사용하여 관리자 토큰을 얻기 때문입니다. 일반 사용자의 경우 서비스에서 토큰을 캡처하면 됩니다.
- PoC를 실행하십시오. 호출이 이루어져야 하며, 하나는 임시 없이, 다른 하나는 임시로 호출됩니다. 예상 결과:
두 호출 모두 STATUS_ACCESS_DENIED (0xC0000022)를 반환해야 합니다. 관찰된 결과:
첫 번째 검사는 STATUS_ACCESS_DENIED로 실패하고 두 번째는 STATUS_SUCCESS로 성공합니다. PoC 다운로드 => 1 2
문제 번호 128, 마이크로소프트에 2013년 10월 17일 보고, 2014년 1월 15일 공개
플랫폼: 윈도우 7, 8.1 업데이트 32/64 비트
클래스: 보안 우회/정보 공개 함수 CryptProtectMemory는 애플리케이션이 세 가지 시나리오 중 하나에 대해 메모리를 암호화할 수 있도록 합니다: 프로세스, 로그인 세션 및 컴퓨터. 로그인 세션 옵션(CRYPTPROTECTMEMORY_SAME_LOGON 플래그)을 사용할 때 암호화 키는 로그인 세션 식별자를 기반으로 생성됩니다. 이는 동일한 로그인 내에서 실행되는 프로세스 간에 메모리를 공유하기 위한 것입니다. 이는 한 프로세스에서 다른 프로세스로 데이터를 전송하는 데 사용될 수 있으므로 임시 토큰에서 로그인 세션 ID를 추출하는 것을 지원합니다. 문제는 CNG.sys의 구현이 로그인 세션 ID를 캡처할 때 토큰의 임시 수준을 확인하지 않기 때문에 일반 사용자가 식별 수준에서 가장하여 해당 로그인 세션에 대한 데이터를 암호화하거나 복호화할 수 있다는 것입니다. 이는 이름이 지정된 파이프 심기 공격에 취약한 서비스가 있거나 전 세계에서 읽을 수 있는 공유 메모리 섹션에 암호화된 데이터를 저장하는 경우 문제가 될 수 있습니다. 물론 이러한 동작은 설계일 수 있지만, 설계에 참여하지 않았기 때문에 판단하기 어렵습니다. 문서에는 사용자가 클라이언트를 가장해야 한다고 명시되어 있으며, 이는 클라이언트를 식별하기보다는 클라이언트를 대신하여 행동할 수 있어야 한다고 해석합니다. 첨부된 간단한 PoC는 문제를 보여줍니다. 재현하려면 다음 단계를 따르십시오. 1) 명령줄에서 Poc_CNGLogonSessionImpersonation.exe를 실행하십시오.
- 프로그램이 “암호화가 일치하지 않습니다”라는 메시지를 출력해야 하며, 이는 동일한 데이터의 두 암호화가 일치하지 않음을 나타내며, 키가 서로 다르다는 것을 의미합니다. 예상 결과:
두 호출 모두 동일한 암호화된 데이터를 반환해야 하거나 두 번째 호출이 실패해야 합니다. 관찰된 결과:
두 호출 모두 성공하고 서로 다른 암호화된 데이터를 반환합니다. PoC 다운로드 => Zip 파일
마이크로소프트는 2월 패치 화요일에 단 하나의 취약점만 패치할 것이며, 다른 취약점은 보안 위험이 아니라고 밝혔습니다. 마이크로소프트와 구글 모두 공개된 세 가지 취약점이 실제로 악용되었다는 증거가 없다고 밝혔습니다.
새 게시물을 받은 편지함에서 받기
스팸은 없습니다. 언제든지 구독 해지 가능합니다.