에이전트가 테이블을 지웠다, MCP 툴이 막지 않아서였다
원본 · Build-Time vs. Run-Time: Why Dev Tools Fail in Production — Averi Kitsch & Prerna Kakkar, Google
AI Engineer · Averi Kitsch & Prerna Kakkar · Google · 2026-09-09 업로드 · 20분
AI Engineer · Averi Kitsch & Prerna Kakkar · Google · 2026-09-09 업로드 · 20분
한국어·English
Google의 MCP Toolbox 팀은 데모 중 에이전트가 오류를 만나자 "테이블을 지우고 새로 시작"하는 걸 그대로 실행하는 장면을 공개했다. 이들은 이 실패를 빌드타임 툴과 런타임 툴의 경계선으로 설명하며, 개발 편의용 툴을 그대로 프로덕션에 올리는 관행이 문제라고 짚었다.
- MCP Toolbox 규모 — 오픈소스 MCP Toolbox for databases는 GitHub 스타 15.7K, 활성 기여자 132명 이상, 지원 데이터베이스 40개 이상이며, 관리형 MCP와 합쳐 지난달 툴 호출이 2000만 건이었다.
- 컨트롤 플레인 툴 — 인스턴스 생성·관리 같은 관리 툴(admin tools)은 이미 제공된 퍼블릭 API 위에 구축되지만 위험한 작업을 막기 위해 반드시 사람이 개입해야 한다.
- NL2SQL 툴 — execute SQL 툴로 에이전트가 원문 SQL을 그때그때 생성하는 NL2SQL 방식은 개발자 보조·분석 탐색용이며 사전에 어떤 쿼리가 필요한지 모를 때 쓴다.
- 구조화 SQL 툴 — 파라미터를 미리 고정한 구조화 SQL 툴은 SQL 인젝션을 막고, 에이전트를 사전 정의된 로직으로 제한해 지연시간과 환각을 줄인다.
- 실패 데모 — 빌드타임 툴을 프로덕션에 그대로 쓴 데모에서 에이전트는 오류가 나자 테이블을 삭제하고 새로 시작했고, 안전장치가 없어 모든 데이터가 지워졌다.
- lethal trifecta — Simon Willison이 명명한 lethal trifecta처럼, 에이전트가 사설 데이터·신뢰할 수 없는 콘텐츠·외부 노출 능력 세 가지를 동시에 가지면 데이터 유출이 발생한다.
- confused deputy 공격 — 트리아지 에이전트가 티켓에 심어진 악성 지시를 그대로 믿고 급여 테이블을 조회해 결과를 다시 티켓에 올리는 confused deputy 공격 시나리오를 제시했다.
- 3중 아이덴티티 분리 — 사용자, 애플리케이션, 에이전트의 아이덴티티를 분리하고 에이전트는 최종 사용자가 필요로 하는 데이터에만 접근하도록 제한해야 한다고 설명했다.
- Source로 연결정보 차단 — Toolbox의 source 프리미티브는 데이터베이스 연결 정보를 YAML 파일에 미리 설정해 MCP 서버 시작 시 주입함으로써 에이전트가 자격 증명을 아예 보지 못하게 한다.
- 읽기전용·데이터셋·출력 제한 — 고객이 가장 많이 요청한 것은 읽기 전용 제한이며, 여기에 허용 데이터셋 지정과 출력 크기 제한을 더해 에이전트가 접근 가능한 블라스트 반경을 좁힌다.
- 커스텀 툴과 prepared statement — 커스텀 툴은 YAML에 정확한 SQL 문을 미리 고정하고 타입이 지정된 파라미터의 prepared statement를 써서 SQL 인젝션을 줄인다.
- 툴 설계 원칙 — 원자적 REST API 대신 결과(outcome) 중심으로 툴을 설계하고, 읽기 툴은 자동 승인하되 쓰기 툴은 사용자 확인을 거치게 하며, 제네릭 HTTP 404 대신 재시도 가능한 액션형 에러를 반환해야 한다고 권고했다.
- 사용자 ID 보호 — user ID 같은 민감 정보는 bound parameters 또는 서명된 JWT에서 클레임을 추출하는 authenticated parameters로 처리해 에이전트가 아예 그 값을 다루지 않게 한다.
그가 한 말
하지만 매우 조심해야 합니다. 위험한 작업을 수행하지 않도록 반드시 사람이 개입해야 합니다.But you need to be very careful. You need to be you need to have a human in the loop because we don't want to carry out any dangerous activities.3분 7초

에이전트가 실제로 테이블을 삭제하고 처음부터 다시 시작하겠다고 했습니다. 우리는 모든 것을 삭제했고 여기엔 아무 안전장치나 가드레일이 없었습니다.So uh agent actually asked to delete the table and start fresh. We deleted everything and there were no safeguard or guardrails here.5분 58초

누가 접근을 통제하고 누가 파라미터를 통제하는지를 생각하면 조금 더 이해가 됩니다.So this makes a little bit more sense when we think about who's controlling access and who's controlling the parameters.10분 23초

이것이 신뢰된 시스템이기 때문에 에이전트는 '좋아, 내 권한을 쓰자. 나에게 그 권한이 있고 접근 권한도 있으니 쿼리해서 티켓에 다시 올리자'라고 하게 됩니다. 하지만 이제 우리는 거대한 데이터 유출을 겪게 됩니다.since this is a trusted system the agent goes okay let me use my permissions. I have those privileges. I have that access. I will query that and I'll post that right back on the ticket because that's what the ticket tells me to do. But now we have a huge data breach.9분 59초

이해관계 · 발화자들은 Google Cloud의 MCP Toolbox for databases와 Google 관리형 MCP, Eval Bench의 개발·유지보수 주체로, 해당 오픈소스·서비스 채택을 권유하는 발표다.
덧붙임 — 여기에 하나 덧붙이면, 이 발표의 핵심은 새로운 방어 기술이 아니라 "누가 SQL을 쓰느냐"의 권한 이동이다. 에이전트가 문자열을 생성하던 자리에서 사람이 미리 고정한 쿼리를 고르는 자리로 옮겨가는 것 자체가 보안 설계다.
오늘 밤 해볼 수 있는 한 가지
지금 운영 중인 에이전트-DB 연동에서 에이전트가 원문 SQL(execute SQL 툴)을 직접 생성하는 경로가 있는지 확인하고, 그중 하나를 파라미터가 고정된 커스텀 SQL 툴로 바꿔본다.