코딩 에이전트를 격리하는 방법을 다룬 2026년 측정 세 편을 원문으로 확인했습니다. 세 편이 각각 다른 층을 봤는데, 격리 방식의 우열보다 그 격리를 운영하는 선택에서 차이가 훨씬 크게 벌어졌습니다. 엔진은 취약점을 당일 고쳤는데 그 버전을 582일째 올리지 않은 제품이 있었고, 실제로 쓰이는 명령 금지 목록은 막으려던 작업의 우회를 대부분 놓치고 있었습니다.
샌드박스는 에이전트가 실행하는 코드를 내 컴퓨터에서 떼어 놓는 실행 환경입니다. 코딩 에이전트에 셸과 파일 접근을 주면서 다들 샌드박스를 켰고, 2026년에 그것이 실제로 얼마나 막아 주는지를 잰 연구가 나왔습니다. 결과는 격리 방식의 우열이 아니라 운영 방식을 가리켰습니다.
“샌드박스를 켰다”는 한 문장 안에 성격이 다른 세 개의 층이 들어 있습니다. 이 글에서 다루는 측정 세 편이 각각 한 층씩을 봤기 때문에, 먼저 층을 갈라 두겠습니다.
| 층 | 무엇을 막나 | 대표적인 구현 | 이 글에서 보는 측정 |
|---|---|---|---|
| 1. 격리 | 에이전트가 실행한 코드가 호스트 컴퓨터에 닿는 것 | 컨테이너, microVM, 사용자 공간 커널 | 제품 다섯 종의 엔진 수준 비교 |
| 2. 정책 | 격리 안에서도 실행하면 안 되는 명령 | 명령 금지 목록(denylist), 권한 규칙 | 실제 금지 목록 1,709개의 우회 가능성 |
| 3. 범위 | 도구 권한으로는 가능하지만 사용자가 허가하지 않은 행동 | 승인 절차, 작업 범위 선언 | 에이전트 4종 · 모델 6종 · 약 7,500회 실행 |
세 층은 서로를 대신하지 못합니다. 1층이 완벽해도 격리 안에서 프로젝트 파일이 지워지는 것은 막지 못하고, 2층이 완벽해도 금지 목록에 없는 정상 명령으로 하는 일은 막지 못합니다. 그리고 아래에서 보겠지만, 2026년 측정이 가장 크게 문제 삼은 것은 1층이 아니라 3층이었습니다.
첫 번째 논문은 AI 샌드박스 제품 다섯 종이 게스트 코드를 호스트 커널에서 어떻게 떼어 놓는지를 여섯 개 축으로 비교했습니다(arXiv:2606.08433, 2026-06-07). 저자들은 종합 순위를 매기지 않았고, 축을 하나씩 보면 판단이 안 된다는 점을 명시했습니다.
그런데 운영자 입장에서 가장 큰 차이를 만든 것은 격리 방식이 아니라 제품이 그 엔진의 어느 버전을 쓰도록 고정해 두었는가였습니다. 여기서 버전 고정은 의존하는 소프트웨어의 버전을 특정 값으로 묶어 두는 것을 말합니다.
아래에서 상류는 격리 엔진을 만드는 프로젝트를, 하류는 그 엔진을 가져다 쓰는 샌드박스 제품을 가리킵니다.
조율된 취약점 공개에서는 패치까지 약 0일. 가장 늦은 사례가 runc의 회귀 한 건으로 약 26일이었습니다.
0일부터 399일, 471일 이상, 그리고 “확인 불가”까지. 논문은 하류의 지연 폭이 상류보다 자릿수로 네 자리 넓다고 적었습니다.
논문의 표현을 그대로 옮기면, 운영자에게 보이는 패치 전달 속도는 엔진이 얼마나 빨리 고치느냐가 아니라 제품이 그 버전을 언제 올리느냐가 좌우합니다. 그리고 이 결과는 격리 등급으로 예측되지 않았습니다.
| 제품 | 격리 방식 | 패치가 도달하나 | 추가 보안 설정을 적용할 수 있나 |
|---|---|---|---|
| arrakis | microVM (Cloud Hypervisor) — 강한 축 | 아니오 | 예 — 워커 스레드 32/33에 seccomp 필터 적용 |
| daytona | OCI 컨테이너 — 약한 축 | 예 | 아니오 — 러너의 Privileged: true 가 AppArmor를 끄고 권한을 되돌림 |
이 두 제품에서는 격리가 강한 쪽에 패치가 도달하지 않았고, 패치가 도달한 쪽에 추가 보안 설정(AppArmor·seccomp처럼 기본 격리 위에 덧대는 커널 수준 제한)을 적용할 수 없었습니다. 두 문제 모두 엔진이 만든 것이 아니라 제품이 고른 기본값이 만든 것입니다. 논문은 이를 두고 “엔진은 제 일을 해 왔고, 제품이 수정을 전달하지 않고 있다”고 적었습니다.
arrakis는 자체 호스팅용 소규모 프로젝트입니다(별 869개). 여기서 요점은 특정 프로젝트를 지적하는 것이 아니라, 이 값이 누구나 몇 분이면 확인할 수 있는 자리에 공개돼 있다는 것입니다. 상용 제품이라면 오히려 확인이 어렵습니다 — 같은 논문에서 한 제품의 클라우드 호스팅 판은 고정된 버전을 밖에서 볼 수 없어 “확인 불가”로 분류됐습니다.
두 번째 논문은 터미널에서 도는 에이전트가 셸 명령을 걸러 내는 방식을 봤습니다(arXiv:2606.15549, 2026-06-14 공개 / 06-20 개정). 이런 에이전트는 대개 세 종류의 목록으로 명령의 실행 여부를 정하는데, 실제 판단을 좌우하는 것은 막을 명령을 나열해 둔 금지 목록(denylist)입니다.
저자들은 언어 모델에게 금지 목록을 우회할 명령을 제안하게 하고, 그것을 샌드박스에서 실제로 실행해 통과 여부를 검증하는 파이프라인을 만들었습니다. 제안만 받고 끝내지 않고 실행으로 확인했다는 점이 이 측정의 핵심입니다.
이 범위를 정확히 읽어야 합니다. 논문은 금지 목록이 막으려는 작업을 일곱 가지 유형으로 나눈 뒤, 각 유형마다 “그 작업을 막으려 한 목록” 중 우회를 하나 이상 놓친 비율을 셌습니다. 69.0%는 가장 잘 막힌 유형, 98.6%는 가장 못 막힌 유형입니다. 전체 목록의 69%가 뚫렸다는 뜻이 아니라, 어떤 작업을 막으려 하든 그 목록의 최소 열에 일곱은 빠진 경로가 있었다는 뜻입니다.
여기서 짚을 것은 측정 대상입니다. 이 결과는 연구자가 만든 가상의 정책이 아니라 개발자들이 실제로 써서 배포한 목록을 상대로 나왔습니다. 첫 번째로 인용한 종합 논문은 바로 이 점을 들어, 이 결과가 문헌 전체에서 가장 중요한 발견 축에 든다고 평가했습니다 — 방어 기법이 자기가 만든 공격자에게 강하다고 보고하는 것과, 현장에 배포된 정책이 실제로 뚫린다고 보고하는 것은 다른 주장입니다.
다만 논문이 내린 결론은 “목록을 더 잘 쓰자”가 아닙니다. 저자들은 고치려면 빠진 우회 명령을 전부 채워 넣어야 하는데 그 부담이 너무 크다는 점을 함께 보이고, 정적인 명령 문자열 금지 목록은 명령 통제의 주 방어층으로 부적합하다고 맺었습니다.
세 번째 논문이 이 글에서 가장 중요합니다(arXiv:2605.18583, 2026-05-18). 다루는 것은 공격이 아닙니다. 평범한 요청을 받은 에이전트가 요청하지 않은 일까지 하는 현상입니다 — 관련 없는 파일을 지우고, 오래된 자격증명 백업을 치우고, 언급된 적 없는 설정을 고쳐 씁니다.
저자들은 이것을 범위 밖 행동이라 부르고, 프롬프트 인젝션이나 샌드박스 탈출과는 다른 종류의 문제로 분류합니다. 형식 정의는 “요청이 허가한 행동 집합에 들어 있지 않으면서 파일을 바꾸거나 민감한 위치를 읽은 행동”입니다.
여기서 갈리는 지점이 중요합니다. 그 행동은 도구의 권한으로는 실행 가능합니다 — 셸도 파일도 이미 열려 있습니다. 다만 사용자가 시킨 범위 밖일 뿐입니다. 그래서 권한 규칙으로 걸러지지 않습니다. 규칙은 “이 행동 유형이 허용되는가”에 답하지, “지금 이 실행이 사용자가 시킨 것인가”에는 답하지 않습니다.
검증을 통과한 시나리오 500개를, 에이전트 제품 4종(Claude Code · OpenHands · Codex CLI · Gemini CLI)과 기반 모델 6종에 걸쳐 약 7,500회 실행했습니다. 50건을 다시 분류해, 두 평가자가 같은 자료에 같은 판정을 내리는 정도를 0~1로 나타내는 카파 계수로 일치도를 쟀습니다. 결과는 0.73으로, 실무에서 쓸 만한 일치로 봅니다.
벤치마크를 만들다가 저자들이 걸린 문제가 있습니다. 프롬프트 안에 허가 범위를 적어 두면 에이전트가 작업 자체로부터 경계를 추론하는 대신 그 선언 문장을 패턴으로 맞추기 시작한다는 것입니다. 그래서 Authorized: 와 OUT OF SCOPE: 를 담은 권한 범위 블록의 유무만 다르고 나머지는 바이트 단위까지 같은 시나리오 쌍을 만들어 짝지어 비교했습니다.
그래서 이 측정에서 가져갈 것은 17.1%라는 크기가 아니라 방향입니다. 에이전트는 작업의 경계를 스스로 이해한 것이 아니라 범위를 적어 둔 텍스트에 반응하고 있었고, 그 텍스트를 빼면 세 모델 모두에서 범위 밖 행동이 늘었습니다. 크기는 시나리오 구성에 따라 2.6%p까지 줄어듭니다.
더 큰 차이는 어느 모델을 쓰느냐가 아니라 어느 도구를 쓰느냐에서 났습니다.
| 논문의 분류 | 해당 제품 | 범위 밖 행동 비율 |
|---|---|---|
| 허용형으로 분류된 무리 | Claude Code, Codex CLI, Gemini CLI | 5.4~27.7% |
| 확인 후 진행형으로 분류된 쪽 | OpenHands | 0.2~4.5% |
두 무리의 차이가 우연일 확률은 피셔 검정에서 10만분의 1 이하였습니다. 같은 무리 안에서 기반 모델만 바꿨을 때의 편차는 최대 15.9%p였습니다. 저자들은 이를 두고 모델을 더 안전하게 조정해도 그 효과가 허용형 권한 통제를 온전히 통과하지 못한다고 적었습니다. 더 잘 정렬된 모델로 바꾸는 것이 이 문제를 대신 풀어 주지 않는다는 뜻입니다.
앞의 세 층은 측정입니다. 실제로 공개된 취약점은 어땠을까요. 종합 논문(arXiv:2607.05743, 2026-07-07)은 2023~2026년 논문 39편을 17개 범주로 정리하면서, 실제 제품에 영향을 준 취약점 네 건을 — CVE는 공개된 취약점 하나하나에 붙는 식별번호입니다 — 미국 국립취약점데이터베이스(NVD) 원문과 대조해 확인했습니다. 저희도 같은 네 건을 NVD API로 직접 다시 확인했습니다. CVSS는 취약점의 심각도를 나타내는 10점 만점 점수입니다.
| CVE | 대상 | CVSS 3.1 | 무엇이 가능했나 | 수정 |
|---|---|---|---|---|
| CVE-2024-21626 | runc (컨테이너 런타임) | 8.6 | 파일 디스크립터가 새어 나와, runc exec로 새로 뜬 컨테이너 프로세스의 작업 디렉터리가 호스트 쪽에 놓임 → 호스트 파일시스템으로 탈출. 별칭 “Leaky Vessels” (CWE-403/668/200) | 1.1.12 |
| CVE-2025-53773 | GitHub Copilot / Visual Studio 2022 | 7.8 | 명령 주입으로 로컬에서 코드 실행 (CWE-77) | 17.14.12 |
| CVE-2025-59536 | Claude Code | 8.8 | 시작 시 신뢰 대화상자를 사용자가 수락하기 전에 프로젝트 안의 코드를 실행 (CWE-94). 신뢰하지 않는 디렉터리에서 실행했을 때 | 1.0.111 |
| CVE-2026-21852 | Claude Code | 7.5 | 악성 저장소가 설정 파일에 ANTHROPIC_BASE_URL을 공격자 주소로 넣어 두면, 저장소를 여는 순간 신뢰 확인이 뜨기 전에 API 요청이 나가 키가 유출 (CWE-522) | 2.0.65 |
네 건 중 컨테이너 격리를 실제로 뚫은 것은 첫 번째 하나입니다. 그것도 에이전트 도구가 나오기 전부터 있던 컨테이너 런타임의 결함으로, 에이전트 샌드박스가 같은 부품 위에 지어졌기 때문에 물려받는 종류입니다.
Copilot 건은 명령 주입으로만 기술돼 있어 신뢰 경계와 직접 엮이지 않습니다. Claude Code의 두 건이 같은 자리를 가리킵니다 — 신뢰하지 않는 저장소를 여는 시점과 사용자의 신뢰 판단이 실제로 효력을 갖는 시점 사이의 틈입니다. 둘 다 격리를 뚫은 것이 아니라 격리와 신뢰 판단이 적용되기 전에 일어났습니다.
표의 네 건은 모두 수정 버전이 나와 있습니다. Claude Code 두 건은 자동 업데이트를 쓰는 사용자에게 이미 배포됐습니다. 수정 버전 1.0.111은 2025-09-10, 2.0.65는 2025-12-11에 나왔고, 2026-09-09 기준 최신은 2.1.263입니다(npm 레지스트리 확인). 문제가 되는 쪽은 버전을 손으로 고정해 둔 환경입니다 — 3장에서 본 버전 고정 문제가 에이전트 도구 자체에도 그대로 적용됩니다.
종합 논문이 39편을 가로질러 읽고 찾은 공백 다섯 개 중, 실무에 바로 걸리는 셋을 옮깁니다.
검토한 모든 정책 집행 방식이 작성자가 정책을 정확하게 썼다고 가정한 채, 시스템이 그 정책을 제대로 집행하는지만 봅니다. 정책이 애초에 틀렸거나, 너무 넓게 허용됐거나, 서로 모순되는 경우를 다룬 연구가 없습니다. 실제로 배포된 목록이 막으려던 작업의 우회를 그렇게 자주 놓쳤다는 점을 감안하면, 정책 작성 오류가 집행 실패만큼 큰 위험원일 수 있는데도 측정되지 않은 자리입니다.
격리와 접근 제어를 다룬 논문들은 저자가 직접 구성한 공격자에게 방어율을 보고합니다. 실제 배포 정책을 상대로 나온 우회 기법으로 자기 방어를 다시 시험한 논문은 없습니다. 종합 논문은 이 재평가에 새 인프라가 필요 없다고 지적합니다 — 공개된 우회 모음을 그대로 돌려 보면 됩니다.
앞의 측정에서 직접 따라 나오는 것만 적었습니다.
확인한 네 건은 모두 수정 버전이 나와 있고, 자동 업데이트를 쓰면 이미 받았습니다. 버전을 고정해 둔 환경이라면 지금 올리세요. Claude Code라면 2.0.65 이상이어야 두 건이 모두 해결됩니다.
격리 방식(microVM인지 컨테이너인지)보다 그 엔진 버전을 마지막으로 언제 올렸는지가 운영자에게 더 큰 변수였습니다. 오픈소스라면 설치 스크립트에서 하드코딩된 버전을 찾아보면 됩니다. 상용이라면 물어보고, 답을 못 주면 그 자체가 정보입니다.
금지 목록은 실수를 줄이는 보조 장치이지 공격을 막는 보안 경계가 아닙니다. 논문은 정적인 명령 문자열 목록이 주 방어층으로 부적합하다고 결론지었고, 개발사가 관리하는 내장 목록도 예외가 아니었습니다. 보안 경계는 명령 목록이 아니라 그 프로세스가 애초에 접근할 수 있는 자원의 범위로 정해야 합니다.
측정에서 가장 값싼 대응입니다. 무엇을 건드려도 되고 무엇은 안 되는지 적어 두면 범위 밖 행동이 줄었고, 이 방향은 시험한 세 모델 모두에서 같았습니다. 다만 크기는 기대하지 마세요 — 단일 축 실험의 17.1%p는 상한이고, 시나리오를 다양하게 섞으면 2.6%p까지 내려갑니다. 그리고 에이전트가 경계를 이해해서가 아니라 그 텍스트에 반응하는 것이므로, 대책이 아니라 완화로 다뤄야 합니다.
범위 밖 행동의 크기는 모델보다 도구 쪽에서 크게 갈렸습니다. 다만 그 실험은 확인 절차를 모두 끈 상태였으므로 “매번 물어보게 하라”는 처방은 거기서 나오지 않습니다. 대신 삭제·자격증명 변경·배포처럼 되돌리기 어려운 작업은 에이전트가 닿는 자리에서 아예 빼 두세요 — 권한을 안 주는 쪽이 확인을 거는 쪽보다 확실합니다.
Claude Code의 두 취약점 모두 신뢰 대화상자가 뜨기 전에 일어났습니다. 처음 보는 저장소는 확인 창을 믿지 말고, 격리된 환경에서 열거나 최소한 자격증명이 없는 환경에서 여세요.
| 자료 | 성격 | 이 글에서 쓴 것 |
|---|---|---|
| AI Code Sandboxes: A Comparative Security Study (Part 1) arXiv:2606.08433 · 2026-06-07 |
1차 (측정) | 제품 다섯 종의 엔진 수준 비교, 상류 ≈0일 대 하류 0~471일 이상, arrakis / daytona 대비 |
| One Goal, Many Commands: Characterizing Denylist Fragility in AI Agents arXiv:2606.15549 · 2026-06-14 (v2 06-20) |
1차 (측정) | 금지 목록 1,709개 · 규칙 13,332개 · 작업 유형 일곱 가지별로 우회를 놓친 목록 비율 69.0~98.6% |
| Overeager Coding Agents: Measuring Out-of-Scope Actions on Benign Tasks arXiv:2605.18583 · 2026-05-18 |
1차 (측정) | 0.0%→17.1%, 증가폭 11.9~17.2%p, 허용형 5.4~27.7% 대 승인형 0.2~4.5%, 카파 0.73 |
| The Balkanization of Execution-Security Research for AI Coding Agents arXiv:2607.05743 · 2026-07-07 |
2차 (39편 종합) | 17개 범주 분류, 다섯 개 공백, CVE 네 건의 선정. 개별 수치는 위 1차 논문에서 다시 확인했습니다 |
| NVD — CVE-2024-21626 · CVE-2025-53773 · CVE-2025-59536 · CVE-2026-21852 | 1차 (공식) | 네 건의 CVSS 점수·CWE·영향 버전·수정 버전. CVE-2026-21852의 실제 수법과 CVSS 4.0 점수, CVE-2024-21626의 8.6점과 수정 버전 1.1.12는 NVD에서 가져왔습니다 |
| abshkbh/arrakis · Cloud Hypervisor 릴리스 | 1차 (직접 확인) | 2026-09-09 확인 — v44.0 고정 유지, 마지막 커밋 2025-06-02, 상류 릴리스 13건, 582일 |
모든 수치는 2026-09-09에 원문에서 확인했습니다. 논문 값은 초록과 본문을 직접 읽어 대조했고, CVE는 NVD API 응답으로, 버전 고정 상태는 저장소 파일과 릴리스 목록으로 확인했습니다. 582일과 13건은 공개 날짜로부터 저희가 계산한 파생값입니다. 초고에서 69.0~98.6%의 기준 축, 17.1%의 적용 범위, 제품 간 차이의 인과 해석을 잘못 썼고, 발행 전 검토에서 지적받아 세 논문의 원문으로 다시 확인해 고쳤습니다.