CVE-2026-17347 in pgAdmin
Tóm tắt
Bởi VulDB • 31/07/2026
Cài đặt MASTER_PASSWORD_HOOK, được giới thiệu trong pgAdmin 4 phiên bản 7.2, cho phép một quản trị viên cấu hình một lệnh bên ngoài trả về khóa mã hóa theo từng người dùng, với %u trong chuỗi đã cấu hình sẽ được thay thế bằng tên của người dùng hiện tại. Cách triển khai trước đó đã chèn trực tiếp tên người dùng vào chuỗi lệnh và thực thi kết quả bằng subprocess.Popen(..., shell=True). Vì tên người dùng có thể bắt nguồn từ một nguồn xác thực bên ngoài (các claim OAuth/OIDC, Kerberos, xác thực máy chủ web) thay vì là giá trị do pgAdmin kiểm soát hoàn toàn, nên một tên người dùng chứa các ký tự đặc biệt của shell (';', '$()', dấu backtick, pipes, '&&', newline) cho phép một người dùng đã được xác thực thực thi lệnh tùy ý với tư cách là tài khoản dịch vụ pgAdmin trong bất kỳ triển khai nào mà chuỗi hook đã cấu hình sử dụng %u.
Bản sửa lỗi sẽ phân tách (tokenise) chuỗi hook do quản trị viên tin cậy và cấu hình thành một vector đối số đầu tiên (sử dụng shlex ở chế độ POSIX-quoting, với việc thoát bằng dấu gạch chéo ngược bị vô hiệu hóa để tránh việc các đường dẫn kiểu Windows bị phân tích cú pháp sai), sau đó thay thế tên người dùng không đáng tin vào từng phần tử argv riêng lẻ và thực thi với shell=False. Do đó, tên người dùng luôn được giới hạn trong một phần tử argv duy nhất; bất kỳ ký tự đặc biệt nào của shell mà nó chứa sẽ trở nên vô hiệu hóa (inert). Các quản trị viên whose MASTER_PASSWORD_HOOK trước đây dựa vào các tính năng của shell (pipes, chuyển hướng, mở rộng biến môi trường, globbing) ngay trong chuỗi hook phải di chuyển logic đó vào script được gọi thực thi, vì nó không còn được một shell diễn giải nữa.
Vấn đề này ảnh hưởng đến pgAdmin 4: từ phiên bản 7.2 trước 9.17.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.