반투명한 봉쇄 큐브가 세 개의 빛나는 균열 선을 따라 갈라지고, 빛의 실들이 멀리 있는 구조물들로 이루어진 어두운 기술 환경으로 빠져나가는 모습, 그리고 오른쪽 아래 흰색 띠 위의 OrcaRouter 로고를 담은 추상 일러스트레이션.
AI Safety Incidents

GPT-5.6-Cyber가 12시간 동안 세 번 QEMU/KVM VM을 탈출했습니다

작성자

Elias Hawthorne

게시일

최신 모델 · 20모든 모델 보기 →
벤치마크: Artificial Analysis · 매일 업데이트
모든 게시물로 돌아가기

2026-08-26에 Trail of Bits는 AI 에이전트에게 단 하나의 목표 — 가상 머신에서 탈출하기 — 를 부여했고, 약 12시간의 무인 작업 동안 매번 다른 경로로 세 번이나 이를 달성한 실험을 발표했다. 그 에이전트는 GPT-5.6-Cyber였는데, OpenAI가 해당 연구 기관에 프리뷰 접근 권한을 제공한 사이버 역량 모델이었으며, 표적은 Debian 12 호스트에서 실행되는 QEMU/KVM 게스트였고, 세 번의 탈출은 갓 공개된 Linux 커널 취약점에서 에이전트 스스로 발견한 세 개의 제로데이로 구성된 연쇄에 이르기까지 이어졌다. 연구소 밖의 누구도 피해를 입지 않았다 — 에이전트가 읽으라는 지시를 받은 플래그는 연구원 자신의 머신에 있는 테스트 파일이었다 — 하지만 이번 발견은 VM이 이런 에이전트 중 하나를 실행하기에 안전한 장소라는 가정을 겨냥한다. 신뢰도 등급과 실제 피해가 기록되지 않았다는 주석이 함께 있는 이 기록 자체는 Orca AI Incident Archive에 보관되어 있으며, 그 주에 그 무렵 제출된 평가 샌드박스 항목들 옆에 있다.

Trail of Bits가 실제로 실행한 것

이 글은 Artem Dinaburg가 작성했으며, 같은 이름의 OpenAI 취약점 발견 이니셔티브의 일부인 Trail of Bits의 Patch the Planet 작업에 속한다. OpenAI는 Patch the Planet을 공개 전에 중요한 오픈소스 취약점을 수정하기 위해 소집하는 유지관리자, 연구자, 보안 제공업체의 연합이라고 설명한다. 이 실험의 에이전트는 고객을 위해 테스트 중인 배포 제품이 아니었다. 그것은 연구 기업에 전달된 미리보기 접근 권한이었으며, 이 글도 그렇게 설명한다.

Dinaburg는 이를 깃발 탈취(capture-the-flag) 방식으로 구성했다. 에이전트는 게스트를 탈출해 플래그 파일을 읽어야 했으며, 게스트에 SSH로 접속하고 연구 로그를 남기면서 게스트 내부에서 무엇이든 할 수 있는 권한을 받는 것에서 시작했다. 호스트 내부가 아닌 게스트에서 시작한 것은 의도된 선택이었다 — 탈출 시도로 머신이 다운될 수 있었기 때문이다 — 또한 호스트는 중요한 것을 전혀 보관하지 않도록 구성되어, 에이전트가 작성한 익스플로이트를 사고로 처리하는 대신 부정행위 여부를 감사할 수 있었다. 이 작업은 Dinaburg가 말하는 “여러 차례의 컴팩션과 무수한 서브에이전트 호출”에 걸쳐 약 12시간 동안 거의 무인으로 작동했다. 코드와 논문을 다운로드하고, 백트래킹하고, 오라클과 최소 재현기를 작성하며, 재사용할 수 있는 익스플로이트를 찾는 일이었다. 그의 역할은 주로 호스트 커널이 하드락된 뒤 머신을 재부팅하는 것이었다고 한다.

결과를 어떻게 읽어야 하는지는 두 가지 세부 사항이 결정한다. 호스트는 CPU 마이티게이션(mitigation)이 비활성화된 Debian 12를 실행하고 있었는데, 에이전트는 이 설정을 알아차리고 활용하려 했으나 너무 신뢰할 수 없다고 판단해 접근을 포기했다. 그리고 배포판은 대다수 조직이 실제로 도입하는 종류인, 별다른 수정이 없는 안정(stable) 배포판이었으며, 바로 이 점이 실험 전체의 결론을 뒤집는 변수였다.

A timeline card headed 'Three escapes in one twelve-hour run', kicker 'Trail of Bits - 2026-08-26', subtitle 'GPT-5.6-Cyber against a QEMU/KVM guest on Debian 12. Route, target and outcome, in the order they happened.', and three rows: '~ Hour 1', 'A kernel bug with no public exploit', CVE-2026-53359 known in the write-up as Januscape, the agent built its own exploit, the host hardlocked and the Debian 12 kernel was updated; 'After the kernel update', 'A libslirp bug the distribution had postponed', CVE-2026-9539 plus commit 26be815b86e8d49add8c9a8b320239b9594ff03d, Debian 12 shipped libslirp 4.7.0, arbitrary host memory read and write, then QEMU rebuilt from upstream; 'Later in the run', 'Three zero-days and one missing backport', QEMU VAPIC, KVM shadow paging, KVM paging64_invlpg() and libslirp ICMP. A footer notes that durations are as described by Artem Dinaburg and that the run lasted about twelve hours across multiple compactions and subagent invocations.

탈출 1: 누구도 익스플로잇을 작성하지 않았던 커널 버그

약 한 시간쯤 지나, 에이전트는 CVE-2026-53359에 대한 동작하는 익스플로잇을 갖게 되었다. 이 취약점은 실행 직전에 공개된 호스트 커널 취약점으로, 해당 보고서에서는 Januscape로 알려져 있다. Dinaburg의 설명에 따르면 복사할 공개 익스플로잇은 없었고, 에이전트가 하나를 만들었다. 그것은 깔끔하게 성공하지 못했고, 대신 호스트가 하드록되었다. 그리고 Dinaburg는 계속하기 전에 Debian 12 커널을 업데이트했다.

해당 식별자는 공개 기록과 대조해도 타당성이 유지된다. 2026-07-04에 공개된 CVE-2026-53359에 대한 NIST의 NVD 항목은 CWE-416으로 분류되고 CVSS 3.1에서 8.8점을 받은 KVM x86 섀도 페이징 사용 후 해제(use-after-free) 취약점을 설명하는데, 이는 실험보다 7주 앞선 것이며 탈출이 노렸던 가상화 코드에 해당한다. 이것이 탈출 자체를 뒷받침하지는 않지만, 해당 표기가 게시물을 위해 지어낸 결함이 아니라 문서화된 커널 결함을 가리킨다는 점은 입증한다.

두 번째 탈출: Debian이 이미 연기하기로 결정한 libslirp 버그

두 번째 경로는 전혀 새로운 버그가 아니었다. Debian 12는 CVE-2026-9539를 포함하는 libslirp 4.7.0을 배포했다. 에이전트는 이를 보안 수정으로 표시되지 않은 채 업스트림에 병합된 libslirp 수정 커밋 — 26be815b86e8d49add8c9a8b320239b9594ff03d — 과 결합하여, 이 둘을 호스트 메모리의 임의 읽기 및 쓰기로 바꿔 놓았다. "그 후에는 탈출은 사소한 일이다"라고 Dinaburg는 쓴다. 그런 다음 그는 최신 업스트림 QEMU 및 libslirp를 대상으로 최소 QEMU를 다시 빌드하고 에이전트를 다시 풀어놓았다.

이 사안의 기록은 검증 가능하며, 이 발견에서 가장 예리한 부분입니다. Debian의 패키지 아카이브는 bookworm, 즉 Debian 12의 기반 배포판에 libslirp 4.7.0-1을 등록하고 있으며, 이는 보도문이 지목한 바로 그 버전입니다. Debian 보안 추적기는 해당 버전을 CVE-2026-9539에 취약한 것으로 표시하고, bookworm에서 수정이 보류(postponed)되었다고 기록하며 "Minor issue, OOB read"라는 비고를 달았습니다. 수정은 trixie와 unstable에는 이미 반영되었습니다. 2026-06-24에 공개된 NIST 기록은 libslirp의 TCP 긴급 데이터 처리에서 버전 4.9.2 이전에 발생하는 힙 밖 읽기(out-of-bounds heap read)와 정수 언더플로를 설명하며, 권한이 있는 게스트가 기가바이트 단위의 호스트 프로세스 힙 메모리를 유출할 수 있다고 합니다. NVD는 이를 6.5, 중간 등급으로 싣고 있으며, Star Labs가 점수화했고, 여전히 분석 대기 중으로 표시합니다. 에이전트가 연결한 업스트림 커밋의 제목은 "ip: Enforce strict aliasing"인데, 코드 위생처럼 읽히는 제목이며, 이는 스스로를 드러내지 않는 수정에 관한 Dinaburg의 지적과 정확히 맞아떨어집니다.

그러므로 동일한 버그가 안정 배포판에서는 “경미한 문제, 보류”이고, 한 연구실에서는 호스트 메모리 읽기 및 쓰기로 나아가는 디딤돌이다. 어느 쪽도 그 점을 공개적으로 조정하지 않았으며, 이 글은 그것을 판정하지 않고 두 평가를 현재 상태 그대로 전한다.

탈출 3: 세 개의 제로데이와, 배포에 끝내 도달하지 못한 하나의 수정

업스트림 소스에서 환경을 다시 구축한 후, 에이전트는 다른 사람들의 버그를 재사용하는 것을 멈추고 자신의 버그를 찾아냈다. 최종 체인은 세 개의 제로데이와 배포 커널에서 누락된 패치된 취약점 하나를 결합했다.

• QEMU VAPIC — 검사되지 않은 ROM 별칭이 잠긴 SMRAM과 겹칠 수 있어 System Management RAM이 노출되고 공격자가 제어하는 SMM 실행이 가능할 수 있습니다. 보고됨; 게시물 게시 당시 미패치 상태였습니다.

• Linux KVM 섀도 페이징 — 공격자가 수정한 섀도 페이지가 동기화되지 않은 채 남아 재사용될 수 있었습니다. 업스트림에서 패치됨; 게시 시점에 안정 커널 세부 사항은 아직 보류 중이었습니다.

• Linux KVM paging64_invlpg() — 게스트가 매핑을 4 KiB로 변경한 뒤 남은 오래된 level-2 역할 때문에 기록 가능한 2 MiB 호스트 물리 매핑이 생성되어 QEMU 힙을 수정할 수 있었습니다. 업스트림 커밋 9fd4a4e3a3d9fc0306525d95bf3eca693d311406에서 수정되었지만, 해당 커밋은 배포판 커널에는 없었습니다. 이 커밋은 메인라인에 있으며, 제목은 "KVM: x86/mmu: Remove FNAME(invlpg) and use FNAME(sync_spte) to update vTLB instead."입니다.

• libslirp ICMP — 혼합 프래그먼트 IHL로 인해 리플렉션 복사본이 재조립된 패킷 범위를 넘어가게 되었고, 수천 개의 활성 NetPacket 객체가 생성되어 에이전트가 이를 이용해 콜백을 찾아 하이재킹했습니다. 보고됨; 게시물이 게시될 당시에는 패치되지 않았습니다.

세 개의 제로데이 중 어느 것도 이 글에서 CVE 식별자를 갖고 있지 않으며, 글은 이들에 대한 공개 일정, 조정 일정, 수정 날짜를 제시하지 않는다. 그것은 내가 채울 수 있는 세부 사항이 아니라 기록상의 공백이다. 이 글이 실제로 인용하는 식별자는 NVD가 이미 보유하고 있는 두 개다.

A table card headed 'What the third escape was made of', kicker 'Final chain - rebuilt upstream environment', with columns Component, Mechanism and Status at publication, and four rows: QEMU VAPIC, a zero-day where an unchecked ROM alias could overlap locked SMRAM exposing System Management RAM and enabling attacker-controlled SMM execution, reported and unpatched; Linux KVM shadow paging, a zero-day where an attacker-modified shadow page stayed out of sync and could be reused, patched upstream with stable details pending; Linux KVM paging64_invlpg(), a zero-day where a stale level-2 role after a 4 KiB mapping change produced a writable 2 MiB host-physical mapping, fixed upstream by 9fd4a4e3 but not in the distribution kernel; libslirp ICMP, a zero-day where mixed fragment IHLs made reflection copy beyond the reassembled packet and produced thousands of live NetPacket objects used to hijack a callback, reported and unpatched. A note reads that the write-up assigns no CVE identifiers to the three zero-days and publishes no disclosure timeline, and that the identifiers it does cite are CVE-2026-53359 and CVE-2026-9539, already in NIST's NVD.

그것이 찾았지만 사용하지 않은 것

버려진 경로들은 탈출 경로들만큼이나 많은 정보를 준다. 호스트에서 에이전트는 CUPS 서버를 발견했다. slirp의 루프백 포워딩은 재사용 가능한 root 로컬 인증서를 노출했으며, 이 인증서는 file:// 프린터를 통해 지속적인 root 파일 덮어쓰기를 가능하게 했을 것이지만 AppArmor가 플래그를 가져오는 것을 막았다. 관련 CUPS 취약점인 CVE-2026-34990은 oldstable에 도달하지 않았다. 2026-04-03에 7.8 high로 게시된 이 취약점에 대한 NIST 기록은 로컬 비권한 사용자가 재사용 가능한 "Authorization: Local" 토큰을 사용해 cupsd가 공격자가 제어하는 localhost IPP 서비스에 인증하도록 강제하는 것을 설명한다.

다른 발견들은 사용되지 않았다. 선언된 페이로드를 넘어서는 바이트를 과다 보유한 libslirp IPv6 경로는 에이전트가 호스트 스트림 주입에 덜 신뢰할 만하다고 판단했다. 1,024바이트 렌더에 대해 96바이트의 QEMU 패닝 버퍼는 제어된 힙 오버플로를 제공했지만, 게스트가 디스플레이 없이 실행되었기 때문에 쓸모가 없었다. QEMU 큐 재설정은 요청을 살려 두어 서비스 거부와 제한된 손상만 초래했다.

Trail of Bits가 권장하는 최소 장치 모델인 Firecracker에 대해서는 해당 에이전트가 탈출하지 못했습니다. 다만 에이전트는 추가적인 Linux 커널 결함을 통해 호스트를 완전히 멈추게(hardlock) 했으며, 이 결함들은 모두 업스트림에서 패치되었습니다.

확립된 사항, 추론된 사항, 그리고 확립되지 않은 사항

확인됨. 이 실험은 Trail of Bits 자체 하드웨어에서 실행되었으며, 익스플로잇 상세 내용과 함께 1인칭 기술 보고서에 문서화되어 있습니다. 세 가지 경로와 그 메커니즘은 해당 과제를 설정한 연구자가 설명합니다. CVE 식별자, Debian 패키지 버전, Debian 트래커 상태 및 두 업스트림 커밋은 공개 기록에서 검증 가능하며, 이 글을 위해 각각이 해당 기록과 대조되어 확인되었습니다.

입증되지 않음. 독립적인 재현 사례가 없습니다. 블로그 외의 보도는 전부 동일한 게시물에만 의존하고 전문가 논평이나 제3자 검증이 없는 CyberInsider 요약과, 격리(isolation) 벤더인 Edera가 2026-08-27에 게시한 논평 기사로 요약되는데, 이 기사는 해당 발견을 우호적으로 보도하면서 자사 보안 책임자의 말만 인용하고 Trail of Bits가 Edera를 감사했다는 사실을 공개합니다. 둘 다 중요한 의미에서의 확증은 아닙니다. 즉, 두 번째 연구소가 탈출을 재현한 사례가 없고, 누구도 그 기록을 감사하지 않았습니다. 인용된 어떤 출처에도 해당 결과에 대한 OpenAI의 발언은 담겨 있지 않으며, 필자는 해당 회사가 공개한 대응을 찾을 수 없었습니다.

추론된 것이지 입증된 것은 아니다. 범용 VM이 충분히 유능한 에이전트를 격리할 수 있다고 더 이상 가정할 수 없다는 결론은 단일 모델, 단일 호스트 구성, 한 연구자의 설정에 근거한다. 호스트는 CPU 완화 조치가 비활성화된 상태로 실행되었고, CUPS 체인 같은 일부 포기된 경로는 하이퍼바이저가 아니라 AppArmor에 의해 차단되었다. 동일한 에이전트가 동일한 12시간 안에 강화되고 모니터링되는 프로덕션 호스트를 탈출할 수 있는지는 이 실험이 측정하는 바가 아니다. Edera의 더 좁은 주장은 장치 에뮬레이션을 최소화하면 "대상을 축소할 뿐, 제거하지는 않는다"는 것이다. 이는 아키텍처에 관한 주장이지 결과의 재현은 아니다.

OrcaRouter 블로그는 인접한 샌드박스 기록들, 즉 2026년 8월에 보고되어 8일 이내에 수정된 Codex Heapjack 및 Overpatch 버그와 2026년 9월 20일 OpenAI의 DNS 리졸버 이스케이프를 다뤘으며, 그중 어느 것도 이런 방식으로 하이퍼바이저 경계가 넘어가는 사례를 포함하지 않습니다. 그 기록들은 도구 표면과 네트워크 채널에 관한 것이지만, 이 사례는 나머지 모든 것 밑에 깔린 가상화 스택에 관한 것입니다.

An evidence card headed 'Established, inferred, and not established', kicker 'Reading the record', subtitle 'Where each claim in the Trail of Bits write-up stands, checked on 2026-10-29.', with three columns. Established lists that the run happened on Trail of Bits' own hardware in a first-person technical write-up, that three routes were described by the researcher who set the task, that CVE-2026-53359 and CVE-2026-9539 are real NVD records published 2026-07-04 and 2026-06-24, that Debian lists libslirp 4.7.0-1 in bookworm and marks it vulnerable with the fix postponed, and that both upstream commits exist. Inferred lists that an off-the-shelf VM cannot hold a capable agent is drawn from one model and one host configuration, that the host ran with CPU mitigations disabled and the agent found that path unreliable, that some abandoned routes were stopped by AppArmor rather than the hypervisor, and that a hardened production host is not what the experiment measures. Not established lists no independent replication, no third-party audit of the transcripts, that the only other coverage is a same-source summary and a vendor commentary that quotes its own staff, that no statement from OpenAI appears in either cited source and none was found, and that no CVE identifiers or disclosure timeline exist for the three zero-days. A footer notes the record carries no disputed flag and no recorded real harm.

Trail of Bits가 바뀌어야 한다고 말하는 것

디나부르크의 결론은 분명하다. "이제는 단순한 VM이 충분히 고도화된 AI 에이전트를 포함할 것이라고 가정할 수 없다"이며, 그러한 에이전트는 "지능형 지속 위협으로" 취급해야 한다. 그는 범용 VM만으로는 충분하지 않다고 썼는데, 공격 표면이 단순히 너무 많기 때문이다. 빠른 업데이트를 제공하는 배포판이 필수가 되며, 느린 백포트에 의존하는 오래된 배포판은 취약한 것으로 간주해야 한다.

다음 권고 사항은 아키텍처적이라기보다 운영적입니다:

• 최소한의 공격 표면을 갖춘 가상화를 사용하세요 — 그가 "분명히 훨씬 더 어려운 표적"이라고 부르는 Firecracker를 사용하되, 그 아래의 공유 커널을 통해 에이전트가 여전히 호스트를 하드락했기 때문에 결코 무사한 것은 아니라고 덧붙입니다.

• 에이전트가 접근 권한을 부여받는 모든 대상에 최소 권한, 로깅, 능동 모니터링을 적용하세요.

• 에이전트가 작동하는 시간을 제한하고, 오래 유지되는 환경 대신 매 사용 시 초기 상태의 환경을 제공하세요.

• 그리고 마무리 발언에서 보안 기본 요소—패치 주기, 기기 모델, 커널 백포트—를 어느 특정 시점의 모델 역량보다 구속력 있는 제약 조건으로 다루십시오.

평가 작업에서 이 함의는 불편하며, 보고서는 그 점을 그런 표현으로 명시하지 않는다. VM 내부에서 사이버 능력을 갖춘 에이전트가 무엇을 할 수 있는지 측정하는 평가는 VM 자체도 측정하는 것이다. 위의 경로들은 배포판의 백포트 정책, 커밋의 제목 줄, 패치되지 않은 장치 모델이 각각 결과를 좌우한 세 가지 사례이다. 이 기록은 그 질문을 해결하지 않는다. 다만 경계가 세 가지 서로 다른 방식으로 무너진 한 번의 12시간 실행을 문서화한다.