Google ADK TypeScript(@google/adk)의 FileArtifactService에서 경로 순회(path traversal, CWE-22) 취약점(CVE-2026-105772)이 공개되었습니다. 조작된 userId/sessionId 값으로 인증 없이 임의 파일 읽기/쓰기가 가능한 취약점으로, GitHub Advisory Database는 GHSA-r3pf-g3mr-cmr7을 통해 Critical 심각도로 등록했으며 2026년 10월 20일 공개 후 현재 Unreviewed 상태입니다.
개요

FileArtifactService는 파일 시스템에 아티팩트를 저장할 때 userId와 sessionId를 경로 구성에 사용하는 구조입니다. 이 값에 경로 구분자나 인코딩 등이 조작되면 저장소 루트 밖 임의 경로에 접근할 수 있어, 인증 없이 민감 정보 노출(임의 파일 읽기)과 서버 파일 변조(임의 파일 쓰기, 추가 공격 발판)가 가능해집니다.
이미 수정이 @google/adk 0.6.0에서 완료되어, 비기본 파일 아티팩트 저장소를 사용 중인 서비스의 업그레이드와 노출 여부 점검이 핵심 대응입니다. 기본 인메모리(in-memory) 아티팩트 서비스는 영향이 없는 것으로 공식 확인되었습니다.
영향 범위
- Google ADK TypeScript(@google/adk)의 FileArtifactService를 사용하는 구성
- 파일 기반 아티팩트 저장소로 기본 구성을 변경한 배포
- @google/adk 0.6.0 미만 버전(파일 저장소 사용 시)
- 외부 입력값이 userId/sessionId로 도달하는 에이전트 서비스는 시스템 기밀성·무결성 영향 가능성이 있습니다
기술적 분석
취약점의 원인은 FileArtifactService가 userId와 sessionId를 경로 구성에 사용하는 과정에서 입력 검증이 부족했던 것입니다. 이 값에 경로 구분자, 퍼센트 인코딩, 널 바이트 등이 포함되면 저장소 루트 외부의 임의 경로로 접근할 수 있는 경로 순회가 발생합니다.
수정 작업은 PR #210를 통해 @google/adk 0.6.0에 포함되었으며, userId와 sessionId에 허용 문자 화이트리스트 검사를 추가했습니다. 영숫자와 _, -, ., @만 허용하고, 경로 구분자, 퍼센트 인코딩, 널 바이트 등을 차단하는 방식입니다. 커밋 8c0eaa1에서는 루트 내부 검증(assertInsideRoot)과 세션 아티팩트 디렉터리 생성 검증 로직이 포함된 것으로 확인됩니다.
대응 방안
즉시 대응:
- @google/adk 사용 여부와 버전, FileArtifactService(파일 아티팩트 저장소) 사용 여부를 전수 확인합니다. 기본 인메모리 아티팩트 서비스는 영향이 없으므로 파일 저장소 구성만 우선 분류하세요.
- FileArtifactService를 사용하는 배포를 @google/adk 0.6.0 이상으로 즉시 업그레이드합니다.
- 즉시 업그레이드가 어려운 환경에서는 userId/sessionId가 외부 입력으로 반영되는 지점을 점검하고, 가능하면 해당 서비스의 외부 노출을 일시 제한합니다.
- 아티팩트 저장 디렉터리 내외에 비정상 파일 생성·수정 흔적이 있는지 확인합니다.
지속적 개선:
- @google/adk 0.6.0 이상 유지(수정은 PR #210의 화이트리스트 검사로 경로 구분자, 퍼센트 인코딩, 널 바이트 차단)
- 사용자 제공 식별자가 파일 경로에 반영되는 모든 커스텀 코드에 동일한 허용 문자 검사 적용
- 아티팩트 저장소를 애플리케이션 전용 격리 디렉터리와 최소 권한으로 운영
- 기능상 필요 없다면 기본 인메모리 저장소 등 파일 시스템 기반 저장소 사용 자체를 재검토
탐지 포인트:
- userId/sessionId 값에 경로 구분자, 퍼센트 인코딩 형태의 이상 패턴이 포함된 요청 로그 점검
- 아티팩트 저장 루트 디렉터리 외부 경로에 대한 파일 생성·수정 이벤트 모니터링(파일 무결성 감시)
- 저장소 디렉터리 밖 위치에 생성된 비정상 파일의 존재 여부 조사
한계
- 취약 버전의 정확한 하한(영향 개시 버전)은 확인된 자료에 명시되어 있지 않습니다.
- CVSS 점수 수치와 세부 벡터는 확인된 자료에 포함되어 있지 않으며, Critical은 GitHub Advisory Database의 분류입니다. 해당 어드바이저리는 아직 Unreviewed 상태입니다.
- CISA KEV 등재 여부와 야생 악용, 공개 PoC는 확인되지 않았습니다(조사 후 미발견).
- 취약 코드 도입 시점과 노출 조건(외부 입력 도달 경로)의 상세는 확인된 자료만으로 단정할 수 없습니다.
종합 평가
공개 기준일 현재 야생에서의 실제 악용 사례와 공개 PoC는 확인되지 않았습니다. 다만 임의 파일 읽기/쓰기가 인증 없이 가능하다는 점에서 잠재 영향은 크며, GitHub Advisory Database는 Critical 심각도로 분류하고 있습니다. 악용 여부 미확인은 안전하다는 의미가 아니라 관측되지 않았다는 의미로 읽어야 합니다.
참고자료
- GHSA-r3pf-g3mr-cmr7: Path Traversal (CWE-22) in FileArtifactService in Google... CVE-2026-105772
- Path Traversal in FileArtifactService allows unauthenticated arbitrary file read/write via crafted userId/sessionId (GHSA-8hc4-6xx6-3rh3)
- prevent path traversal in FileArtifactService (CWE-22) - Pull Request #210
- prevent path traversal in FileArtifactService (CWE-22) (#210) commit 8c0eaa1
함께 읽으면 좋은 글
- LoopX serve-status 과도한 CORS 정책: 제어면 상태·비공개 Markdown 노출 조건 점검
- aiohttp 부분 헤더로 첫 요청 마감 시점 연장 문제(CVE-2026-111064): 3.14.4 수정과 공개 HTTP 서비스 점검
- Mercury /api/terminals 인증 우회 원격 코드 실행: 노출 서비스와 패치 범위 점검
본 콘텐츠는 AI 기술로 작성된 분석 리포트를 포함하고 있습니다. 내용 중 사실과 다르거나 보완이 필요한 정보를 발견하셨으면 댓글을 통해 의견을 부탁드립니다. 여러분의 피드백은 더 정확한 보안 정보 공유에 큰 도움이 됩니다.
댓글 (0)
댓글을 작성하려면 로그인이 필요합니다.
로그인아직 댓글이 없습니다.
첫 번째 댓글을 작성해보세요!