🇰🇷 한글 설명
AVideo 8.1.0 이전 버전에서 인증되지 않은 설치 엔드포인트(install/checkConfiguration.php)가 요청 파라미터를 이스케이프 없이 PHP 문자열에 삽입하여 videos/configuration.php를 생성합니다. 공격자는 이를 이용해 웹 서버 권한으로 임의의 PHP 코드를 실행할 수 있으며, 설정 파일이 없는 신규 설치 환경에서 특히 위험합니다. 추가로 SQL 인젝션 취약점도 함께 존재합니다.
💡 쉬운 설명
영상 공유 플랫폼 AVideo의 설치 기능에 보안 결함이 있어, 로그인 없이도 공격자가 서버에서 명령을 실행할 수 있습니다. 설정 파일이 없는 새로 설치된 서버가 특히 위험합니다.
🇺🇸 원문 (English)
AVideo is a video-sharing Platform. Prior to 8.1.0, the unauthenticated installer endpoint `install/checkConfiguration.php` assembles `videos/configuration.php` by interpolating request parameters, including `webSiteRootURL`, into single-quoted PHP string literals without escaping. An attacker can terminate a literal and inject PHP that executes as the web-server user when the generated, directly requestable file is loaded. Exploitation requires `videos/configuration.php` to be absent, as on every fresh deployment or after the file is removed or moved; an existing file blocks this endpoint. The supplied `systemRootPath` must contain index.php and a connection using `databaseHost`, `databaseUser`, and `databasePass` must succeed, but the attacker can point those parameters to their own database server and needs no target credentials. The write location is also derived from `systemRootPath` without a base-directory constraint. This permits arbitrary command execution, reading and overwriting files owned by the web-server user, persistent PHP code, and control over stored database connection settings. The endpoint additionally interpolates request values into streamer and configuration INSERT statements, creating a secondary SQL-injection sink. This issue is fixed in version 8.1.0.
📍 영향받는 시스템
AVideo 8.1.0 미만 버전 (설정 파일 videos/configuration.php가 없는 설치 환경 포함)
⚔️ 공격 벡터
인증 없이 install/checkConfiguration.php에 조작된 webSiteRootURL 등 파라미터를 전송해 PHP 코드를 주입하고 생성된 파일을 실행
🛡️ 대응 방법
AVideo를 8.1.0 이상으로 업그레이드하고, 설치 완료 후 install 디렉터리 접근을 차단하거나 삭제
🔧 검증 코드
출력된 버전 번호가 8.1.0 미만이면 취약하며, 버전 정보가 나오지 않으면 웹 루트 경로를 실제 설치 위치로 수정해 확인하고, install 디렉터리 존재 여부도 함께 점검해야 합니다.
test -f /var/www/html/videos/configuration.php && grep -q 'webSiteRootURL' /var/www/html/version.php 2>/dev/null; grep -rhoE "AVideo.*[0-9]+\.[0-9]+(\.[0-9]+)?" /var/www/html/version.php /var/www/html/README.md 2>/dev/null | head -n 1