CVE-2026-17349 in pgAdmin
요약
\~에 의해 VulDB • 2026. 07. 31.
pgAdmin 4의 9.0에서 도입된 Workspaces 기능의 일부인 /misc/workspace/adhoc_connect_server는 기존 서버의 ID를 전달받으면 Server.clone()을 통해 해당 서버를 복제합니다. 이 과정은 소스 행(source row)의 모든 열(column), 즉 user_id, shared, shared_username 및 저장된 자격 증명 필드(password, save_password, tunnel_password)까지 복사합니다. 비소유자가 다른 사용자(실제로는 일반적으로 관리자)가 공유한 서버에 대해 adhoc 연결을 트리거하면, 복제본은 해당 사용자의 소유권, 공유 플래그(shared flag), 그리고 저장된 데이터베이스 자격 증명을 그대로 상속받습니다. pgAdmin은 연결 시도조차 이루어지기 전에 이 크로스-텐트(cross-tenant) 상태의 자격 증명 포함 서버 행을 영구 저장하므로, 이후 연결이 실패하더라도 해당 행은 유지됩니다. 비소유자는 이렇게 새로 생성된 소유권 복제본을 열 수 있으며, pgAdmin은 비소유자를 대신하여 소스 사용자의 저장된 데이터베이스 비밀번호를 사용하여 연결합니다. 이를 통해 비소여자가 본래 자신에게 부여되지 않은 데이터베이스 자격 증명과 그에 따른 모든 데이터베이스 권한에 접근할 수 있게 됩니다.
해결책에서는 호출하는 사용자(calling user)가 adhoc 레코드의 소유권 필드(user_id, shared, shared_username)와 저장된 자격 증명 필드(password, save_password, tunnel_password)를 소유하도록 강제하고, 커밋(committing) 전에 이를 지우거나 비공개 상태로 설정합니다. 이는 소스 서버의 소유권, 공유 상태 또는 저장된 자격 증명과 무관하게 적용됩니다. 회귀 테스트(regression test)는 비소유자가 다른 사용자의 공유 서버에 대해 adhoc 연결을 트리거할 때, 호출하는 사용자가 소유하고, 공유되지 않으며, 소스의 저장된 자격 증명을 포함하지 않는 행이 영구 저장됨을 확인합니다.
본 이슈는 pgAdmin 4의 9.0부터 9.17 미만 버전에서 영향을 받습니다.
If you want to get best quality of vulnerability data, you may have to visit VulDB.