Prefab UI 샌드박스 취약점: 생성형 UI와 MCP 서버의 권한 경계
CVE-2026-120338의 영향 버전과 노출 조건, Deno 권한 회수 패치와 FastMCP 운영자가 확인할 사항을 살펴본다.

JFrog 보안 연구팀은 11월 1일 Prefab UI의 생성형 UI 샌드박스에서 호스트 파일에 접근할 수 있는 취약점 CVE-2026-120338을 공개했다. 영향 범위는 prefab-ui 0.14.0 이상 0.21.0 미만이다. 수정 버전 0.21.0은 공개보다 앞선 10월 26일에 나왔다. JFrog 연구 원문과 프로젝트 릴리스를 확인했다.
어디서 경계가 무너졌나
Prefab UI의 생성형 UI 기능은 전달받은 Python 코드를 WebAssembly 기반 Pyodide에서 실행한다. 이 Pyodide는 Deno 하위 프로세스에서 구동된다. 연구팀에 따르면 취약한 버전의 프로세스는 파일 읽기·쓰기와 네트워크 권한을 가진 채 시작됐고, Python의 js 모듈을 거쳐 Deno API에 접근할 수 있었다. 결과적으로 코드 제출자는 서버 프로세스의 운영체제 사용자 권한으로 파일을 읽거나 쓸 수 있다. 연구팀은 쓰기 권한을 이용해 이후 Python 프로세스에서 코드가 실행되는 경로도 재현했다.
이 문제를 모든 Prefab 설치의 원격 실행 취약점으로 받아들이면 범위를 잘못 짚는다. JFrog에 따르면 Generative UI는 선택적으로 켜는 기능이고 호스트에 Deno가 있어야 한다. 해당 샌드박스에서 신뢰할 수 없는 코드를 실행하지 않는 서버는 이 경로에 노출되지 않는다.
MCP 서버 운영자가 확인할 조건
FastMCP의 GenerativeUI 제공자는 generate_prefab_ui 도구를 등록해 전달받은 코드를 샌드박스에 넘긴다. 인증이 없는 서버라면 서버에 접근할 수 있는 클라이언트가 호출할 수 있고, 인증이 있다면 도구 호출 권한이 있는 클라이언트가 대상이다. JFrog는 인증이 없는 경우 CVSS 10.0, 인증된 도구 호출자가 필요한 경우 9.9로 평가했다. 이는 서로 다른 접근 조건의 점수다.
먼저 배포 환경에서 prefab-ui 버전과 GenerativeUI 사용 여부, Deno 설치 및 도구 접근 권한을 함께 확인하자. 패키지의 존재만으로 외부 노출을 단정할 수 없다. 연구 원문에는 재현 절차가 있지만 실제 환경에서 악용됐는지는 확인하지 못했다.
수정과 임시 대응
JFrog는 prefab-ui를 0.21.0 이상으로 올리라고 권고한다. 수정된 러너는 초기화 후 생성된 코드를 받기 전에 Deno의 파일 읽기·쓰기와 네트워크 권한을 회수한다. PrefectHQ의 병합된 변경 사항에서도 실행 전 초기화 권한 회수를 확인할 수 있다. 업그레이드 후에는 실제 배포 환경에 새 버전이 반영됐는지 확인해야 한다.
당장 업그레이드할 수 없다면 JFrog는 신뢰할 수 없는 클라이언트가 접근하는 서버에 GenerativeUI를 등록하지 말라고 권고한다. 인증은 접근 대상을 줄이지만, 도구 호출 권한이 있는 사용자의 코드까지 안전하게 격리한다는 뜻은 아니다. 샌드박스가 실행하는 언어뿐 아니라 그 언어가 연결된 런타임의 권한까지 점검해야 하는 사례다.



Discussion
No comments yet