🇰🇷 한글 설명
Pingvin Share X 1.5.0부터 1.18.0 버전에서 TOTP 설정 관리 시 비밀번호 검증 우회가 가능한 취약점입니다. authTotp.service.ts와 auth.service.ts에서 비동기 verifyPassword 및 authenticateUser 호출에 await 키워드가 누락되어, 검증 실패 시에도 ForbiddenException이 발생하지 않습니다. 1.18.1 버전에서 수정되었습니다.
💡 쉬운 설명
비밀번호가 틀려도 시스템이 이를 확인하지 못해 통과시키는 문제입니다. 공격자가 다른 사용자의 2단계 인증 설정을 임의로 변경할 수 있습니다.
🇺🇸 원문 (English)
Pingvin Share X is a secure and easy self-hosted file sharing platform. A vulnerability in versions 1.5.0 through 1.18.0 allow an attacker to bypass password verification when managing Time-based One-Time Password (TOTP) settings. The root cause is a missing `await` keyword on calls to the asynchronous `verifyPassword` method in `authTotp.service.ts` and the `authenticateUser` method in `auth.service.ts`. In JavaScript, an unawaited `Promise` is always truthy. So the logic intended to throw a `ForbiddenException` when a password is incorrect. It never executes because the expression evaluates the existence of the `Promise` object rather than its resolved boolean result. The vulnerability is fixed in version 1.18.1 by ensuring all asynchronous authentication calls are properly awaited. There are no official workarounds. If a user is locked out, an administrator must manually reset the user's TOTP status in the database.
📍 영향받는 시스템
Pingvin Share X 1.5.0 ~ 1.18.0 (수정 버전: 1.18.1)
⚔️ 공격 벡터
잘못된 비밀번호로 TOTP 설정 관리 기능을 호출하여 인증을 우회하고 대상 계정의 TOTP 설정을 변경
🛡️ 대응 방법
Pingvin Share X를 1.18.1 이상으로 업그레이드하고, 잠긴 사용자는 관리자가 데이터베이스에서 TOTP 상태를 직접 초기화
🔧 검증 코드
출력된 버전이 1.5.0~1.18.0 범위에 해당하면 취약하며, 1.18.1 이상이면 패치된 것입니다.
docker inspect --format='{{index .Config.Labels "org.opencontainers.image.version"}}' pingvin-share 2>/dev/null || grep -rE '"version"' package.json