이 문서를 통해 아래 질문들에 답할 수 있게 됩니다.
- 모델 출력은 왜 신뢰할 수 없는 외부 입력처럼 다뤄야 하는가?
- excessive agency는 어떤 상황에서 발생하는가?
- SQL, HTML, shell command, write tool을 안전하게 다루려면 무엇이 필요한가?
개요
Insecure Output Handling은 모델 출력이 검증 없이 후속 시스템에 전달될 때 생기는 위험이다. Excessive Agency는 모델에게 너무 많은 권한과 자율성을 주는 위험이다.
둘은 tool calling과 agent에서 자주 함께 나타난다.
모델 출력 검증
모델 출력은 다음으로 바로 쓰면 위험하다.
- HTML
- SQL
- shell command
- DB update
- email body
- policy decision
- access control decision
서버 검증과 안전한 렌더링이 필요하다.
SQL 생성
모델이 SQL을 생성해야 한다면:
- read-only connection
- allowlisted tables
- row limit
- timeout
- tenant filter 강제
- explain 또는 parser validation
- write query 금지
production DB에 자유 SQL을 직접 실행하지 않는다.
Tool 권한 제한
write tool은 다음을 가져야 한다.
- 최소 권한
- approval
- idempotency key
- audit log
- max tool calls
- rollback 또는 보상 절차
코드로 이해하기
def validate_sql(sql: str) -> None:
lowered = sql.lower()
forbidden = ["insert ", "update ", "delete ", "drop ", "alter "]
if any(word in lowered for word in forbidden):
raise ValueError("write_sql_not_allowed")
if " limit " not in lowered:
raise ValueError("limit_required")실제 운영에서는 SQL parser와 allowlist를 써야 한다. 문자열 검사는 최소 예시일 뿐이다.
장애 상황과 대응
증상:
- 모델 출력 HTML로 XSS 발생
- SQL이 과도한 full scan 실행
- agent가 승인 없이 write tool 실행
- shell command가 위험한 옵션 포함
대응:
- output sanitization
- server-side policy
- read-only 계정
- approval workflow
- audit log
- tool 권한 축소
인프라 협업 포인트
보안팀과 권한 모델을 합의하고, 인프라팀과 read-only 계정, network policy, secret scope, audit storage를 합의한다.
실전 팁
- 모델 출력은 사용자 입력처럼 escape한다.
- 모델이 만든 action plan을 바로 실행하지 말고 서버 policy로 검토한다.
- write action은 draft와 approval을 분리한다.
- agent에게 관리자 권한 tool을 주지 않는다.
위험 신호!
- 모델 출력 SQL을 그대로 실행한다.
- 모델 출력 HTML을 sanitize 없이 렌더링한다.
- agent가 결제나 삭제 tool을 직접 실행한다.
- tool 권한이 사용자 권한보다 크다.
확인 질문
확인 질문
- 모델 출력은 왜 외부 입력처럼 검증해야 하는가?
- 모델이 생성한 내용은 안전성과 정확성을 보장할 수 없고 공격 입력의 영향을 받을 수 있기 때문이다.
- excessive agency를 줄이는 대표 방법은 무엇인가?
- 최소 권한, read/write 분리, approval, idempotency, audit log, max step 제한이다.
Spring AI 적용 연결
- Spring AI에서는 insecure output을 DTO 검증, policy check, 후속 action 승인 경계로 막아야 한다. 출력과 실행 경계는 06. Structured Output과 Bean Validation과 07. Tool Calling과 Side Effect 방어에서 이어진다.
- 과도한 자율성을 MCP 통합에서 제한하는 방식은 08. MCP Client Server 통합을 함께 본다.