DEEP DIVE REPORT

CVE-2026-120312: network-ai AgentVCR 경로 순회, 벤더 권고 시점 최신 확인 5.15.4·fix status 'not fixed'

SecurityDesk
• 2026.11.03 • 조회 3

npm 패키지 network-ai의 AgentVCR 카세트(cassette) 기능에서 카세트 이름(name) 값을 통한 경로 순회(path traversal) 취약점이 확인되었습니다. CVE-2026-120312로 배정된 이 취약점은 임의의 .json 파일 읽기·쓰기를 허용하고, 그 결과로 AuthGuardian의 신뢰 수준(trust level) 정책이 위조될 수 있습니다. 확인된 취약 범위는 5.13.4 이상 5.15.4 이하이고, 벤더 보안 권고 작성 시점에 확인된 최신 릴리스는 5.15.4였으며 fix status는 not fixed였습니다.

개요

개요 인포그래픽
CVE Project 기록상 이 CVE는 VulnCheck가 할당한 CVE-2026-120312로, 상태는 PUBLISHED입니다. 상세 기술 내용은 Jovancoding/Network-AI 저장소의 GitHub 보안 권고 GHSA-mfxv-jg44-xj48에 담겨 있습니다.

취약 지점은 AgentVCR가 카세트 파일 경로를 만들어내는 부분입니다. AgentVCR는 개발자가 설정한 기본 디렉터리와 호출자가 제공하는 name 값, .json 확장자를 단순 연결해 파일 경로를 구성하는데, name 값이 기본 디렉터리 내부에 남아 있는지 검증하지 않습니다. 검증이 빠진 자리에는 상위 디렉터리 참조 형태의 입력이 들어갈 수 있고, 이 경우 의도한 디렉터리 경계를 벗어난 위치의 .json 파일에 도달할 수 있습니다.

영향은 파일 두 갈래에 그치지 않습니다. 읽기와 쓰기 권한이 .json 파일이라는 형식 안에 열리면, 애플리케이션 동작을 좌우하는 설정·데이터가 변조될 수 있고 특히 AuthGuardian의 신뢰 수준 정책이 덮어써져 인가·신뢰 결정이 우회될 수 있습니다.

영향 범위

  • 생태계는 npm, 패키지는 network-ai입니다.
  • 권고에서 확인된 취약 범위는 5.13.4 이상 5.15.4 이하입니다.
  • 취약 코드가 담긴 lib/agent-vcr.ts 모듈은 5.13.4 릴리스에서 처음 등장하며, 5.13.3와 그 이전 버전에는 이 모듈이 존재하지 않습니다.
  • 취약 코드는 5.15.4까지 변경 없이 그대로 존재하는 것으로 확인되었습니다.
  • 벤더 권고 시점에 확인된 최신 릴리스는 5.15.4이고 fix status는 not fixed였습니다.

여기서 한 번 짚어 둘 점이 있습니다. npm 레지스트리 메타데이터에는 최신 배포 태그가 5.17.2로 표시됩니다. 그러나 5.15.4를 초과하는 버전에서 이 경로 순회 문제가 실제로 수정되었는지는 증거에 명시되어 있지 않습니다. 따라서 최신 버전으로의 업그레이드가 이 취약점에 대한 유효한 대응인지 확인되지 않은 상태이며, 5.15.4 초과 버전의 안전성을 단정할 수 없습니다.

위 범위가 곧 실제 위험도를 뜻하지는 않습니다. 벤더 권고가 명시하는 것은 name 값에 대한 경계 검증이 없다는 점까지이고, 그 값을 각 환경에서 누가 어떻게 채우는지는 권고에 따로 적혀 있지 않습니다. 그래서 취약 범위에 해당한다면 먼저 카세트 name 값을 채우는 호출 지점이 어디인지, 그 경로가 외부 요청이나 사용자 제어 값에 닿는 구조인지부터 확인하는 것이 벤더 권고 시점 기준으로 현실적인 점검 순서가 됩니다. 내부 개발 도구 용도로만 쓰이는 구조라면 점검의 급은 달라질 수 있습니다.

기술적 분석

경로 생성과 빠진 검증

AgentVCR의 경로 생성은 기본 디렉터리 + 호출자 제공 name + .json이라는 단순한 연결로 이루어집니다. 경로 순회를 막으려면 조립이 끝난 최종 경로가 여전히 기본 디렉터리 안에 있는지를 확인하는 단계가 필요하지만, 이 코드 경로에는 그 경계 확인이 없습니다. 결과적으로 ../ 같은 상위 디렉터리 참조를 포함한 name 값이 기본 디렉터리 바깥의 .json 파일을 가리킬 수 있고, 카세트를 읽고 쓰는 동작은 그 임의 위치에서 실행됩니다. 해당 로직은 lib/agent-vcr.ts 모듈에 있으며, 이 모듈은 5.13.4에서 처음 등장한 뒤 변경 없이 유지되어 왔습니다.

읽기·쓰기가 도달하는 곳

확인된 영향은 세 갈래로 정리할 수 있습니다.

  • 임의의 .json 파일 읽기: 서버 안의 설정 파일이나 다른 카세트 데이터가 읽히면 정보 유출 경로가 될 수 있습니다.
  • 임의의 .json 파일 쓰기: 애플리케이션 동작을 좌우하는 JSON 기반 설정·데이터를 변조할 수 있습니다.
  • AuthGuardian 정책 위조: 신뢰 수준(trust level) 정책을 덮어써 인가·신뢰 결정을 우회하는 효과가 가능합니다.

세 번째 항목이 이 취약점의 성격을 바꿉니다. 단순한 파일 유출에서 멈추지 않고, 애플리케이션이 '이 요청 또는 이 대상을 얼마나 신뢰할 것인가'를 판단하는 근거 자체를 공격자가 고칠 수 있다는 의미입니다. 신뢰 결정 로직이 파일 시스템의 특정 .json 파일에 의존하는 설계일수록, 파일 쓰기 하나가 인가 우회로 직결될 수 있습니다.

공개 PoC·익스플로잇 분석

  • 출처: 개념 증명(PoC)은 Jovancoding/Network-AI 저장소의 GitHub 보안 권고 GHSA-mfxv-jg44-xj48에 포함되어 공개·검증된 상태입니다. CVE 식별은 CVE Project 기록상 VulnCheck가 할당한 CVE-2026-120312(PUBLISHED)이고, 재현에 관한 기술 서술은 이 벤더 권고에서 나옵니다. 이번 원고가 참조한 근거는 아래 참고자료의 링크와 동일합니다.
  • 전제조건: 근거가 명시하는 조건은 경로 조립 단계 하나입니다. AgentVCR는 개발자가 설정한 기본 디렉터리와 호출자가 제공하는(caller-supplied) name 값, .json 확장자를 연결해 경로를 만들지만 name이 기본 디렉터리 내부에 남아 있는지 검증하지 않고, PoC는 바로 그 경계 검증 부재를 파고듭니다. 경로는 name에 .json 확장자를 붙여 조립되므로 도달 가능한 대상은 .json 파일로 제한됩니다. name 값의 실제 공급 주체에 대한 조건은 근거에 명시되어 있지 않습니다.
  • 입증 범위: PoC가 보여주는 것은 상위 디렉터리 참조를 담은 name 값으로 기본 디렉터리 바깥의 .json 파일에 읽고 쓰기 형태로 도달한다는 점까지입니다. 그 너머, 즉 AuthGuardian 신뢰 수준 위조가 실제 서비스에서 끝까지 성공하는지, 악용에 어떤 인증 조건이 필요한지, 유출 범위가 운영 데이터 어디까지인지는 증거에 명시되어 있지 않습니다. PoC의 구체적인 악용 스크립트 내용도 이번 분석에는 반영하지 않았습니다.
  • 운영상 의미: 재현 절차가 공개되어 있다는 것은 취약점 공개와 악용 사이의 준비 시간이 짧아질 수 있음을 뜻합니다. 특히 벤더 권고 시점의 fix status가 not fixed였으므로, 이후 수정 상황이 확인되기 전까지 패치만 기다리는 기간이 그대로 노출 시간으로 이어질 수 있습니다. 이 경우 점검의 초점은 버전 번호 하나가 아니라 AgentVCR가 실제로 쓰이는 호출 경로와 .json 파일에 닿는 쓰기 경로 자체가 됩니다.

다만 여기서 구분할 두 사실은 PoC가 공개되어 있다와 공격이 관측되었다입니다. 앞의 사실만으로 뒤의 사실을 대체할 수는 없습니다. 공개 PoC가 붙은 경로 생성 우회 취약점은 악용 난이도가 낮아지는 경향이 있다는 해석은 위 확인 사실에 근거한 조건부 판단이며, 실제 공격 관측 여부는 별개로 확인해야 합니다.

현재 자료의 한계

  • CVE의 CVSS 심각도 점수와 세부 벡터는 확인되지 않았습니다.
  • CISA KEV 등재 여부와 실제 악용 사례는 확인되지 않았습니다.
  • 악용 사례 및 독립적인 제3자 분석·보도도 확인되지 않아, 기술적 내용은 사실상 단일 벤더 권고에 근거합니다.
  • 5.15.4 초과 버전의 수정 여부는 확인되지 않았습니다.

대응 방안

지금 확인할 것

  • 운영 중인 서비스에서 network-ai 사용 여부와 설치 버전을 확인합니다. 5.13.4~5.15.4 범위에 해당하는지가 첫 기준선입니다. 5.13.3 이전에는 lib/agent-vcr.ts 모듈 자체가 없으므로 이 취약 경로를 쓰지 않습니다.
  • 취약 범위에 해당하면 AgentVCR 기능의 호출 경로가 외부 입력에 노출되어 있는지 점검합니다. 노출이 확인되면 해당 기능의 일시 비활성화 또는 접근 제한을 검토할 수 있습니다. 이는 확인된 사실에 근거한 조건부 권고이며, 실제 노출 여부는 각 환경의 AgentVCR 사용 구조에 따라 달라집니다.
  • 카세트 기본 디렉터리 바깥에 있는 .json 파일의 생성·수정 이벤트와 유출 흔적을 로그에서 확인합니다. AuthGuardian 정책 파일, 특히 신뢰 수준 값의 예기치 않은 변경에 대한 무결성 점검도 같은 관점입니다. 구체적인 로그 포맷이나 IOC 지표는 증거에 명시되어 있지 않고, 이 항목들은 취약 메커니즘에서 도출한 점검 관점이라는 점을 함께 알려드립니다.

구조적으로 할 일

  • name 값이 기본 디렉터리를 벗어나지 않는지 검증하는 경로 정규화·경계 확인 로직이 근본 대응입니다. 벤더 권고에서 제시된 방향이기도 합니다.
  • 수정 버전이 나오면 즉시 업그레이드하는 것이 기본입니다. 다만 벤더 권고 시점에는 fix status가 not fixed였고 5.15.4 초과 버전의 수정 여부도 확인되지 않았으니, 업그레이드를 결정하기 전에 권고 업데이트나 변경 이력으로 수정 사실을 확인하는 단계가 필요합니다.
  • 5.13.3 이하로의 다운그레이드는 해당 모듈이 없어 취약 경로 자체를 피하지만, 다른 기능 영향과 하위 호환성을 사전에 검토해야 합니다.

정리하면, 벤더 권고 시점에 수정 버전이 없었다는 사실과 그 이후 버전의 수정 여부가 확인되지 않았다는 한계를 함께 놓고 보면, 대응의 출발점은 버전 번호만 확인하는 작업이 아니라 AgentVCR 호출 경로의 외부 입력 노출 여부를 확인하는 작업입니다. 노출이 의심되는 환경에서는 기능 제한과 name 값에 대한 경로 정규화·기본 디렉터리 경계 확인을 먼저 적용하고, 수정 버전 확인과 업그레이드로 마무리하는 순서가 현실적입니다. 이 우선순위 판단은 위 확인 사실에 근거한 해석이며, 실제 위험도는 각 환경의 사용 구조가 결정합니다.

참고자료

함께 읽으면 좋은 글

본 콘텐츠는 AI 기술로 작성된 분석 리포트를 포함하고 있습니다. 내용 중 사실과 다르거나 보완이 필요한 정보를 발견하셨으면 댓글을 통해 의견을 부탁드립니다. 여러분의 피드백은 더 정확한 보안 정보 공유에 큰 도움이 됩니다.

댓글 (0)

댓글을 작성하려면 로그인이 필요합니다.

로그인

아직 댓글이 없습니다.

첫 번째 댓글을 작성해보세요!

IT 도구 서랍

→ Unix: 2025-01-15T09:30:00
→ 날짜: 1736934600

→ ASCII: ABC
→ 문자: 65 66 67

ASCII 코드표 — 클릭하면 입력란에 추가

DecHex약어설명
DecHex문자
DecHex문자

→ 유니코드: 홍길동
→ 문자: \ud64d\uae38\ub3d9