🇰🇷 한글 설명
Postiz는 로그인한 사용자가 연결된 채널에서 백엔드 함수를 실행하도록 요청할 수 있으나, 백엔드가 요청 가능한 함수를 제한하지 않아 웹에 노출되지 않아야 할 내부 헬퍼 함수를 사용자가 호출할 수 있습니다. 이를 통해 서버 파일 읽기(환경변수 및 시크릿 노출)와 단일 요청으로 백엔드 프로세스를 종료하는 것이 가능하며, 회원가입이 기본 개방되어 있어 기존 계정 없이도 공격이 가능합니다.
💡 쉬운 설명
웹 서비스의 내부 기능이 일반 사용자에게 잘못 열려 있어, 누구나 가입만 하면 서버의 중요한 설정 파일과 비밀 정보를 훔쳐보거나 서버를 멈출 수 있습니다. 로그인 세션 서명 키와 데이터베이스 접속 정보 등이 노출될 수 있어 매우 위험합니다.
🇺🇸 원문 (English)
Postiz lets a signed-in user ask the backend to run a function on one of their connected channels. The backend did not restrict which functions can be requested, so a user could call internal helper functions that were never meant to be reachable from the web interface.
One of those helpers reads a file from the server's disk. A user who connects a channel whose stored token is a file path can have the backend return the contents of any file it can read, including its environment, which holds the secret used to sign login sessions, the database address and the credentials of connected services. Another helper makes the backend process exit with a single request. Self-registration is open by default, so no existing account and no action by another user is needed.
📍 영향받는 시스템
Postiz (취약 버전은 공식 패치 공지 및 릴리스 노트를 확인 필요)
⚔️ 공격 벡터
공개 회원가입으로 계정 생성 후 파일 경로를 토큰으로 가진 채널을 연결하고 내부 함수 호출 요청을 보내 임의 파일 읽기 및 프로세스 종료 실행
🛡️ 대응 방법
Postiz를 최신 보안 패치 버전으로 업그레이드하고, 회원가입을 비활성화하거나 제한하며, 노출된 시크릿과 자격증명을 즉시 교체
🔧 검증 코드
Postiz 컨테이너 또는 설치 디렉터리가 확인되면 해당 이미지 태그나 버전을 공식 릴리스 노트의 패치 버전과 비교하여 취약 여부를 판단하며, 결과가 없으면 Postiz가 설치되지 않은 것입니다.
docker ps --format '{{.Image}}' | grep -i postiz 2>/dev/null || ls /opt /var/www 2>/dev/null | grep -i postiz