🇰🇷 한글 설명
Slopsmith 웹 애플리케이션의 아카이브 추출기에서 경로 탐색(Path Traversal) 취약점이 발견되었습니다. 공격자가 조작된 PSARC 또는 sloppak 파일을 제공할 경우 추출 디렉터리 외부로 임의의 파일을 작성할 수 있으며, 특히 루트 권한으로 실행되는 Docker 환경에서는 원격 코드 실행(RCE)으로 이어질 수 있습니다.
💡 쉬운 설명
압축 파일을 풀 때 파일 이름에 특수 문자를 넣어 시스템의 중요한 폴더에 몰래 파일을 저장할 수 있는 보안 약점입니다. 이를 통해 해커가 사용자의 컴퓨터나 서버를 마음대로 조종할 위험이 있습니다.
🇺🇸 원문 (English)
Slopsmith is a self-contained web application for browsing, playing, and practicing Rocksmith 2014 Custom DLC (CDLC). Prior to 0.2.9-alpha.5, a path-traversal vulnerability in Slopsmith's archive extractors allows an attacker to write arbitrary files outside the extraction directory by supplying a crafted PSARC or sloppak archive. With the default Docker configuration (running as root) and the ability to drop a file into the plugin directory, this escalates to arbitrary remote code execution on the host. Three archive extractors concatenated archive-entry filenames directly onto the extraction root without validation: `lib/psarc.py::unpack_psarc` — PSARC TOC filenames; `lib/patcher.py::unpack_psarc` — duplicate of the above in the patcher flow; `lib/sloppak.py::_unpack_zip` — bare `ZipFile.extractall()` with no member filter. Each accepts entry names containing `..` segments, absolute paths, or backslash separators. The Python `zipfile` module's default `extractall()` is documented as not preventing traversal when callers don't supply a member-filter callback. Version 0.2.9-alpha.5 patches the issue. Until updated, do not open PSARC or sloppak archives from untrusted sources, and do not expose the Slopsmith instance to the public internet. Docker users should also pull the latest image after the next slopsmith Docker image is published.
📍 영향받는 시스템
Slopsmith version 0.2.9-alpha.5 미만 버전
⚔️ 공격 벡터
조작된 PSARC 또는 sloppak 아카이브 파일을 업로드하여 경로 탐색 공격 수행
🛡️ 대응 방법
Slopsmith를 0.2.9-alpha.5 버전 이상으로 업데이트하고, 신뢰할 수 없는 아카이브 파일을 열지 않으며, Docker 이미지를 최신 버전으로 갱신하십시오.
🔧 검증 코드
출력된 버전 번호가 0.2.9-alpha.5보다 낮은지 확인하십시오.
python3 -c 'import pkg_resources; print(pkg_resources.get_distribution("slopsmith").version)' 2>/dev/null || echo 'not installed'