🇰🇷 한글 설명
Jellystat 1.1.10 이전 버전의 API 엔드포인트(/api/getUserDetails, /api/getLibrary)에서 요청 데이터가 SQL 쿼리에 직접 삽입되는 SQL injection 취약점이 있습니다. 인증된 사용자는 이를 악용하여 관리자 자격증명, Jellyfin API 키 등 데이터베이스 전체에 접근할 수 있으며, node-postgres의 simple query protocol 특성상 stacked queries로 PostgreSQL 호스트에서 임의의 명령 실행(RCE)까지 가능합니다.
💡 쉬운 설명
Jellystat 앱에서 로그인한 사용자가 조작된 요청을 보내 데이터베이스의 모든 민감한 정보에 접근할 수 있는 결함입니다. 더 나아가 공격자가 서버를 완전히 장악할 수도 있습니다.
🇺🇸 원문 (English)
Jellystat is a free and open source Statistics App for Jellyfin. Prior to version 1.1.10, multiple API endpoints in Jellystat build SQL queries by interpolating unsanitized request-body fields directly into raw SQL strings. An authenticated user can inject arbitrary SQL via `POST /api/getUserDetails` and `POST /api/getLibrary`, enabling full read of any table in the database - including `app_config`, which stores the Jellystat admin credentials, the Jellyfin API key, and the Jellyfin host URL. Because the vulnerable call site dispatches via `node-postgres`'s simple query protocol (no parameter array is passed), stacked queries are allowed, which escalates the injection from data disclosure to arbitrary command execution on the PostgreSQL host via `COPY ... TO PROGRAM`. Under the role shipped by the project's `docker-compose.yml` (a PostgreSQL superuser), no additional privileges are required to reach the RCE primitive. Version 1.1.10 contains a fix.
📍 영향받는 시스템
Jellystat < 1.1.10
⚔️ 공격 벡터
인증된 사용자가 POST /api/getUserDetails 또는 /api/getLibrary에 SQL injection 페이로드를 포함한 요청 전송
🛡️ 대응 방법
Jellystat를 1.1.10 이상으로 즉시 업데이트
🔧 검증 코드
버전이 1.1.10 이상이면 패치됨, 1.1.10 미만이면 취약
npm list jellystat 2>/dev/null | grep jellystat || cat package.json | grep -A 1 '"jellystat"'