WebGPU 무한 셰이더가 macOS WindowServer를 멈춰 강제 재시작 유발
- Deathray 웹페이지는 클릭 한 번으로 WebGPU 셰이더를 실행해 macOS 그래픽 처리를 멈추고, 데스크톱 UI가 응답하지 않아 강제 재시작이 필요해지게 함
- 계산 셰이더가 같은 버퍼를 끝없이 쓰고 정점 셰이더가 그 버퍼를 읽으려 하면서 GPU 작업이 막히며, WindowServer까지 GPU를 쓰지 못해 멈춤
- 작성자는 M 시리즈 MacBook의 macOS Tahoe에서 Chrome·Firefox·Safari 모두 재현했으며, 테스트한 다른 운영체제에서는 탭이 멈추거나 느려져도 탭을 닫으면 복구됐다고 밝힘
- Apple Security는 2026년 7월 27일 신고를 재현하고 수정 의사를 밝혔지만, 8월 26일 보안 영향이 없고 제품 변경도 없다고 답하며 다른 팀의 개선 검토로 넘김
- 2023년 WebGL 기반 유사 사례 ShadyShader에는 Apple이 CVE-2023-40441을 발급하고 CVSS 6.5를 매겼으나, 작성자는 무한 루프 탐지만으로는 해결할 수 없어 신뢰하지 않는 셰이더의 선점 처리가 필요하다고 주장함
Hacker News opinions
브라우저 탭에서 모델을 돌리다 비슷하게 완전히 멈춘 적 있음. 심각도를 따져보진 않았는데, 이 일로 WebGPU 자체를 꺼버리진 않았으면 좋겠음.
코드만 보면 무한 루프 카운터 아닌가 싶음. 자바스크립트 무한 루프로도 Safari를 온갖 방식으로 멈추게 할 수 있어서, 큰 코드베이스 디버깅할 때 꽤 짜증남.
일반 JS 무한 루프는 브라우저 프로세스나 CPU 코어 하나를 잡아먹는 선이어야 함. 시스템 UI 전체가 멈추는 건 완전히 다른 문제임.
단순 루프가 아니라 같은 버퍼를 쓰는 셰이더 때문에 WindowServer까지 죽는다는 게 포인트임. 탭이 망가지는 것과 커널 패닉으로 컴퓨터가 재시작되는 건 다름.
이건 사용자 상호작용을 강요하는 데 악용할 수 있어 보임. '10초 안에 허용 누르지 않으면 컴퓨터가 멈춘다'고 실제로 보여주면, 다음번 권한 창에서 누르게 만들 수 있음. 서비스 거부도 보안 문제 아닌가?
직접 눌러봤는데 Safari만 종료 후 재시작하면 돌아왔음. 반면 M1 MacBook Pro에서는 시스템 전체가 잠겨서 전원 버튼을 길게 눌러야 했음.
Apple Silicon Mac은 GPU 작업을 좀 돌린 뒤부터 시스템 전체가 재부팅 전까지 느려지는 문제가 종종 있었음. GPU를 건드린 프로세스를 전부 끝낸 뒤 며칠이 지나도 그랬음.
브라우저가 하드웨어 공격 표면을 계속 넓히는 게 피곤해서 Firefox에서 WebGPU와 WebGL을 꺼둠. 정말 필요한 사이트가 나오면 그때만 켤 생각인데 아직 없었음.
WebGPU는 이미 시스템 침해와 지문 수집에 쓰였음. Firefox 계열은 이런 기능을 끌 수라도 있는데, 다른 브라우저도 쉽게 비활성화할 수 있으면 좋겠음.
GPU는 CPU 스케줄러처럼 작업을 쉽게 선점하지 못하는 경우가 많음. 레지스터와 로컬 메모리 같은 자원이 셰이더에 묶이고, 큰 GPU 상태를 저장하고 다른 작업으로 바꾸는 비용도 커서 우선순위 선점 지원이 빈약한 편임.
Metal 셰이더에서 C++14 문법으로 Duff's Device를 써서 여러 Mac에서 돌려봤음. 컴파일러는 심하게 실패했지만 실제 커널 패닉까지는 못 만들었음.
직접적인 비밀 탈취나 계정 탈취 경로가 없으니 Apple이 보안 이슈로 안 본 건 아주 놀랍진 않음. 그래도 꽤 심각한 서비스 거부라서 고치길 바람.
Windows 11 업무용 PC에서 실행했더니 Teams 창이 검게 깜빡였다가 돌아오기를 반복했음. 업무용 장비로 눌러본 건 맞음.
S26 Ultra의 Chrome에서도 멈췄음.