The Deathray: 신뢰할 수 없는 사이트가 Mac을 멈추게 하는 간단한 방법

3 hours ago 1

웹사이트의 WebGPU 셰이더가 Mac의 그래픽 처리를 막아, 링크 클릭만으로 재시작 전까지 데스크톱 UI를 사용할 수 없게 만들 수 있음 무한 루프를 실행하는 컴퓨트 셰이더와 같은 버퍼를 읽는 버텍스 셰이더가 GPU 작업을 막고, 그 영향이 WindowServer까지 번짐 Tahoe를 실행하는 M 시리즈 MacBook에서 Chrome·Firefox·Safari 모두 재현됐으며, 다른 Mac의 영향 여부는 확인되지 않음 UI가 멈춰도 SSH 접속은 가능하지만, WindowServer가 장시간 응답하지 않으면 워치독이 커널 패닉과 재시작을 유발함 Apple은 수정 의사를 밝혔다가 보안 문제로 보지 않는다며 입장을 바꿈 — 샌드박스 탈출이나 RCE보다 심각도는 낮지만, 링크 하나가 컴퓨터 전체 사용을 방해하는 현상은 브라우저에 대한 사용자 신뢰와 충돌함 재현 범위와 사용자에게 나타나는 증상 Deathray는 웹사이트가 제출한 WebGPU 셰이더로 Mac의 그래픽 처리를 멈추게 함 피해자는 링크를 클릭하는 것만으로 영향을 받을 수 있으며, 데스크톱 UI는 재시작할 때까지 사용할 수 없게 됨 실제 테스트 범위는 Tahoe를 실행하는 M 시리즈 MacBook이며, Chrome·Firefox·Safari에서 재현됨 다른 Mac도 영향을 받는지는 확인되지 않음 테스트한 다른 운영체제에서는 Mac과 같은 장애가 재현되지 않음 탭이 멈추고 시스템이 느려질 수 있지만, 탭을 닫으면 정상으로 돌아옴 환경에 따라 결과가 달라질 수 있으므로 데모를 실행하려면 컴퓨터가 멈출 가능성을 감수해야 함 WebGPU 셰이더가 WindowServer를 막는 과정 WebGPU는 웹사이트가 기기의 GPU에서 실행할 셰이더를 제출할 수 있는 브라우저 내장 API임 WebGL을 대체하려는 기술이며, 대부분의 운영체제에서 주요 브라우저가 지원함 Deathray 전체는 작은 파일 하나에 들어가며, 대부분은 실행을 위한 보조 코드이고 핵심은 셰이더임 전체 소스 코드를 확인할 수 있음 컴퓨트 셰이더는 증가식이 없는 for(var i = 0u; i < 1;) 루프에서 data[i+1] = data[i]를 끝없이 실행함 같은 벡터를 버퍼 안에서 반복 복사하며 무한히 바쁜 대기 상태를 유지함 버텍스 셰이더는 컴퓨트 셰이더가 쓰는 동일한 버퍼에서 data[vertexIdx]를 읽어 위치로 반환함 컴퓨트 셰이더가 계속 실행 중이므로 버텍스 셰이더가 진행하지 못함 ...

Read Entire Article