aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Paquier <michael@paquier.xyz>2023-02-06 11:20:20 +0900
committerMichael Paquier <michael@paquier.xyz>2023-02-06 11:20:20 +0900
commit715c345dd9a5594758be9a7aa41e898ead96e2a6 (patch)
tree5807fb70ce10c4e68b51bfca4620e9c1ab59b56d
parent80d43843e70aaa168d17f9a0c2ecc8c88a46b430 (diff)
downloadpostgresql-715c345dd9a5594758be9a7aa41e898ead96e2a6.tar.gz
postgresql-715c345dd9a5594758be9a7aa41e898ead96e2a6.zip
Properly NULL-terminate GSS receive buffer on error packet reception
pqsecure_open_gss() includes a code path handling error messages with v2-style protocol messages coming from the server. The client-side buffer holding the error message does not force a NULL-termination, with the data of the server getting copied to the errorMessage of the connection. Hence, it would be possible for a server to send an unterminated string and copy arbitrary bytes in the buffer receiving the error message in the client, opening the door to a crash or even data exposure. As at this stage of the authentication process the exchange has not been completed yet, this could be abused by an attacker without Kerberos credentials. Clients that have a valid kerberos cache are vulnerable as libpq opportunistically requests for it except if gssencmode is disabled. Author: Jacob Champion Backpatch-through: 12 Security: CVE-2022-41862
-rw-r--r--src/interfaces/libpq/fe-secure-gssapi.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/src/interfaces/libpq/fe-secure-gssapi.c b/src/interfaces/libpq/fe-secure-gssapi.c
index 6ea52ed866d..5f9104be328 100644
--- a/src/interfaces/libpq/fe-secure-gssapi.c
+++ b/src/interfaces/libpq/fe-secure-gssapi.c
@@ -578,6 +578,8 @@ pqsecure_open_gss(PGconn *conn)
PqGSSRecvLength += ret;
+ Assert(PqGSSRecvLength < PQ_GSS_RECV_BUFFER_SIZE);
+ PqGSSRecvBuffer[PqGSSRecvLength] = '\0';
appendPQExpBuffer(&conn->errorMessage, "%s\n", PqGSSRecvBuffer + 1);
return PGRES_POLLING_FAILED;