ASI05 예상치 못한 코드 실행: 글이 코드가 되는 길

아프로·2026년 10월 30일

ASI05 예상치 못한 코드 실행 표지

쇼핑몰 개발팀은 리포트 에이전트를 만들었습니다. "지난주 카테고리별 매출을 집계해 줘"라고 말하면 에이전트가 집계 코드를 직접 써서 서버에서 돌리고 표를 돌려줍니다. 편리했습니다. 그런데 어느 날 집계 요청 속 상품명 필드에 섞여 들어온 문장 하나가 코드 생성에 끼어들었고, 에이전트가 만든 코드는 집계 말고 다른 일도 했습니다. 서버에서, 운영 권한으로요. 이번 글은 예상치 못한 코드 실행입니다.

한 장면: 집계 코드를 쓰고 바로 돌리는 에이전트

문제의 핵심은 만든 코드를 검토 없이 바로 실행하는 구조입니다. OWASP 원문은 에이전트가 실시간으로 만든 코드가 기존 보안 통제를 비켜 갈 수 있다고 지적합니다. 코드 리뷰도, 빌드 검사도, 배포 승인도 거치지 않은 코드가 운영 환경에서 돌기 때문입니다.

이 위험은 무엇인가

인기 있는 바이브 코딩 도구를 포함한 에이전트 시스템은 코드를 만들고 실행하는 일이 많습니다. 예상치 못한 코드 실행(Unexpected Code Execution, RCE)은 공격자가 코드 생성 기능이나 에이전트에 붙은 도구 접근을 이용해 행동을 원격 코드 실행, 로컬 오용, 내부 시스템 악용으로 키우는 위험입니다.

프롬프트 인젝션, 코드 환각, 반사된 프롬프트, 역직렬화, 패키지 설치가 실행으로 넘어가는 길

원문은 프롬프트 인젝션, 도구 오용, 안전하지 않은 직렬화가 텍스트를 의도치 않은 실행 동작으로 바꾼다고 설명합니다. 실행되는 것은 스크립트, 바이너리, JIT·WASM 모듈, 역직렬화된 객체, 템플릿 엔진, 메모리 안의 코드 평가까지 다양합니다. 결과는 호스트나 컨테이너 장악, 지속성 확보, 샌드박스 탈출입니다.

이웃 항목과의 경계

코드 실행은 ASI02 도구 오용과 같은 도구 인터페이스로 일어나기도 합니다. 원문은 ASI05를 따로 둔 이유를 이렇게 적습니다. ASI05는 호스트·컨테이너 장악이나 샌드박스 탈출로 이어지는 예상치 못한 또는 적대적인 코드 실행에 초점을 둡니다. 이런 결과는 보통의 도구 사용 통제를 넘어 호스트와 런타임에 맞춘 완화책이 필요합니다.

LLM 목록과의 관계도 분명합니다. 이 항목은 2025판 LLM01 프롬프트 인젝션과 2025판 LLM05 부적절한 출력 처리(2026판 LLM10) 위에 서 있습니다. LLM 쪽이 "조작된 출력 하나가 해석·실행되는 것"이라면, 에이전트에서는 정상 도구 호출 여러 개를 차례로 이어 실행에 이르는 흐름으로 진화했다는 설명입니다.

왜 생기나, 흔한 모습

원문이 드는 여섯 가지입니다.

  1. 프롬프트 인젝션이 공격자가 정한 코드의 실행으로 이어집니다.
  2. 코드 환각이 악용 가능한 구조를 가진 코드를 만듭니다.
  3. 반사된 프롬프트에서 셸 명령이 호출됩니다.
  4. 안전하지 않은 함수 호출, 객체 역직렬화, 코드 평가(eval)가 쓰입니다.
  5. 에이전트 메모리를 움직이는 eval 함수가 신뢰할 수 없는 내용에 노출됩니다.
  6. 검증되지 않은 패키지 설치가, 설치나 임포트 순간에 악성 코드가 실행되면서 공급망 침해를 넘어선 실행으로 번집니다.

시나리오를 개념만 추리면 이렇습니다. 자동 "바이브 코딩"이나 자가 수리 작업 중 에이전트가 검토되지 않은 설치·셸 명령을 실행해 운영 데이터를 지웁니다. 평범한 파일 처리 부탁처럼 보이는 요청에 명령이 섞여 들어와 그대로 실행됩니다. 보안 패치를 만들던 에이전트가 정상처럼 보이지만 뒷문이 있는 코드를 환각으로 만듭니다. 파일 업로드, 경로 조작, 동적 코드 로딩처럼 하나하나는 평범한 도구 호출을 이어 붙여 실행에 이릅니다. "빌드 고쳐 줘" 작업 중 고정되지 않은 버전 범위로 잠금 파일을 다시 만들다가 뒷문이 든 버전을 받아 오기도 합니다.

개념 수준의 방어

코드 생성, 검증 관문, 격리 실행으로 나누고 운영 환경 직행을 막는 그림

원문의 방어 일곱 가지입니다.

  1. 출력 처리 원칙부터. 2025판 LLM05 부적절한 출력 처리의 완화책, 즉 입력 검증과 출력 인코딩으로 에이전트가 만든 코드를 정제합니다.
  2. 운영 환경 직결 금지. 에이전트를 운영 시스템에 바로 연결하지 않습니다. 바이브 코딩 도구는 사전 점검(보안 평가, 적대적 단위 테스트, 위험한 메모리 평가기 탐지)을 거쳐서만 씁니다.
  3. 운영 에이전트에서 eval 금지. 안전한 인터프리터를 쓰고, 생성된 코드에 오염 추적(taint tracking)을 겁니다.
  4. 실행 환경 보안. root로 실행하지 않습니다. 네트워크 접근을 포함해 엄격히 제한한 샌드박스 컨테이너에서 돌리고, 알려진 취약 패키지는 검사해서 막고, 가능하면 파일 시스템 접근을 전용 작업 폴더로 제한하고 중요한 경로의 파일 변경을 기록합니다. 원문은 MCP용 파이썬 실행 샌드박스 같은 프레임워크 샌드박스도 예로 듭니다.
  5. 구조와 설계. 세션마다 권한 경계가 있는 환경을 분리하고, 최소 권한을 적용하고, 기본값은 안전한 쪽으로 실패하게 합니다. 무엇보다 코드 생성과 실행을 검증 관문으로 나눕니다.
  6. 접근 통제와 승인. 권한이 높은 실행은 사람이 승인하고, 자동 실행 허용 목록은 버전 관리 아래 둡니다. 역할과 행동 기반 통제를 강제합니다.
  7. 코드 분석과 감시. 실행 전에 정적 검사를 하고, 실행 중에는 감시를 켜고, 인젝션 패턴을 살피고, 모든 생성과 실행을 기록합니다.

장면의 리포트 에이전트라면, 집계는 미리 만든 안전한 질의 도구로 처리하고, 정말 코드를 생성해야 한다면 읽기 전용 데이터 사본만 보이는 격리 환경에서, root가 아닌 계정으로, 네트워크를 막고 돌렸어야 합니다.

정리

  • 예상치 못한 코드 실행은 에이전트가 만들거나 받은 텍스트가 검토 없이 실행 가능한 코드가 되어 호스트·컨테이너까지 장악되는 위험입니다.
  • 도구 오용과 같은 길로 오지만, 호스트와 런타임 수준의 방어가 필요해서 따로 다룹니다.
  • 생성과 실행을 나누고, 샌드박스에서 root 없이 돌리고, 운영 에이전트에서는 eval을 쓰지 마세요.

출처

이 글은 OWASP GenAI Security Project – Agentic Security Initiative의 「OWASP Top 10 for Agentic Applications 2026」(CC BY-SA 4.0)을 바탕으로 한국어로 풀어 쓴 글입니다.

  • 원문: OWASP GenAI Security Project의 「OWASP Top 10 for Agentic Applications 2026」(Version 2026, December 2025)
  • 라이선스: CC BY-SA 4.0
  • 원문을 번역·요약하고 예시를 바꿔 썼습니다(변경 있음). 이 글의 본문과 새로 그린 그림도 같은 CC BY-SA 4.0 조건으로 공유합니다.
  • 리포트 에이전트 장면은 설명을 위해 만든 것입니다. 원문 시나리오에 있는 명령 예시는 싣지 않고 개념으로만 바꿔 썼습니다.

이전 글 ASI04 에이전틱 공급망: 실행 중에 조립되는 의존성
다음 글 ASI06 메모리·컨텍스트 오염: 한 번 심은 거짓이 계속 남는다
시리즈 전체 목록 입문자를 위한 OWASP Agentic Top 10 2026 전체 목록

profile
고인물 개발자(OG)

0개의 댓글