ssh: fix custom ssh heap buffer overflow

The `ssh_custom_free()` function calls `strlen()` on the `publickey` 
field, which stores binary data, not a null-terminated string. This 
causes a heap buffer overflow when the public key data is not 
null-terminated or contains embedded null bytes.

The `publickey` field stores binary data, as required by the underlying 
`libssh2_userauth_publickey()` function, which accepts a public key 
parameter of the type `const unsigned char*`. 

Use the stored `publickey_len` instead of `strlen()` to determine the 
correct buffer size.
This commit is contained in:
bakersdozen123
2025-10-11 09:56:48 -07:00
committed by GitHub
parent 58d9363f02
commit 4277cc75bc

View File

@@ -161,7 +161,7 @@ static void ssh_custom_free(struct git_credential *cred)
if (c->publickey) {
/* Zero the memory which previously held the publickey */
size_t key_len = strlen(c->publickey);
size_t key_len = c->publickey_len;
git__memzero(c->publickey, key_len);
git__free(c->publickey);
}