REDHAT-BUG-2533698: Low severity gssapi/gss-ntlmssp vulnerability
gss-ntlmssp (gssapi/gss-ntlmssp) contains a memory leak in the NTLM CHALLENGE target-info parsing on the client (initiator) path. The function ntlmdecodeavpairu16lstr() in src/ntlm.c (line 444) allocates a buffer via malloc and assigns it to str (line 464) without freeing any previous value. The caller ntlmdecodetargetinfo() (line 637) iterates over AVPAIRs in a while loop and decodes each string-valued AVPAIR (MSVAVNBCOMPUTERNAME, MSVAVNBDOMAINNAME, MSVAVDNSCOMPUTERNAME, MSVAVDNSDOMAINNAME, MSVAVDNSTREENAME, MSVAVTARGETNAME) into local variables. If a CHALLENGE message contains a duplicated string-valued AVPAIR ID, the second call overwrites the local pointer without freeing the first allocation. The done: cleanup only frees the last value held. The acceptor path (gsssecctx.c:843) passes NULL for all six string out-parameters, so the leak does not fire server-side. The initiator path is reachable via ntlmprocesstargetinfo() (src/ntlm.c:765), called from gssntlmcliauth() in src/gssauth.c:85, which passes all six string parameters non-NULL. The unguarded allocation predates the February 2023 security batch (GHSL-2023-011/012/013) and was not caught because oss-fuzz drives the acceptor entry point which never runs the string decode. By inspection, all released versions are affected. Reported by Chase Bevan-Thomas (cbev0x), independent security researcher. No upstream fix available at time of report. PSIRT Ticket: PSIRTSUPT-23614. Verified via static analysis in Kaiden sandbox.
Affected Software
Event History
Frequently Asked Questions
Which systems are exposed to this leak?
Only the NTLM initiator (client) path is affected. The acceptor/server path passes NULL for the relevant string outputs, so this leak does not occur server-side.
What must an attacker control to trigger the issue?
An attacker needs to provide an NTLM CHALLENGE message containing duplicate string-valued target-info AV_PAIR identifiers. Each duplicate can cause a prior allocation for that identifier to be overwritten without being freed.