
스팀 클라이언트 서비스 로컬 권한 상승 취약점

PoC 영상: 여기
John Hammond의 짧고 좋은 영상 여기
영감을 준 @MSNIGHTMARE2000 에게 감사를 - 그에게 일자리를 주고 이메일을 보내주세요!
최고의 친구인 Tookie, Hazetick, belogen, bet3rd 에게 감사를.
그리고 넌 아직 나에게 Overwatch나 Starlight Princess 게임 세션을 빚졌어 lusilly, 냐옹 :3
BrokenPipe는 표준 Windows 계정에서 Steam 클라이언트 서비스를 통해
NT AUTHORITY\SYSTEM으로의 로컬 권한 상승을 시연합니다. 이 증명은 관리자 자격 증명을 요청하거나
UAC 프롬프트를 표시하지 않고 대화형 SYSTEM 명령 프롬프트를 실행합니다.
NT AUTHORITY\SYSTEM으로 실행되었습니다.whoami /user는 Local System SID인 S-1-5-18을 반환했습니다.항상 SYSTEM으로 실행되는 Steam 클라이언트 서비스(steamservice.exe)는 정품 Valve 서명 설치 스크립트 VDF의
서명 범위에 포함되지 않는 호출자 제어 설치 루트를 허용합니다. BrokenPipe는 이 서명 범위 격차를 이용하여
권한 있는 서비스가 포함된 런처를 재배치된 경로에서 SYSTEM으로 실행하도록 만듭니다. 이는 VDF 서명을
위조, 수정 또는 우회하지 않습니다.
파이프라인:
Establish IPC connection to Steam Client Service (No Admin Needed)
|
v
IClientInstallUtils::AddInstallScriptToWhiteList
|
| Genuine Valve-signed VDF
| Caller-controlled installation root <------ flaw exists here.
| Relocated launcher becomes whitelisted <---------ˡ
v
IClientInstallUtils::RunInstallScript
|
| Service processes the run VDF
| Whitelisted launcher is selected
v
Steam Client Service launches the executable as SYSTEM
|
| BrokenPipe receives an interactive
| NT AUTHORITY\SYSTEM command prompt
v
IClientInstallUtils::GetInstallScriptExitCode
|
| Optional polling or result collection
v
Cleanup and receipt generation
이 증명은 최신 버전의 Windows 10 및 Windows 11 x64에서 현재 버전의 Steam 10.96.30.42에 대해 검증되었습니다.
요구 사항:
프로젝트 디렉터리에서 PowerShell을 열고 다음을 실행하세요:
powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\build.ps1
완성된 실행 파일은 다음 위치에 작성됩니다:
x64\Release\BrokenPipe.exe
빌드 스크립트는 MSBuild를 찾고, 내장된 페이로드 해시를 검증하고, x64 Release 구성을 다시 빌드하고, 최종 실행 파일 경로와 SHA-256을 출력합니다.
Visual Studio에서 BrokenPipe.sln을 열고 Release | x64를 선택한 다음
Build > Rebuild Solution을 선택할 수도 있습니다.
BrokenPipe.exe를 정상적으로 실행합니다.whoami 또는 whoami /user 또는 실행하고 싶은 다른 명령으로 새 SYSTEM 프롬프트를 확인합니다.exit를 입력하거나 SYSTEM 프롬프트를 닫습니다.명령줄 인수나 외부 런타임 파일은 필요하지 않습니다. 페이로드 ZIP은 실행 파일에 컴파일되어 있습니다.
이 증명은 지속성을 생성하지 않고, 정식 C:\Windows\System32\cmd.exe만 실행하며, 상승된 프로세스 트리를
종료 시 함께 종료되는 Windows 작업에 배치합니다. JSON 영수증은 C:\Users\Public\BrokenPipe에 작성됩니다.
사용되는 페이로드를 조정하려면 payloads 폴더에 BrokenPipePayload.zip이라는 이름으로 있습니다.
BrokenPipe\
assets\
brokenpipe-system-shell.png
payload\
BrokenPipePayload.zip
BrokenPipe-Bootstrap.ps1
BrokenPipe.cpp
BrokenPipe.rc
BrokenPipe.sln
BrokenPipe.vcxproj
build.ps1
resource.h
README.md
내장된 페이로드는 BrokenPipe.rc에서 리소스 경로도 함께 업데이트하지 않는 한
payload\BrokenPipePayload.zip에 있어야 합니다.
Q: 이게 뭐죠
A: 표준 사용자 -> SYSTEM 로컬 권한 상승입니다
Q: 어떻게 작동하나요?
A: Payload\BrokenPipePayload.zip을 살펴보고, 압축을 풀고 코드를 읽어보세요.
Q: 쓸모없지 않나요?
A: 당신에게는 아마도, 다른 사람들에게는 아마 아닐 겁니다.
Q: 뭐가 그렇게 나쁜가요
A: SYSTEM 권한을 얻는 것입니다. 이는 Administrator(마우스 오른쪽 클릭으로 선택하는 것)보다 한 단계 높고, 실제로 관리자인 적이 없음에도 TRUSTEDINSTALLER보다 한 단계 낮습니다. 이걸 이해하지 못한다면, 구글링하세요 (또는 Grok, ChatGPT, Siri 같은 친근한 동네 LLM에게 물어보세요 ㅋㅋ)
Q: 왜요?
A: VALVE가 이미 3월부터 이걸 알고 있지만 고치지 않았기 때문이고, 단지 내가 Steam이나 VALVE 게임에 관심이 없기 때문입니다. 특히 CS2가 치터와 익스플로이터로 가득한 상황에서는 더욱요. 그들은 이걸 고치고 그 5개월 된 보고서를 조사해야 합니다.
Q: 누군가가 한 어떤 멍청한 표준 관리자 설치 질문이나 뭐 그런 게 내 뇌세포를 약간 손실시켰는데...
A: 당신의 안티바이러스조차 설치할 때 관리자 권한이 필요합니다. Steam 설치도 물론 첫 설치 시 관리자 권한이 필요합니다. 그 후에는 표준 사용자에게도 서비스를 SYSTEM으로 실행할 뿐입니다. 나에게 묻지 말고 VALVE에게 물어보세요.
이 프로젝트는 승인된 보안 연구 및 방어적 검증을 위해 제공됩니다. 소유하거나 평가에 대한 명시적 허가를 받은 시스템에서만 테스트하세요.