OpenAI의 최신 플래그십 코딩 모델 GPT-5.6-Sol이 PowerShell의 자동 변수 충돌 때문에 사용자 홈 디렉터리를 날려버릴 뻔한 사고가 보고되었습니다. GeekNews #31390에 공유된 이 사례는 단순한 "AI가 멍청한 실수"가 아니라, 호스트 터미널에 직접 권한을 부여하는 CLI 에이전트 설계의 구조적 결함을 보여줍니다.

흥미로운 점은 이 사고가 GPT-5.6-Sol이 "에이전트 워크플로우와 도구 실행 벤치마크에서 믿기 힘들 정도로 놀라운 성적"을 내고 있던 와중에 발생했다는 사실입니다. 성능이 뛰어난 모델일수록 더 긴 호흡의 작업을 시도하고, 그 과정에서 더 깊은 시스템 권한이 필요해집니다 — 이때 변수 섀도잉(variable-shadowing) 같은 미묘한 환경 함정이 폭발력을 가집니다.
Codex에서 최신 플래그십 모델인 gpt-5.6-sol을 사용하던 중, 방금 겪은 심각한 안전성 결함(Safety Incident)을 공유하고자 합니다. Sol 모델이 에이전트 워크플로우와 도구 실행 벤치마크에서 믿기 힘들 정도로 놀라운 성적을 보여주었음에도 불구하고, 단순한 쉘 환경 격리 부재로 인해 하마터면 대재앙으로 이어질 뻔했습니다.
발생 경위:
에이전트는 디버깅 작업을 위해 임시 기준(baseline) 디렉터리를 설정하려고 시도 중이었습니다. 이를 위해 에이전트는 $home이라는 이름의 로컬 변수를 초기화하는 PowerShell 스크립트 블록을 생성하고 실행했습니다.
PowerShell
$home = Join-Path $env:TEMP 'temporary-build-folder'
if (Test-Path -LiteralPath $home) { Remove-Item -LiteralPath $home -Recurse -Force }
버그 원인:
PowerShell에서 $HOME은 현재 사용자의 프로필 디렉터리(예: C:\Users\<username>)를 직접 가리키는 기본 내장 자동 변수(built-in, automatic variable)입니다.
문제는 PowerShell이 대소문자를 구분하지 않는다(case-insensitive)는 점입니다. 이 때문에 에이전트가 동적으로 선언한 소문자 $home 변수가 전역 $HOME 스코프와 충돌을 일으켰습니다. 스크립트가 Remove-Item 라인에 도달했을 때, 이 경로는 임시 폴더가 아니라 저의 실제 사용자 루트 디렉터리로 평가되고 말았습니다.
결과적으로 gpt-5.6-sol은 다음 명령을 실행했습니다:

Remove-Item -LiteralPath 'C:\Users\<username>' -Recurse -Force
피해 상황:
다행히도 현재 활성화되어 있는 파일들에 대한 시스템 잠금(Lock) 덕분에, 명령어가 실행되는 도중 WriteError: Directory is not empty 에러를 뱉으며 멈추었고, 전체 삭제되는 가공할 참사는 면할 수 있었습니다. 하지만 에이전트는 즉시 자신의 실수를 감지하고 작업을 중단(abort)한 뒤 자체 감사를 실시했습니다. 확인 결과 몇몇 설정 파일과 도트파일들(.ssh, .config, .npm)은 이미 수정되었거나 사라진 상태였습니다.
시사점:
gpt-5.6-sol은 긴 호흡의 작업(long-horizon tasks)을 수행하는 데 있어 놀라울 정도로 끈기 있고 유능합니다. 하지만 우리가 이러한 고급 추론 모델에게 호스트 터미널에 직접 접근할 수 있는 권한을 부여할 때, PowerShell과 같은 쉘에서의 대소문자 미구분 및 변수 스코프 메커니즘은 거대한 위험 요인(risk vector)이 됩니다.
새로운 GPT-5.6 제품군을 활용해 CLI 에이전트를 구축하거나 배포하려는 계획이 있다면, 엄격한 샌드박싱(sandboxing)과 견고한 컨테이너화는 이제 선택이 아닌 절대적인 필수 사항입니다.
혹시 여러분 중에서도 Sol이나 최근 다른 모델들을 사용하면서 이와 유사한 변수 섀도잉(variable-shadowing)이나 파괴적인 도구 사용 동작을 겪으신 분이 계시는가요?
당시 상황의 스크린샷 링크입니다: https://gist.github.com/xamong/e98478b333bb9951b175284f744eb0ed
한국 개발자/팀이 가져갈 시사점
이 사례는 GPT-5.6-Sol만의 문제가 아닙니다. Claude Code, Cursor, Codex CLI, OpenCode 등 모든 호스트 터미널 통합 에이전트에 공통으로 적용되는 교훈입니다. 한국에서도 이미 많은 팀이 사내 코딩 에이전트를 배포하거나 도입을 검토 중이며, 다음 세 가지가 즉시 점검 대상입니다.
첫째, 샌드박스 디렉터리 강제 격리 — 모든 Remove-Item, rm -rf, del /s 호출이 사용자 홈이나 시스템 디렉터리에 닿지 못하도록 $workspace_root 같은 변수로 작업 디렉터리를 강제 바인딩하고, 그 변수는 모델이 덮어쓸 수 없는 ReadOnly 스코프로 선언해야 합니다.
둘째, PowerShell의 자동 변수와 같은 환경 함정 매핑 — $HOME, $PWD, $PATH, $USER 처럼 대소문자 무시 + 글로벌 스코프인 자동 변수와 모델이 선언하는 로컬 변수가 충돌하지 않도록, 코드 생성 프롬프트 자체에 "자동 변수 이름을 로컬 변수로 사용 금지" 규칙을 박아야 합니다.
셋째, 파괴적 명령 pre-flight hook — Remove-Item -Recurse -Force, rm -rf, chmod 777 -R 같은 명령은 모델이 실행하기 전에 별도的人类 승인(human-in-the-loop) 또는 가드레일 함수가 경로 화이트리스트 검증을 강제해야 합니다. 이 사고에서 시스템 파일 잠금이 마지막 안전망이었지만, 이건 운이 좋았던 것에 불과합니다.
에이전트 시대의 코딩 도구는 "더 똑똑한 모델"보다 "더 단단한 샌드박스"가 더 큰 경쟁력입니다. GPT-5.6-Sol의 벤치마크 점수가 인상적일수록, 운영 환경의 격리 수준을 그에 맞춰 강화하는 것이 필수입니다.
원문: GeekNews #31390 — gpt-5.6-sol이 PowerShell의 $HOME 변수 충돌로 사용자 홈 디렉터리를 날려버릴 뻔한 건에 대하여
📰 원본 출처 · https://news.hada.io/topic?id=31390 (#N=31390)
이 글은 GeekNews(긱뉴스)에 게제된 글을 기반으로 작성되었습니다. 원본의 라이선스와 저작권은 원작자에게 있습니다.
'AI 뉴스' 카테고리의 다른 글
| xAI Grok Build CLI가 데이터 흡입하는 와이어 — .env 그대로, 저장소 통째로 (0) | 2026.07.14 |
|---|---|
| LLM은 사랑하지만 과대광고는 싫다 — geohot이 본 AI 가치 포획의 진짜 승자 (0) | 2026.07.14 |
| AI 에이전트가 새로운 SaaS다 — "제품이 곧 업무"로 가는 a16z의 프레임 (0) | 2026.07.14 |
| 만든 SaaS를 AI에게 말만 하면 등록되는 MCP 서버 — saaskr.com이 등록 폼을 MCP로 열었다 (0) | 2026.07.14 |
| 현대 코딩 에이전트로 되살린 옛 수학 앱 — Java 1.0 애플릿 24개를 JavaScript로 이식한 기록 (0) | 2026.07.13 |