CVE-2026-86863 in pgAdmin
Sumário
de VulDB • 17/09/2026
A fonte de autenticação do servidor web do pgAdmin 4 foi projetada para aceitar uma identidade afirmada pelo próprio servidor web ou proxy reverso localizado à frente do pgAdmin, transmitida através do ambiente WSGI/CGI. A função `WebserverAuthentication.get_user()` lia a configuração `config.WEBSERVER_REMOTE_USER` de `request.environ`; quando isso retornava nada, ela recorria à leitura do mesmo nome diretamente dos cabeçalhos HTTP da solicitação entrante por meio de `request.headers.get()`. Um cabeçalho HTTP entrante é escrito por quem envia a solicitação; portanto, qualquer cliente capaz de alcançar o pgAdmin poderia fornecer esse cabeçalho ele próprio e ser autenticado como qualquer nome de usuário que especificasse, incluindo um Administrador existente, sem apresentar uma senha ou quaisquer outras credenciais. A pesquisa no ambiente também poderia ser satisfeita por um cabeçalho fornecido pelo cliente sempre que `WEBSERVER_REMOTE_USER` estivesse configurado para um nome com prefixo HTTP_ ou hifenizado, como `HTTP_X_FORWARDED_USER` ou `X-Forwarded-User`, já que os servidores WSGI colocam os cabeçalhos entrantes no ambiente exatamente sob esses nomes. As implantações são afetadas apenas quando 'webserver' está habilitado em `AUTHENTICATION_SOURCES`.
A correção distingue uma variável CGI/WSGI genuína de uma derivada de cabeçalho e confia implicitamente apenas na primeira. Uma identidade afirmada por um cabeçalho agora é aceita somente quando o operador opta explicitamente por isso através de `WEBSERVER_REMOTE_USER_FROM_HEADER`, a solicitação chega de um peer listado em `WEBSERVER_TRUSTED_PROXIES` e, quando configurado, um segredo compartilhado fornecido no cabeçalho `WEBSERVER_SHARED_SECRET_HEADER` corresponde ao valor de `WEBSERVER_SHARED_SECRET` sob uma comparação constante (constant-time). A verificação do peer confiável lê deliberadamente o endereço real do socket peer em vez de `request.remote_addr`, porque o ProxyFix reescreve este último a partir do cabeçalho controlado pelo cliente `X-Forwarded-For` e, caso contrário, permitiria que um atacante afirmasse ser o proxy confiável. Como defesa em profundidade (defense in depth), `login()` agora recusa qualquer conta cuja `auth_source` não seja 'webserver', de modo que uma porta de confiança mal configurada não possa ser usada para assumir uma conta interna ou LDAP.
Este problema afeta pgAdmin 4: da versão 6.2 até antes da 9.18.
If you want to get best quality of vulnerability data, you may have to visit VulDB.