WWBN AVideo AI 플러그인이 받는 비동기 번역 응답 경로에서 경로 순회(path traversal) 취약점이 보고됐습니다. 이 글에서는 어떤 입력이 자막 경로가 되는지, 도달에 무슨 조건이 필요한지, 그리고 수정 배포가 아직 확인되지 않은 현 시점에 무엇을 먼저 살펴봐야 하는지 순서대로 정리합니다.
개요

WWBN AVideo의 AI 플러그인에서 사용자 입력이 자막 파일 경로 생성에 그대로 사용되는 문제가 WWBN 보안 알림 GHSA-v64v-r7qm-w5x4로 공개됐습니다. 알림은 이 유형을 제한된 디렉터리에 대한 경로 제한 부적절, 즉 path traversal로 제목에 명시합니다.
- 취약 지점:
plugin/AI/receiveAsync.json.php. 알림에 따르면 이 파일은bypassSameDomainCheck를 설정하고 세션 또는 소유권 검증을 수행하지 않습니다. - 유입 지점:
type=translation분기에서 요청의response[lang]값이 정제되지 않은 채Ai_transcribe_responses::getVTTPaths()로 전달됩니다. - 결과: 순회 문자열이 들어간 언어 값으로, 웹 서버 사용자가 쓰기 가능한
*.vtt경로에 공격자가 지정한 내용의 파일을 쓰거나 기존 파일을 덮어씁니다. - 필요 조건: 유효한 AI 토큰. 제시된 근거에 따르면 이 토큰은 만료되지 않으며 특정 사용자나 영상에 결속되지 않습니다.
- 영향 버전: AVideo 29.7.0 이하가 영향 범위로 제시됐습니다.
- 식별자: CVE-2026-124424
조각만 나란히 놓으면 입력을 받는 파일 하나가 문제처럼 보입니다. 실제로는 경로 조립에 쓰이는 입력이 정제되지 않고, 그 처리 지점에 세션이나 소유권 검증이 없으며, 도달에 필요한 AI 토큰이 만료나 대상 결속 없이 유지된다는 점이 겹쳐야 도달 거리가 짧아집니다. 검증 환경에서 웹 루트에 작성한 파일이 HTTP로 제공된 결과는, 성립 조건이라기보다 제공된 환경에서 어디까지 실제로 되는지를 보여 준 확인으로 읽는 편이 정확합니다. 그래서 점검은 코드 한 곳에 그치지 않고, 그 경로에 도달할 수 있는 토큰의 보유 범위와 웹 서버 계정의 쓰기 권한 구조까지 넓혀야 합니다.
영향 범위
VulnCheck advisory는 영향 범위를 AVideo 29.7.0 이하로 제시했습니다. 버전과 함께 봐야 할 것은 접근 조건입니다. 근거 자료는 이 취약점이 유효한 AI 토큰 보유자 누구나 도달 가능하다고 설명하고, 해당 토큰이 만료되지 않고 사용자나 영상에 결속되지 않는다고 밝힙니다. 정리하면 점검선은 AVideo 29.7.0 이하를 운영하면서 AI 기능을 사용하는 인스턴스 가운데, 유효한 AI 토큰으로 이 처리 경로에 도달할 수 있는 범위에 그어집니다.
만료와 결속이 없다는 조건을 운영에 대입하면 확인할 것이 좁혀집니다. 오래전에 발급된 값도 아직 유효할 수 있고, 사용자나 영상에 묶이지 않은 토큰은 하나의 값으로 여러 대상의 요청에 쓸 수 있는 상태입니다. 때문에 토큰을 어디에 발급해 두었는지, 현재 유효한 토큰을 누가 들고 있는지를 확인해야 합니다.
쓰기 범위 자체는 위치와 확장자라는 조건에 막혀 있습니다. 웹 서버 사용자가 쓸 수 있는 위치이어야 하고, 대상이 *.vtt 경로라는 점입니다. 이번 근거는 임의 확장자 배치나 웹 서버 사용자 권한을 넘는 쓰기를 뒷받침하지 않습니다. 같은 버전이라도 웹 서버 계정의 쓰기 권한이 좁은 배포와, 자막 저장소를 웹 루트 안에 두고 운영하는 배포에서 위험의 크기는 달라집니다.
함께 봐야 할 범위는 공동 운영 환경입니다. CVE 레코드는 웹 루트에 내용을 심는 것과 함께 다른 사용자의 자막 파일을 덮어쓰는 시나리오를 명시합니다. 여러 제작자가 같은 인스턴스를 쓰는 환경에서는, 자기 영상의 자막이 아니어도 *.vtt 경로에 쓰기가 닿을 수 있다는 점이 점검 대상이 됩니다. 문제는 개인 파일 하나가 아니라 다른 사용자의 자막까지 포함하는 파일 쓰기 문제로 넓어집니다.
기술적 분석
취약한 경로와 입력
receiveAsync.json.php는 외부 응답을 받는 처리 경로입니다. 보안 알림에 따르면 이 파일은 bypassSameDomainCheck를 설정하고, 세션 또는 소유권 검증을 수행하지 않습니다. type=translation 분기에서 요청 본문의 response[lang] 값이 정제되지 않은 채 Ai_transcribe_responses::getVTTPaths()로 전달되고, 이 값으로 자막 파일 경로가 만들어집니다. 언어 식별자가 경로 조립 재료로 쓰이는 구조이므로, 여기에 경로 순회 문자열을 넣으면 저장 경로가 요청자의 의도대로 움직입니다.
그래서 확인해야 할 것은 코드 한 줄이 아니라 처리 순서입니다. 이 경로에 도달하려면 유효한 AI 토큰이 필요하지만, 알림은 세션이나 소유권 검증이 수행되지 않는다고 명시합니다. 쓰기가 누구의 대상에 이루어지는지 확인되지 않은 상태에서 경로가 조립되고 파일 쓰기가 실행되는 순서라는 뜻입니다.
공개 PoC·익스플로잇 분석
- 출처: 검증된 결과는 1차로 WWBN 보안 알림 GHSA-v64v-r7qm-w5x4에 기술돼 있고, CVE 레코드도 같은 쓰기 효과를 기재합니다. 이번 근거 묶음은 이 공급업체 권고에 공개 PoC가 포함돼 있음을 확인합니다. 각 자료는 웹 루트 쓰기와 다른 사용자 자막 덮어쓰기를 동일한 원인으로 묶습니다.
- 전제조건: 유효한 AI 토큰,
type=translation형태의 요청,response[lang]에 삽입된 순회 문자열, 그리고 대상*.vtt경로에 대한 웹 서버 사용자의 쓰기 권한입니다. 특히 토큰 없이 외부에게 열려 있는 취약점은 아닙니다. - 입증 범위: 근거 자료는 검증된 결과로 둘을 기재합니다. 첫째, 웹 루트에 공격자가 지정한 내용을 두는 webroot planting이 검증됐고, 검증 환경에서 생성된 파일이 HTTP로 제공된 것이 확인됐습니다. 둘째,
/tmp쓰기가 검증됐습니다. 이는 권고와 그에 딸린 PoC가 확인한 검증 환경 수준의 결과입니다. 실제 환경에서의 악용 여부와 제3자의 독립 재현은 이번 자료에서 확인할 수 없으니, 검증된 결과와 실환경 악용 확인은 따로 관리해야 할 별개 항목입니다. 제공된 인용에 PoC의 코드나 실행 절차까지 담겨 있지는 않아, 이 글에서 다룰 수 있는 범위도 그 경계까지입니다. - 운용상 의미: 공개 PoC가 권고에 포함됐다는 사실은 도달 실험의 진입 비용을 낮추는 방향으로 작용합니다. 검증 환경에서 웹 루트에 생성된 파일이 HTTP로 제공됐다는 확인은, 저장이 외부로 드러나는 지점까지 이어질 수 있음을 보여 주는 결과로 볼 수 있습니다. 다만 그 파일이 브라우저에서 어떤 형태로 해석되는지, 스크립트 실행 등 다른 동작으로 이어지는지는 자료에 없어 판단하지 않습니다.
/tmp쓰기 역시 검증되긴 했으나, 그 위치가 운영상 어떤 의미를 갖는지를 뒷받침하는 자료는 제공되지 않았습니다.
남은 한계
구분해서 봐야 할 것이 있습니다. 원인으로 지목된 것은 입력 정제와 대상 검증의 부재이고, 아래 대응 절에서 다루는 수정 방향도 같은 지점을 가리킵니다. 다만 그 방향이 코드에 반영됐는지, 영향 버전을 정리한 수정 버전이 있는지는 이번 자료에서 확인되지 않았습니다. 즉 수정 방향은 제시돼 있고 수정 배포 여부가 미확인이라는 상태로, 완화 조치 자체가 없다고 해석하는 것은 근거를 넘습니다. 실제 환경에서의 악용 여부도 확인되지 않았습니다. 검증된 탐지 지표와 제3자의 독립 재현 검증 역시 확인되지 않았습니다. 이 확인 상태들은 각각 별개이며, 하나가 다른 하나의 근거가 되지는 않습니다. 파일 쓰기가 가능한 범위는 실제 배포 환경의 웹 서버 계정 권한에 따라 달라집니다.
대응 방안
우선 점검
수정 배포 여부와 수정 버전이 이번 자료에서 확인되지 않았으므로, 당장은 노출 조건부터 확인합니다. 살펴볼 순서는 다음과 같습니다.
- AVideo 29.7.0 이하를 운영하면서 AI 기능을 사용하는지 확인한다.
receiveAsync.json.php로 향하는 요청이 외부에 열려 있는지 확인한다.- 유효한 AI 토큰을 누가 보유하고 있고, 그 범위가 어디까지 닿는지 확인한다.
도달 조건이 AI 토큰이므로 보유 범위를 파악하는 작업은, 취약 구조 자체를 이해하는 데도 필요합니다. 여기에 더해 공급업체 권고에 공개 PoC가 포함됐다는 사실은 위 세 점검의 우선순위를 올리는 쪽으로 작용합니다.
파일 관점 확인
웹 서버가 쓰기 가능한 자막 저장소와 웹 루트 영역에서 예상하지 못한 VTT 파일이 만들어지거나 기존 자막이 변경된 징후가 있는지 확인합니다. 다른 사용자의 자막이 덮어써진 정황을 살펴보는 일은 피해 범위와 직결됩니다. 이 점검은 제공된 공격 경로에 근거한 제안이며, 검증된 탐지 규칙이나 확정된 IOC는 아닙니다.
입력 검증과 토큰 통제 검토
근거가 지목하는 원인은 입력 정제와 대상 검증의 부재입니다. 같은 지점을 겨냥해 검토할 수 있는 방향은 세 갈래로 정리됩니다. 언어 입력값을 허용목록으로 검증해 경로 조립에 쓰이기 전에 걸러내는 것, 생성된 경로가 허용된 디렉터리를 벗어나지 않도록 통제하는 것, 그리고 AI 토큰의 수명을 관리하고 요청자 및 대상 영상의 소유권을 소비 시점에 확인하는 것입니다. 세션과 소유권 확인 없이 쓰기가 실행되는 구조라면, 소유권 확인을 요청 처리 안에 넣는 방향이 원인에 닿는 대응이 됩니다. 구체적인 구현 방법과 설정값은 이번 자료에 없어 제시하지 않습니다.
판단을 미뤄야 할 영역
위험 등급을 실제 사고 수준으로 올리거나 내릴 근거는 아직 없습니다. 실제 환경 악용이 확인되지 않은 점, 검증된 탐지 지표가 확인되지 않은 점, 수정 배포 여부와 수정 버전이 확인되지 않은 점은 서로 다른 조사 상태일 뿐입니다. 공급업체 권고에 공개 PoC가 포함돼 있다는 확인이 실환경 악용의 증거는 아닙니다. 수정 방향이 배포에 반영되는지, 수정 버전과 업그레이드 절차가 공지되는지를 살피면서 그 시점에 점검 범위를 다시 정리하는 순서로 계획을 두는 편이 안전합니다.
참고자료
- Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal') in WWBN/AVideo
- WWBN AVideo Path Traversal Arbitrary VTT File Write via receiveAsync.json.php
- WWBN AVideo Path Traversal Arbitrary VTT File Write via receiveAsync.json.php
함께 읽으면 좋은 글
- CVE-2026-123498: Vikunja veans 코딩 에이전트 지시문으로 들어가는 프로젝트 메타데이터
- CVE-2026-121792: GamiPress의 Gravity Forms 연동에서 발견된 SQL 인젝션
- CVE-2026-104760: weDocs 저장형 XSS, 기여자 권한이 만드는 관리자 미리보기 경로
본 콘텐츠는 AI 기술로 작성된 분석 리포트를 포함하고 있습니다. 내용 중 사실과 다르거나 보완이 필요한 정보를 발견하셨으면 댓글을 통해 의견을 부탁드립니다. 여러분의 피드백은 더 정확한 보안 정보 공유에 큰 도움이 됩니다.
댓글 (0)
댓글을 작성하려면 로그인이 필요합니다.
로그인아직 댓글이 없습니다.
첫 번째 댓글을 작성해보세요!