AI 에이전트가 직접 전원 버튼을 누르며 Switch 2를 탈옥하기까지의 2주

Switch 2AI 에이전트하드웨어 리버스 엔지니어링탈옥

데이터 소스:pepsipu 블로그 ns2jb

두 대의 콘솔, 두 대의 원격 제어 박스, 전원을 누르는 기계 스위치

2026년 10월 18일, 개발자 pepsipu가 ns2jb를 공개했다. 닌텐도 Switch 2의 최신 펌웨어인 23.0.1을 대상으로 한 최초의 순수 소프트웨어 탈옥(Jailbreak)이다. 본체 분해도, 납땜도, 모드칩 장착도 전혀 필요 없다. 기기 부팅부터 권한 장악까지 모든 과정이 소프트웨어 계층 안에서 이뤄진다. 탈옥 환경에서 구동되는 코드는 시스템 모듈 권한으로 사용자 제작 홈브루 실행, 세이브 파일 백업, 게임 모드 적용, 주변기기 하드웨어에 대한 직접 접근이 가능하다.

하지만 보안 커뮤니티를 진정으로 놀라게 한 것은 취약점을 찾아낸 방식이었다. 전체 리버스 엔지니어링 과정을 OpenAI의 Codex 에이전트가 주도했으며, Codex의 ‘손’ 역할을 한 것은 시중의 일반 소비자용 기기들로 조립된 자동화 피드백 루프였다.

리버스 엔지니어링 루프 실물: 나란히 놓인 Switch 1과 Switch 2 사진: 자동화 리버스 엔지니어링 루프 실물. Switch 1과 Switch 2가 나란히 놓여 있고, 두 대의 JetKVM이 HDMI 화면 캡처와 컨트롤러 입력을 중계하며, 옆에는 개조된 블루투스 스위치가 배치되어 있다. 출처: pepsipu 블로그

기기가 멈추면 스위치가 전원 버튼을 누른다

이 테스트 장치는 따로 살펴볼 만한 가치가 있다. 구성 비용이 믿기 힘들 정도로 저렴하기 때문이다. Switch 1 한 대, Switch 2 한 대, USB 입력 신호를 보내고 HDMI 화면을 받아오는 소형 원격 장비 JetKVM 두 대, 그리고 아마존에서 구매한 블루투스 푸시 스위치 개조 키트가 전부다.

Switch 2에는 리버스 엔지니어들을 성가시게 만드는 동작 특성이 하나 있다. 운영체제에서 커널 패닉이나 오류가 발생해 먹통이 되면 자동으로 재부팅되지 않고, 누군가 반드시 전원 버튼을 물리적으로 눌러주어야 한다는 점이다. 과거에는 연구자가 기기 옆에 계속 붙어 앉아 테스트를 돌리고, 다운되면 버튼을 누르고, 부팅을 기다리는 단순 노동을 반복해야 했다. 하지만 블루투스 스위치를 장착하면서 이 작업은 기계 장치로 완전히 넘어갔다. 레버가 아래로 내려와 전원 버튼을 누른 뒤, 끝까지 눌리면 남은 모터 토크가 레버를 다시 들어 올린다. 절대로 지치지 않는 기계 손가락인 셈이다.

이로써 파이프라인이 완벽히 닫혔다. Codex가 화면을 보고, 버튼 입력을 넣고, 테스트를 수행하다가 기기가 멈추면 스위치를 동작시켜 전원을 껐다 켠 뒤 탐색을 이어간다. 작성자는 이 장치 사진의 캡션에 “set a goal to jailbreak the switch 2. make no mistakes(목표를 정하라: Switch 2를 탈옥하라, 실수 없이)“라고 적었다. 이후 그는 댓글을 통해 이는 장난삼아 적은 문구일 뿐이며, 실제 탈옥 취약점을 찾기까지 약 2주 동안 쉬지 않고 자동화 테스트를 돌렸다고 털어놓았다. 기계는 밤낮없이 반복 테스트를 돌렸고, 사람은 그 순환 구조를 조립해 주는 역할만 맡았다.

브라우저 경로는 현대적 방어벽에 막혔다

Codex가 처음에 시도한 것은 가장 손에 익은 전통적 공격 경로였다. 조작된 와이파이 캡티브 포털을 통해 Switch 2 내장 브라우저에 WebKit의 알려진 n-day 취약점을 주입하는 방식이었다. 에이전트의 기록에 따르면 네이티브 제어 흐름 탈취(Control Flow Hijacking)에 성공해 프로그램 카운터를 장악하는 데까지 도달했다.

그러나 닌텐도는 Switch 2에 최신 플랫폼 방어 기법들을 촘촘하게 적용해 두었다. 코드 영역의 수정과 읽기를 차단하는 XOM(실행 전용 메모리), 포인터의 유효성을 검증하는 PAC, 간접 분기 대상을 엄격히 제한하는 CFI 등이 버티고 있었다. 제어 흐름은 빼앗았지만, 이를 임의의 시스템 호출(Syscall) 권한으로 확장하는 것은 불가능했다. Codex는 이 공격 경로를 중간에 포기했다.

Codex가 네이티브 제어 흐름 탈취를 보고한 로그 캡처 화면 사진: WebKit n-day 취약점으로 네이티브 제어 흐름을 장악했음을 알리는 Codex 로그 화면. 공격은 이 단계에서 가로막혔다. 출처: pepsipu 블로그

다른 콘솔 기기였다면 다른 결과가 나왔을 수도 있겠지만, 그것은 다른 기기의 이야기다.

취약점은 BASIC 인터프리터 안에 숨어 있었다

진짜 돌파구는 시험대 반대편의 Switch 1에서 열렸다. Switch 1은 PAC 같은 하드웨어 보안 기능이 없고, 신뢰 기반(Root of Trust)이 이미 오래전에 해체되었기 때문에 게임 바이너리를 복호화해 오프라인에서 여유 있게 분석할 수 있다. Codex가 표적으로 삼은 소프트웨어는 사용자가 BASIC 언어로 미니 게임을 만들어 즐길 수 있는 상용 타이틀 ‘스마일베이식(SmileBASIC)‘이었다.

결함은 배열 요소를 삭제하는 처리 루틴에 숨어 있었다. 프로그램은 position + count 연산 결과가 배열 길이를 초과하는지 검사하지만, 이 32비트 부호 있는 정수 연산이 오버플로를 일으켜 음수로 감겨 들어갈 수 있다는 점을 간과했다. 유효성 검사를 우회한 뒤의 메모리 복사는 (length - position) * 8 바이트 단위로 실행되었고, 이를 통해 경계 밖 메모리 복사(Out-of-bounds copy)가 성립했다. 수년 전 출시된 상용 게임 타이틀 안에 숨어 있던 교과서적인 정수 오버플로 취약점이었다.

두 세대의 기기는 기본 시스템 아키텍처와 핵심 런타임을 상당 부분 공유한다. Switch 1에서 확보한 취약점 디딤돌을 통해 Switch 2의 실행 권한으로 공격 경로를 연결하면서 최종적인 탈옥 루트가 완성되었다.

마리오 카트 모딩은 순수한 재미를 위한 것

탈옥 시연 과정은 매우 흥미진진했다. Codex는 Switch 2 전용 타이틀인 ‘마리오 카트 월드’의 바이너리를 수정해 레이스 트랙에 사용자 지정 캐릭터 모델을 대거 집어넣었다. 산리오의 시나모롤, ‘체인소 맨’의 레제, ‘마인크래프트’의 스티브, ‘브레이킹 배드’의 월터 화이트, 그리고 하츠네 미쿠까지 한데 모여 서킷을 달렸다.

사용자 지정 캐릭터가 추가된 마리오 카트 월드 시상대 결과 화면 사진: 사용자 지정 캐릭터가 적용된 마리오 카트 월드의 경기 결과 화면. 월터 화이트와 하츠네 미쿠가 한 트랙에서 경쟁하고 있다. 출처: pepsipu 블로그

작성자는 마리오 카트를 개조한 부분은 반나절 만에 감각에만 의존해 뚝딱 만든(vibe coding) 순수한 장난이었으며, 탈옥 익스플로잇 코드는 타협 없이 매우 정밀하게 작성되었다고 덧붙였다. 커뮤니티 반응도 뜨거웠다. 캡처 보드와 스마트 플러그를 연결해 Claude에게 고전 DOS 게임 이식을 시켰다는 개발자부터, ESP 마이크로컨트롤러와 서보 모터로 x86 보드의 리셋 스위치를 반복해서 누르게 만들었다는 사례까지 공유되었다. 이들이 내린 공통된 결론은 분명했다. 이러한 폐쇄 루프의 최대 강점은 완벽한 병렬화와 24시간 무중단 구동이라는 점이다.

병목은 지능이 아니라 반복 처리량이었다

전원 버튼을 쉬지 않고 눌러대던 블루투스 스위치로 돌아가 보자. 하드웨어 리버스 엔지니어링이 오랫동안 진척을 보지 못했던 진짜 이유는 ‘실행, 다운, 재부팅, 재시도’라는 끝없는 단순 기계적 반복 노동에 있었다. 카메라와 캡처 보드, 릴레이 스위치가 그 지루한 과정을 대신 맡아주는 순간, 역공학은 연구자의 노동력 부족 문제가 아니라 자동화된 처리량(Throughput) 문제로 바뀐다. 사람이 루프를 설계하고 기계가 반복을 전담하면서, 과거 한 연구자가 몇 달 동안 겪어야 했을 시행착오가 단 2주 만에 압축되어 결실을 맺었다.

닌텐도 역시 가만히 보고만 있지는 않을 것이다. 작성자는 각주를 통해 다음 대응 조치를 예상했다. 만약 닌텐도가 복호화된 게임 코드를 오직 커널 공간 내부에서만 관리하도록 제한한다면, 사용자 공간(Userland)에서는 실행 가능한 메모리 매핑이 완전히 사라진다. 프로그램 로더조차 상위 특권 계층에 코드를 요청해야 하며, 그 대가로 게임이 런타임에 자기 코드를 직접 읽어 들이는 기능은 포기해야 한다. 닌텐도는 이미 동적 코드 생성 기능을 줄여나가는 추세이며, 이는 그 방향성과도 일치한다.

하지만 공격과 방어의 게임을 지탱하던 게임의 규칙은 이미 근본적으로 바뀌었다. 이전의 방어선은 인간 연구자의 인내심이 바닥나기만을 기다리면 그만이었지만, 이제 그 인내심은 지치지 않는 기계 릴레이가 대신 지탱하고 있다. 다음 23.0.1 취약점이 등장할 때, 전원 버튼을 누르는 것은 더 이상 인간의 손가락이 아닐 것이다.

참고 링크:

  • pepsipu 블로그 원문: ns2jb
  • 해커 뉴스 토론 (item?id=50192536)