CVE-2026-80104은 AI 애플리케이션 프레임워크 DB-GPT의 9.8점 경로 탐색 및 임의 파일 쓰기 취약점으로, 이를 수정한 버전이 v0.8.1이라고 명시한다. 이는 정확하지만 위험할 정도로 불완전하다. v0.8.1은 수정 사항을 포함한 유일한 공개 버전이다.
무엇을 확인했고, 어떻게 확인했나
가드는 _validate_upload_filename라는 함수로, 2026년 5월 21일에 추가됐다. 이 함수는 널 바이트, POSIX 및 Windows의 절대 경로, 그리고 하나를 초과하는 경로 구성 요소를 포함한 파일명을 거부한다. 우리는 v0.8.1 태그와 v0.8.2 태그에서 관련 소스 파일을 가져와 비교했다. v0.8.1에는 이 함수가 존재한다. 반면 오늘 아침 공개된 v0.8.2에는 이 함수가 사라져 있었고, 핸들러는 filename = file.filename를 직접 읽은 뒤 업로드 디렉터리와 결합해 바이트를 기록한다. 정규화도, 포함 여부 검사도 없다.
수정 사항은 어떻게 사라졌나
이 손실은 수정이 적용되기 전에 잘린 기능 브랜치에서 비롯됐다. 그 브랜치가 6월에 병합되면서, 5월 21일보다 앞선 시점의 해당 파일 버전이 패치된 파일을 덮어썼다. 의도적으로 되돌린 것은 아니었다. 단지 같은 함수의 더 오래된 복사본이 가드를 덮어써 버렸을 뿐이며, 그래서 변경 로그에도 기록이 남지 않았다.
통상적 해석이 놓치는 점
어드바이저리의 "patched version" 항목은 보통 "이 버전과 그 이후 모두"로 읽힌다. 스캐너도 그렇게 가정하고, 의존성 봇도 그렇게 처리하며, 운영자도 그렇게 결론 내린다. 그러나 여기서 그 항목은 하한선이 아니라 한 점이다. 어드바이저리를 읽고 최신 릴리스로 업그레이드한 팀은 정확히 반대로 행동해, 자신은 조치가 끝났다고 믿은 채 취약한 코드를 배치하게 된다. 어드바이저리가 틀린 것은 아니다. 다만 성립하지 않는 가정으로 읽히고 있을 뿐이다.
인증 문제는 이를 더 악화시킨다
업로드 경로의 유일한 의존성은 소스에 "Mock User Info"라고 주석 처리된 함수다. 이 함수는 어떤 사용자 헤더가 전달되든 전달되지 않든 role="admin"인 사용자 객체를 반환한다. 두 분기 모두 관리자로 처리된다. 이는 더 이상 사용되지 않는 태그가 아니라 현재 공개된 코드이므로, 파일 쓰기 원시는 인증 없이도 도달 가능하다.
