경계 검사 한 줄이 곧 샌드박스인 경우가 있습니다. Network-AI 5.15.5 미만 버전의 InputSanitizer.sanitizePath()가 바로 그 지점이었습니다. 문제가 되는 축은 익숙한 ../ 문자열이 아니라, 기본 디렉터리 이름과 앞부분이 같은 형제 디렉터리 경로입니다.
개요

Network-AI 5.15.5 미만 버전의 InputSanitizer.sanitizePath() 함수에 샌드박스 탈출이 가능한 경로 순회(path traversal) 취약점인 CVE-2026-120313이 확인되었습니다. CWE-22(특정 디렉터리로 pathname 제한 부적절)로 분류됩니다.
- 영향 범위: CVE Project 레코드와 VulnCheck Advisory가 문서화한 범위는 Network-AI 0 이상 5.15.5 미만
- 원인 지점: GHSA-5mm5-4mh4-6gm6에 따르면
security.ts387행의 격리 검사가 후행 경로 구분자 없이startsWith(resolvedBase)문자열 비교만 사용 - 평가: CVSS 4.0 기준 8.7점, 벡터
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N - 악용 상태: 메커니즘은 공개 권고와 CVE 레코드를 통해 상세히 공개되었으나, 야생 악용 증거는 이번 조사 범위에서 확인되지 않음
CVE Project 레코드는 공격자가 기본 디렉터리와 문자열 접두사를 공유하는 디렉터리 경로를 공급해 앵커링되지 않은 startsWith 검사를 우회하고 샌드박스 밖의 파일을 읽거나 나열하거나 쓸 수 있다고 기술합니다. CVSS 벡터는 네트워크 경로, 낮은 복잡도, 인증 요구 없음, 사용자 상호작용 요구 없음으로 평가합니다. 즉 영향 범위에 드는 버전과 도달 가능한 경로 입력이 동시에 존재한다면, 자격 증명이나 사용자 조작 없이도 시도 가능한 축으로 보는 것이 합리적입니다. 다만 이는 벡터 평가에서 도출된 조건부 판단이며, 실제 노출은 각 배포의 호출 경로가 외부 입력에 열려 있는지에 따라 달라집니다.
영향 범위
취약한 경계 판정을 사용하는 기능이 공통의 노출 대상이 됩니다. 확인된 범위는 다음 두 축으로 정리됩니다.
- 버전: CVE 레코드가 지정한 영향 범위는 Network-AI 0 이상 5.15.5 미만입니다. npm registry network-ai latest 기준 최신 버전은 5.17.2로 배포되어 있어, 노출 판단은 이 레코드의 영향 범위 대조가 기준이 됩니다.
- 기능:
InputSanitizer.sanitizePath()의 경로 격리 검사를 거치는 경로 입력, CWE-22로 분류된 샌드박스 경계 검사 로직.
기밀성이 주요 영향으로 평가됩니다. CVSS 벡터는 변경된 컴포넌트의 기밀성 영향을 높음(VC:H)으로 두고 무결성과 가용성 영향은 없음(VI:N, VA:N)으로 두지만, CVE Project 레코드는 샌드박스 밖 파일의 읽기·나열·쓰기가 모두 가능하다고 기술합니다. 이 간극은 벡터가 확인된 최소 영향을 문서화한 것으로 보고, 쓰기 경로가 실제로 열려 있는지는 각 배포에서 별도로 확인해야 할 지점으로 다루는 편이 안전합니다. 쓰기까지 가능하면 노출의 성격은 단순 정보 유출을 넘어 무결성 문제로 확장됩니다.
노출 여부를 가르는 조건은 디렉터리 배치입니다. 베이스 디렉터리 이름이 같은 상위 계층의 다른 디렉터리 이름 접두사가 되는 환경, 예를 들어 기본 디렉터리가 /data/project인데 /data/project-evil, /data/project_backup 같은 형제 디렉터리가 존재하는 환경에서 우회 대상이 실제로 존재하게 됩니다. 반대로 샌드박스 주변에 그런 디렉터리가 없다면 우회 논리는 성립해도 도달할 대상이 없어지는 것입니다. 같은 버전이라도 배치에 따라 확인할 내용이 달라지는 이유입니다.
기술적 분석
핵심은 Network-AI 보안 권고 GHSA-5mm5-4mh4-6gm6에 명시된 security.ts 387행의 판정 방식입니다. 격리 검사가 정규화된 경로 값에 대해 startsWith(resolvedBase)를 호출하는데, 여기에 후행 경로 구분자가 붙지 않습니다.
- 기본 디렉터리가
/data/project라면 비교 조건은"/data/project"로 시작하는지 보는 문자열 판정입니다. - 이 조건은
/data/project-evil/secret.txt를 통과시킵니다. 문자열로서는 확실히/data/project로 시작하지만, 경로로서는/data/project의 하위 요소가 아니라 형제 디렉터리의 파일입니다. - 구분자 경계를 요구하지 않기 때문에 판정 함수는 "이 경로가 정말 베이스 내부에 있는가"가 아니라 "이 경로는 베이스 이름 문자열로 시작하는가"만 답합니다.
여기서 중요한 점은 고전적인 ../ 순회와 다른 축의 우회라는 것입니다. 정규화된 값끼리 비교하므로 .. 자체는 이미 정리되어 있을 수 있습니다. 우회는 순회 문자가 아니라 접두사 일치의 비정밀성에서 나옵니다. 따라서 .. 문자열 차단에만 의존해온 필터에 안심하기 어렵고, 봐야 할 지점은 문자열 필터가 아니라 경계 판정 로직 그 자체입니다.
악용 흐름은 sanitizePath()를 통과한 경로가 이후 파일 읽기, 디렉터리 나열, 쓰기에 사용될 때 완성됩니다. CVE Project 레코드는 이 동작을 샌드박스 외부 파일의 읽기·나열·쓰기로 명시합니다. 제공된 근거가 확인하는 사실은 영향 버전(5.15.5 미만)에서 기본 디렉터리 이름과 문자열 접두사를 공유하는 형제 디렉터리 경로가 이 격리 검사를 우회할 수 있다는 점까지입니다. 실제 배포 환경에서 외부에서 조종 가능한 경로 문자열이 이 함수에 얼마나 도달하는지는 근거 자료에 포함되어 있지 않아, 각 배포별로 별도로 확인해야 할 항목으로 남습니다.
공개 PoC·익스플로잇 분석
- 출처: 이번 근거 자료에서 악용 절차가 공개된 지점은 Network-AI 보안 권고 GHSA-5mm5-4mh4-6gm6입니다. 권고는
security.ts:387의 판정 코드 위치와 함께 기본 디렉터리/data/project대비 형제 경로/data/project-evil/secret.txt라는 재현 가능한 예시를 직접 제시합니다. 샌드박스 외부 파일의 읽기·나열·쓰기 동작은 CVE Project 레코드가 명시합니다. - 전제조건: 예시가 성립하려면 영향 범위에 드는 버전에서
sanitizePath()가 외부에서 조종 가능한 경로 문자열을 받고, 베이스 디렉터리 이름이 같은 상위 계층의 다른 디렉터리 이름 접두사가 되는 배치가 실제로 존재해야 합니다. 이 두 조건이 모두 충족될 때만 형제 경로가 경계 판정을 통과합니다. - 입증 범위: 공개된 예시가 입증하는 범위는 "구분자 경계를 검사하지 않으면 형제 디렉터리 경로가 범위 내로 승인된다"는 경계 판정의 오류, 그리고 그 결과로 베이스 밖 경로가 접근 대상이 된다는 점까지입니다. 반대로 제공된 근거에는 독립 실행형 익스플로잇 코드, 특정 환경에서의 실제 침입 성공, 야생 악용 사례, CISA KEV 등재, 공격자 활동 지표, 수정 커밋의 구체적 내용이 포함되지 않습니다. 따라서 이 부분은 근거가 없는 영역으로 남깁니다.
- 운영상 의미: 악용에 필요한 지식이 권고문에 평문으로 적혀 있고, 벡터가 인증 없음·사용자 상호작용 없음·낮은 복잡도로 평가됩니다. 이는 시도 비용을 낮추는 조건의 조합입니다. 그래서 조기 대응에서 실제로 확인할 수 있는 축은 제공된 근거와 맞물리는 두 항목입니다. 실행 중인 버전이 레코드의 영향 범위(5.15.5 미만)에 있는지, 그리고 베이스 디렉터리 이름이 형제 디렉터리의 접두사가 되는 배치가 실재하는지입니다. "야생 악용 미확인"은 "안전"을 의미하지 않으며, 노출된 설치 규모는 근거 자료에 없어 추정하지 않습니다.
대응 방안
즉시 확인할 것
- 실행 중인 Network-AI 버전을 확인합니다. CVE Project 레코드가 문서화한 영향 범위는 5.15.5 미만이고, npm registry network-ai latest 기준 최신 버전은 5.17.2입니다. 영향 범위에 해당하면 범위 밖 버전으로의 상향을 검토합니다.
- 상향을 즉시 하기 어렵다면
sanitizePath()에 전달되는 사용자 입력 경로가 샌드박스 밖 디렉터리 접두사와 겹치지 않는지 호출 지점과 베이스 디렉터리 배치를 점검합니다. 점검 기준은 GHSA-5mm5-4mh4-6gm6이 지정한 우회 메커니즘, 즉 기본 디렉터리 이름으로 시작하는 형제 디렉터리 경로가 후행 구분자 없는startsWith비교를 통과하는 지점과, VulnCheck Advisory가 문서화한 Network-AI 0 이상 5.15.5 미만이라는 영향 범위에 한정합니다. - 애플리케이션이 접근할 수 있는 샌드박스 상위 계층에서, 베이스 디렉터리 이름이 다른 디렉터리 이름의 접두사가 되는 경우가 있는지 확인합니다. 우회 대상의 실존 여부, 즉 조건부 노출 수준을 여기서 결정합니다.
관측할 것
- 베이스 디렉터리와 접두사가 겹치는 형제 디렉터리, 예컨대
/data/project-evil/secret.txt형태의 경로가 파일 접근 로그에 등장하는지 점검합니다. 이 패턴 자체가 권고문이 지킨 우회 축과 직접 맞물립니다. - 여러 환경과 배포에 설치된 Network-AI 종속성 버전을 정리해 5.15.5 미만 잔존 여부를 확인합니다. 버전 확인은 이번 사례에서 가장 손쉽게 확인할 수 있는 항목입니다.
- 어떤 값이나 판정 상태가 로그에 남는지는 제공된 근거에 포함되어 있지 않습니다. 따라서 로그 필드·기록 방식 수준의 탐지 규칙은 이 글에서 다루지 않으며, 위 항목도 확인된 경로 패턴과 버전 범위에 한정합니다.
장기 대응
- 버전 관리 기준은 CVE 레코드가 문서화한 영향 범위에 둡니다. CVE Project 레코드는 Network-AI 0 이상 5.15.5 미만을 영향 범위로 문서화하고 있으므로, 범위 안에 남은 배포가 없는지 지속적으로 대조하고 남아 있으면 해당 범위 밖 버전으로의 업그레이드를 검토하는 것이 근거로 확인되는 대응 축입니다. 정확한 수정 커밋과 릴리스 노트, 패치 구현 내용은 제공된 근거에 포함되어 있지 않아, 버전 상향이 접두사 판정 코드를 어떻게 변경했는지는 이번 자료로 확인하지 못합니다.
- 경로 격리 검사에 대한 코드 수준의 점검은 GHSA-5mm5-4mh4-6gm6이 지적한 지점에 한정해 살펴봅니다. 권고문은
security.ts:387의 격리 검사가 후행 경로 구분자 없이startsWith(resolvedBase)만 사용해, 이름이 기본 디렉터리로 시작하는 형제 디렉터리 경로가 범위 내로 승인된다고 명시합니다. 따라서 동일한 형태의 경계 검사를 직접 유지하고 있다면, 문자열 접두사 비교가 후행 경로 구분자로 앵커링되어 있는지가 이 사례에서 확인되는 점검 대상입니다.
한계
- 실제 악용 사례, CISA KEV 등재 여부, 공격자 활동 지표는 제공된 근거에서 확인되지 않았습니다.
- 정확한 수정 커밋과 패치 내용, 샌드박스 외부 파일 접근이 실제 운영 환경에서 어떤 애플리케이션 기능으로 노출되는지에 대한 세부 사항도 근거에 포함되지 않았습니다.
- 위 대응 우선순위는 "인증 없는 네트워크 벡터 + 높은 기밀성 영향 + 상세 메커니즘 공개"라는 확인된 사실의 조합에서 도출된 조건부 판단입니다. 각 환경의 호출 경로와 데이터 배치에 따라 실제 노출 수준은 달라질 수 있습니다.
참고자료
- CVE-2026-120313 Network-AI before 5.15.5 Path Traversal via InputSanitizer.sanitizePath
- InputSanitizer.sanitizePath sibling-directory escape via non-separator-anchored prefix check
- Network-AI before 5.15.5 Path Traversal via InputSanitizer.sanitizePath | Advisories
- network-ai latest package metadata
함께 읽으면 좋은 글
- CVE-2026-120334: deepset-ai FARM 토크나이저 로더의 경로 순회, 무엇이 결정적인가
- CVE-2026-110936: Siemens Software Center DLL 사이드로딩, 악용 확인과 KEV 등재가 뜻하는 대응 우선순위
- CVE-2026-102764: BeyondTrust Remote Support 인증 우회, KEV 등재로 확인된 위험과 점검 순서
본 콘텐츠는 AI 기술로 작성된 분석 리포트를 포함하고 있습니다. 내용 중 사실과 다르거나 보완이 필요한 정보를 발견하셨으면 댓글을 통해 의견을 부탁드립니다. 여러분의 피드백은 더 정확한 보안 정보 공유에 큰 도움이 됩니다.
댓글 (0)
댓글을 작성하려면 로그인이 필요합니다.
로그인아직 댓글이 없습니다.
첫 번째 댓글을 작성해보세요!