Hacker News

Jailbreaking the Switch 2

Switch 2 탈옥: SmileBASIC의 메모리 오류에서 fs 권한 획득까지

Switch 2에서 홈브루와 게임 모딩을 가능하게 하는 소프트웨어 기반 테더드 탈옥 과정을 설명합니다. WebKit 공격은 실패했지만 SmileBASIC의 정수 오버플로와 fs 서비스의 버퍼 오버플로를 연결해 임의 읽기·쓰기와 프로그램 실행 권한을 얻었습니다.

에디터 노트

이 탈옥의 성과는 AI가 취약점을 혼자 찾아냈다는 데 있지 않고, 두 콘솔과 여러 프로세스의 취약점을 이어 실행 권한을 만든 데 있습니다. 저자는 WebKit 시도는 실패했고 SmileBASIC의 오버플로와 fs의 경로 처리 버그를 연결해 목표에 도달했다고 설명합니다. 따라서 자동화 장비와 에이전트가 연구 반복을 돕는다는 Hacker News의 반응은 본문과 맞지만, 이번 결과를 AI 단독 성과로 읽을 근거는 없습니다. 실제 적용 조건도 분명합니다. SmileBASIC 4가 필요하다는 댓글이 있고, 저자는 테더드 방식이라고 설명하지만 지원 펌웨어나 계정 정지 가능성은 본문에서 답하지 않습니다. 게임 덤프나 에뮬레이션에 관한 댓글은 이후 가능성을 추측한 의견이며, 본문이 확인한 결과는 sysmodule 권한으로 코드 실행이 가능해졌다는 데까지입니다.

AI 요약

Switch 2에서 임의의 네이티브 코드를 실행하는 테더드 탈옥 도구 ns2jb의 개발 과정을 설명합니다. 탈옥으로 홈브루 실행, 게임 역공학과 모딩, 저장 데이터 백업, 주변장치 접근을 할 수 있다고 합니다. 저자는 이를 Switch 2의 첫 탈옥 사례로 소개합니다.

WebKit 대신 SmileBASIC을 공략

초기에는 맞춤형 Wi-Fi 캡티브 포털에서 WebKit 취약점을 이용해 사용자 영역 코드 실행을 시도했습니다. 하지만 함수 객체를 바꾸는 방식으로는 임의 IPC 호출로 이어지지 않았고, 목표 달성에 실패했습니다. 저자는 실제 탈옥에 약 2주를 썼으며, Codex가 Mario Kart World 모드를 하루 만에 만든 일과는 별개라고 덧붙입니다.

다른 경로로는 Switch 1 게임 SmileBASIC을 살폈습니다. BASIC 인터프리터의 배열 항목 삭제 기능에서 32비트 정수 덧셈이 오버플로해 범위 검사가 잘못되는 버그를 찾았습니다. 배열에서 큰 위치와 개수를 제거하면 내부 메모리 복사 길이와 주소 계산도 오버플로합니다. 그 결과 배열 앞에 있던 포인터가 배열 내용으로 복사됩니다. 이 포인터를 문자열 길이처럼 해석하게 만들면 배열 바깥 메모리를 읽고 쓸 수 있습니다. 이 취약점으로 ROP까지 얻었습니다.

fs 서비스에서 임의 읽기·쓰기

Switch 2의 기본 fs(sysmodule) 서비스에서는 경로를 정규화하는 과정의 버퍼 오버플로를 찾았습니다. 상위 디렉터리를 나타내는 역슬래시 경로가 0x301바이트 임시 힙 버퍼에 복사될 때 길이 검사가 빠집니다. 저자는 이 오버플로를 BufferedStorage의 캐시 메타데이터에 닿게 해 임의 읽기·쓰기(ARW)를 구성했습니다.

그 뒤 메모리에서 SmileBASIC 연결 객체를 찾아 저장된 PID를 1로 바꾸고, 전체 권한을 얻었습니다. 이를 이용해 내부 저장소와 일반 sysmodule 코드를 덤프했습니다. 반복해서 오버플로를 내지 않고 포인터를 바꾸도록 캐시 항목의 메타데이터를 연결하는 방법도 추가해 안정성을 높였습니다.

서명 검사를 통과하는 실행 흐름

게임과 일반 sysmodule은 실행 파일과 메타데이터를 담은 NCA로 배포됩니다. 로더 ldr는 fs에 ExeFS를 열어 달라고 요청하고, fs가 반환한 파일시스템 핸들과 NCA 헤더의 해시 및 서명 정보를 이용해 검증합니다. 저자는 fs의 임의 읽기·쓰기로 로더가 받은 ExeFS 객체를 임시 파일시스템으로 바꿨습니다. 유효한 main.npdm은 원래 파일에서 가져오고 실행 파일 main은 임의 내용으로 바꾸면, 로더가 확인하는 서명 정보는 원본 NCA에 속한 상태로 남습니다.

이 교체 시점을 맞추려고 fs가 로더의 IPC 메시지를 처리하는 이벤트 핸들을 자신이 제어하는 핸들로 바꿨습니다. 이어 ro의 NPDM을 사용해 프로세스를 실행했습니다. ro에는 커널 SVC를 호출할 권한이 있어 MapProcessMemory로 fs 코드 메모리에 쓰기 가능한 뷰를 만들고 코드를 패치할 수 있었습니다. fs의 KProcess 핸들은 이벤트 핸들을 조작한 뒤 SmileBASIC에서 얻어 ro 프로세스로 전달했습니다. 저자는 이 방식으로 권한이 있는 일반 sysmodule 이름으로 코드를 실행할 수 있다고 설명합니다.

활용과 다음 단계

저자는 이 탈옥으로 홈브루, 게임 모딩, 저장 데이터 백업과 하드웨어 연구가 가능해질 것으로 봅니다. 다음 목표로는 추가 sysmodule 공략과 Switch 2 홈브루·에뮬레이션·모딩을 제시하지만, 구체적인 다음 단계 목록은 본문에 제시하지 않습니다. Switch 1과 Switch 2를 JetKVM으로 연결해 USB 컨트롤러 입력과 HDMI 영상을 자동화했고, 콘솔이 멈췄을 때 전원 버튼을 누르는 데 블루투스 스위치 장치를 썼습니다.

Hacker News 반응

  • @KeplerBoy — AI가 기여한 정도와 숙련된 보안 연구자의 역할에 관한 뻔한 논의는 제쳐두더라도, KVM과 블루투스 전등 스위치, 기본 제공 USB 컨트롤러 지원 같은 현대 도구가 이 정도 자동화를 가능하게 한다는 점이 정말 흥미롭습니다.
    • @amelius — 이제 AI가 블로그 글 전체도 쓰게 하면 되겠네요.
    • @KeplerBoy — 잘 모르겠습니다. 글은 전반적으로 사람이 쓴 느낌이 나고 읽기 좋습니다. 에이전트와 함께한 실제 작업 2주를 블로그 글 몇 시간과 비교하면 어떨까요?
  • @Velocifyer — 특정 25달러짜리 게임인 SmileBASIC 4가 필요하다는 점은 아쉽습니다.
    • @Gigachad — 콘솔 해킹은 아주 오랫동안 그런 식이었습니다. 첫 취약점을 찾고 연구자들이 실험을 시작하면 보통 더 많은 취약점이 뒤따릅니다. 다만 닌텐도는 새 콘솔을 낼 때마다 운영체제를 줄여 왔고, 게임 외부에서 공략할 만한 부분도 줄고 있습니다.
  • @hturan — 이게 사실이라면 복호화된 fs의 읽기·쓰기 권한이 생겼으니 몇 시간 안에 Switch 2 게임 덤프가 나오더라도 놀랍지 않겠습니다. 재컴파일과 디컴파일이 가능한 시대라면 콘솔 독점작을 임의의 하드웨어에서 실행하게 될 수 있는데, 닌텐도에 최악의 상황일 겁니다. KVM이나 웹캠으로 LLM에 팔과 눈을 달아 주면 하드웨어 작업을 병렬화하고 24시간 돌릴 수 있다는 점도 강력한 방식입니다. 외부 장치 펌웨어나 하드웨어 작업에 이 방법을 써 보길 권합니다. 덜 해로운 용도로요. 닌텐도 HackerOne에서 5만 달러 이상을 받을 취약점이었을 겁니다.
    • @mentos — 단기적으로는 불법 복제가 있어도 Steam 판매에 영향을 주지 않는다는 주장이 통합니다. 장기적으로 Steam Deck에서 Switch 2 에뮬레이션을 한 번의 클릭으로 설치하게 되면 어떨지 모르겠습니다.
    • @lachiflippi — 에뮬레이션으로 그렇게 될 가능성은 매우 낮습니다. Steam Deck은 이미 Switch 1 게임도 실행하기 버거운 경우가 있습니다.
    • @forcedtolinux — LLM에 KVM이나 웹캠으로 팔과 눈을 달아 주면 작업을 병렬화하고 24시간 돌릴 수 있다는 말이 이해되지 않습니다. 무슨 뜻인가요?
  • @GolDDranks — 이 방법으로 Switch 2를 탈옥하면 닌텐도가 계정을 정지하거나 게임에 접근하지 못하게 될 위험이 있나요? 홈브루에 관심이 있고 직접 만든 게임 개발 프레임워크를 Switch 2에 이식하고 싶지만 모든 것을 잃을까 봐 걱정됩니다.
  • @attels33 — 탈옥하려면 어떤 소프트웨어가 필요한가요? 지금 중고 콘솔을 사 두는 게 나을까요?

원문: pepsipu.com / 번역·요약: Trawling