🔍 CVE-2026-116238

8.1
CVSS Score
HIGH
2026-10-30
2026-10-30 20:17
✅ 완료

🇰🇷 한글 설명

서버 모드의 pgAdmin 4에서 여러 인증 경로(Flask-Security 자체 뷰, 대소문자 구분 우회, LDAP/Kerberos/웹서버 인증 혼용)로 인해 로그인 실패 횟수 제한과 계정 잠금이 우회될 수 있어, 인증되지 않은 공격자가 내부 계정(관리자 포함)의 비밀번호를 무제한으로 추측할 수 있습니다. 또한 이메일이 같은 서로 다른 인증 소스 계정 간 비밀번호 재설정 오적용 문제도 포함됩니다.

💡 쉬운 설명

pgAdmin 로그인 시도 횟수 제한을 우회할 수 있어 공격자가 비밀번호를 계속 시도해 관리자 계정을 털 수 있습니다. 9.19 이상 버전으로 업데이트하면 해결됩니다.

🇺🇸 원문 (English)

In server mode pgAdmin 4 locks an internal account after MAX_LOGIN_ATTEMPTS failed logins (3 by default). The limit could be bypassed, giving an unauthenticated attacker an unlimited number of password guesses against any internal account, including the administrator's, in the default configuration: - Flask-Security registers its own views next to pgAdmin's. A login submitted to its /login view was checked and logged in without pgAdmin's failed login count or lock. Its /verify view checked a signed-in user's password without limit, its /change view changed a password without pgAdmin's change password permission or re-encrypting the user's saved server passwords, and its /reset views sent and applied password resets for accounts that are not internal or are locked. - The internal account was looked up by its exact username, while the login form matches the email ignoring case, so a login with the username typed in another case was neither counted nor checked for the lock. - With LDAP or webserver authentication also configured, a wrong internal password was never counted, and with Kerberos or webserver authentication configured a guess could be answered without being counted. In addition, where accounts from different authentication sources share an email address, a password reset could be sent for, or applied to, an account from another source, and the About box showed the server configuration to a user whose email was that of an administrator's account. The fix refuses submissions to Flask-Security's own views, counts every failed internal login however the username is typed and whatever other sources are configured, no longer lets a login that posts a password fall back to an authentication source that does not check it, and locks only internal authentication. Password resets and the About box act only on the user's own internal account. Desktop mode is not affected. This issue affects pgAdmin 4: before 9.19.

📍 영향받는 시스템

pgAdmin 4 9.19 미만 버전의 서버 모드 설치 (데스크톱 모드는 영향 없음)

⚔️ 공격 벡터

인증되지 않은 원격 공격자가 Flask-Security 자체 로그인/검증/재설정 엔드포인트나 대소문자를 바꾼 사용자명을 이용해 횟수 제한 없이 비밀번호를 무차별 대입

🛡️ 대응 방법

pgAdmin 4를 9.19 이상 버전으로 업그레이드하고, 그 전까지는 서버 인터넷 노출을 차단하거나 접근을 제한

🔧 검증 코드

출력된 버전이 9.19 미만이면 취약하며 업그레이드가 필요하고, 9.19 이상이면 패치가 적용된 것입니다. 명령이 결과를 내지 않으면 pip 설치 대신 패키지 관리자나 설치 경로로 버전을 따로 확인해야 합니다.

Shell / Script
pip show pgadmin4 2>/dev/null | grep -i version

📊 CVSS Vector String

CVSS Vector
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H

💻 영향받는 소프트웨어

Log Server