{"id":"CVE-2026-100408","aliases":["AZL-112738","EUVD-2026-116937","GHSA-5j7x-r6vf-jhq2","UBUNTU-CVE-2026-100408"],"status":"published","title":"Git for Windows: git-credential-wincred Erase Path Heap Overflow","description":"Git for Windows is the Windows port of Git. From 2.43.0.windows.1 until 2.55.0.windows.3, when a matching git:* credential exists in Windows Credential Manager and a git-credential-wincred erase input includes a password field, the operation in contrib/credential/wincred/git-credential-wincred.c allocates a buffer of exactly CredentialBlobSize bytes in match_cred_password() and then uses wcsncpy_s() to copy the corresponding number of wide characters plus a terminating NUL. The destination capacity is also supplied in bytes instead of WCHAR elements, allowing a fixed two-byte NUL write past the allocation before the password comparison determines whether CredDeleteW() should remove the credential; erase without a password field does not enter this comparison path. The helper can terminate with Windows heap-corruption status, and git credential reject can appear successful while the rejected credential remains stored. This issue is fixed in version 2.55.0.windows.3.","severity":{"version":"3.1","score":4.4,"vector":"CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:N/I:L/A:L","level":"medium","assessor":"cna","from":"cve"},"epss":{"day":"2026-11-12","score":0.00117,"percentile":0.01667,"model":"v2026.06.15"},"facts":{"in_kev":false,"known_exploited":false,"public_exploit":false,"fix_available":false},"cwes":["CWE-787"],"published":"2026-11-04T00:00:00Z","modified":"2026-11-09T16:21:10Z","affected":[{"source":"osv","ecosystem":"Azure Linux:3","package":"git","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"last_affected":"2.45.4-3"}]}]},{"source":"osv","ecosystem":"Ubuntu:Pro:16.04:LTS","package":"git","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["1:2.5.0-1","1:2.6.2-1","1:2.6.3-1","1:2.6.4-1","1:2.7.0~rc3-1","1:2.7.0-1","1:2.7.3-0ubuntu1","1:2.7.4-0ubuntu1","1:2.7.4-0ubuntu1.1","1:2.7.4-0ubuntu1.2","1:2.7.4-0ubuntu1.3","1:2.7.4-0ubuntu1.4","1:2.7.4-0ubuntu1.5","1:2.7.4-0ubuntu1.6","1:2.7.4-0ubuntu1.7","1:2.7.4-0ubuntu1.8","1:2.7.4-0ubuntu1.9","1:2.7.4-0ubuntu1.10","1:2.7.4-0ubuntu1.10+esm1","1:2.7.4-0ubuntu1.10+esm3","1:2.7.4-0ubuntu1.10+esm4","1:2.7.4-0ubuntu1.10+esm5","1:2.7.4-0ubuntu1.10+esm6","1:2.7.4-0ubuntu1.10+esm7","1:2.7.4-0ubuntu1.10+esm8","1:2.7.4-0ubuntu1.10+esm9","1:2.7.4-0ubuntu1.10+esm10","1:2.7.4-0ubuntu1.10+esm11","1:2.7.4-0ubuntu1.10+esm13"]},{"source":"osv","ecosystem":"Ubuntu:Pro:18.04:LTS","package":"git","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["1:2.14.1-1ubuntu4","1:2.15.1-1ubuntu2","1:2.17.0-1ubuntu1","1:2.17.1-1ubuntu0.1","1:2.17.1-1ubuntu0.3","1:2.17.1-1ubuntu0.4","1:2.17.1-1ubuntu0.5","1:2.17.1-1ubuntu0.6","1:2.17.1-1ubuntu0.7","1:2.17.1-1ubuntu0.8","1:2.17.1-1ubuntu0.9","1:2.17.1-1ubuntu0.10","1:2.17.1-1ubuntu0.11","1:2.17.1-1ubuntu0.12","1:2.17.1-1ubuntu0.13","1:2.17.1-1ubuntu0.14","1:2.17.1-1ubuntu0.15","1:2.17.1-1ubuntu0.16","1:2.17.1-1ubuntu0.17","1:2.17.1-1ubuntu0.18","1:2.17.1-1ubuntu0.18+esm1","1:2.17.1-1ubuntu0.18+esm2","1:2.17.1-1ubuntu0.18+esm3","1:2.17.1-1ubuntu0.18+esm4","1:2.17.1-1ubuntu0.18+esm6","1:2.17.1-1ubuntu0.18+esm8"]},{"source":"osv","ecosystem":"Ubuntu:Pro:20.04:LTS","package":"git","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["1:2.20.1-2ubuntu1","1:2.24.0-1ubuntu1","1:2.24.0-1ubuntu2","1:2.25.0-1ubuntu1","1:2.25.1-1ubuntu1","1:2.25.1-1ubuntu2","1:2.25.1-1ubuntu3","1:2.25.1-1ubuntu3.1","1:2.25.1-1ubuntu3.2","1:2.25.1-1ubuntu3.3","1:2.25.1-1ubuntu3.4","1:2.25.1-1ubuntu3.5","1:2.25.1-1ubuntu3.6","1:2.25.1-1ubuntu3.7","1:2.25.1-1ubuntu3.8","1:2.25.1-1ubuntu3.10","1:2.25.1-1ubuntu3.11","1:2.25.1-1ubuntu3.12","1:2.25.1-1ubuntu3.13","1:2.25.1-1ubuntu3.14","1:2.25.1-1ubuntu3.14+esm1","1:2.25.1-1ubuntu3.14+esm2","1:2.25.1-1ubuntu3.14+esm3","1:2.25.1-1ubuntu3.14+esm4","1:2.25.1-1ubuntu3.14+esm5","1:2.25.1-1ubuntu3.14+esm6"]},{"source":"osv","ecosystem":"Ubuntu:22.04:LTS","package":"git","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["1:2.32.0-1ubuntu1","1:2.33.1-1ubuntu1","1:2.34.1-1ubuntu1","1:2.34.1-1ubuntu1.1","1:2.34.1-1ubuntu1.2","1:2.34.1-1ubuntu1.4","1:2.34.1-1ubuntu1.5","1:2.34.1-1ubuntu1.6","1:2.34.1-1ubuntu1.8","1:2.34.1-1ubuntu1.9","1:2.34.1-1ubuntu1.10","1:2.34.1-1ubuntu1.11","1:2.34.1-1ubuntu1.12","1:2.34.1-1ubuntu1.13","1:2.34.1-1ubuntu1.14","1:2.34.1-1ubuntu1.15","1:2.34.1-1ubuntu1.16","1:2.34.1-1ubuntu1.17","1:2.34.1-1ubuntu1.18"]},{"source":"osv","ecosystem":"Ubuntu:24.04:LTS","package":"git","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["1:2.40.1-1ubuntu1","1:2.43.0-1ubuntu1","1:2.43.0-1ubuntu5","1:2.43.0-1ubuntu6","1:2.43.0-1ubuntu7","1:2.43.0-1ubuntu7.1","1:2.43.0-1ubuntu7.2","1:2.43.0-1ubuntu7.3","1:2.43.0-1ubuntu7.4"]},{"source":"osv","ecosystem":"Ubuntu:26.10","package":"git","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["1:2.53.0-1ubuntu1","1:2.55.0-1ubuntu1","1:2.55.0-1ubuntu1.1"]},{"source":"osv","ecosystem":"Ubuntu:26.04:LTS","package":"git","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["1:2.51.0-1ubuntu1","1:2.53.0-1ubuntu1","1:2.53.0-1ubuntu1.1"]}],"products":[{"vendor":"git-for-windows","product":"git"}],"references":[{"url":"https://github.com/git-for-windows/git/security/advisories/GHSA-5j7x-r6vf-jhq2","tags":["x_refsource_CONFIRM","exploit","advisory"]},{"url":"https://github.com/git-for-windows/git/commit/b4d1fb62c7e2fdcab5a018e25e51acb196eb1756","tags":["x_refsource_MISC","fix"]},{"url":"https://github.com/git-for-windows/git/releases/tag/v2.55.0.windows.3","tags":["x_refsource_MISC","web"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-100408","tags":["web","advisory"]},{"url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/100xxx/CVE-2026-100408.json","tags":["advisory"]},{"url":"https://ubuntu.com/security/CVE-2026-100408","tags":["report"]},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-100408","tags":["report"]}],"sources":{"cve":[{"id":"CVE-2026-100408","title":"Git for Windows: git-credential-wincred Erase Path Heap Overflow","description":"Git for Windows is the Windows port of Git. From 2.43.0.windows.1 until 2.55.0.windows.3, when a matching git:* credential exists in Windows Credential Manager and a git-credential-wincred erase input includes a password field, the operation in contrib/credential/wincred/git-credential-wincred.c allocates a buffer of exactly CredentialBlobSize bytes in match_cred_password() and then uses wcsncpy_s() to copy the corresponding number of wide characters plus a terminating NUL. The destination capacity is also supplied in bytes instead of WCHAR elements, allowing a fixed two-byte NUL write past the allocation before the password comparison determines whether CredDeleteW() should remove the credential; erase without a password field does not enter this comparison path. The helper can terminate with Windows heap-corruption status, and git credential reject can appear successful while the rejected credential remains stored. This issue is fixed in version 2.55.0.windows.3.","status":"published","published":"2026-11-04T15:12:10.794Z","modified":"2026-11-09T16:21:10.425Z","cvss":[{"version":"3.1","score":4.4,"vector":"CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:N/I:L/A:L","level":"medium","assessor":"cna"}],"cwes":["CWE-787"],"updated_at":"2026-11-09T17:34:05.130069Z"}],"euvd":[{"id":"EUVD-2026-116937","description":"Git for Windows is the Windows port of Git. From 2.43.0.windows.1 until 2.55.0.windows.3, when a matching git:* credential exists in Windows Credential Manager and a git-credential-wincred erase input includes a password field, the operation in contrib/credential/wincred/git-credential-wincred.c allocates a buffer of exactly CredentialBlobSize bytes in match_cred_password() and then uses wcsncpy_s() to copy the corresponding number of wide characters plus a terminating NUL. The destination capacity is also supplied in bytes instead of WCHAR elements, allowing a fixed two-byte NUL write past the allocation before the password comparison determines whether CredDeleteW() should remove the credential; erase without a password field does not enter this comparison path. The helper can terminate with Windows heap-corruption status, and git credential reject can appear successful while the rejected credential remains stored. This issue is fixed in version 2.55.0.windows.3.","status":"published","published":"2026-11-04T15:12:10Z","modified":"2026-11-09T16:21:10Z","cvss":[{"version":"3.1","score":4.4,"vector":"CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:N/I:L/A:L","level":"medium"}],"updated_at":"2026-11-09T17:17:30.806151Z"}],"nvd":[{"id":"CVE-2026-100408","description":"Git for Windows is the Windows port of Git. From 2.43.0.windows.1 until 2.55.0.windows.3, when a matching git:* credential exists in Windows Credential Manager and a git-credential-wincred erase input includes a password field, the operation in contrib/credential/wincred/git-credential-wincred.c allocates a buffer of exactly CredentialBlobSize bytes in match_cred_password() and then uses wcsncpy_s() to copy the corresponding number of wide characters plus a terminating NUL. The destination capacity is also supplied in bytes instead of WCHAR elements, allowing a fixed two-byte NUL write past the allocation before the password comparison determines whether CredDeleteW() should remove the credential; erase without a password field does not enter this comparison path. The helper can terminate with Windows heap-corruption status, and git credential reject can appear successful while the rejected credential remains stored. This issue is fixed in version 2.55.0.windows.3.","status":"published","published":"2026-11-04T15:17:21.997Z","modified":"2026-11-09T17:17:05.05Z","cvss":[{"version":"3.1","score":4.4,"vector":"CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:N/I:L/A:L","level":"medium","assessor":"secondary"}],"cwes":["CWE-787"],"updated_at":"2026-11-09T20:15:34.048597Z"}],"osv":[{"id":"CVE-2026-100408","title":"Git for Windows: git-credential-wincred Erase Path Heap Overflow","description":"Git for Windows is the Windows port of Git. From 2.43.0.windows.1 until 2.55.0.windows.3, when a matching git:* credential exists in Windows Credential Manager and a git-credential-wincred erase input includes a password field, the operation in contrib/credential/wincred/git-credential-wincred.c allocates a buffer of exactly CredentialBlobSize bytes in match_cred_password() and then uses wcsncpy_s() to copy the corresponding number of wide characters plus a terminating NUL. The destination capacity is also supplied in bytes instead of WCHAR elements, allowing a fixed two-byte NUL write past the allocation before the password comparison determines whether CredDeleteW() should remove the credential; erase without a password field does not enter this comparison path. The helper can terminate with Windows heap-corruption status, and git credential reject can appear successful while the rejected credential remains stored. This issue is fixed in version 2.55.0.windows.3.","status":"published","published":"2026-11-04T15:12:10.794Z","modified":"2026-11-11T07:22:33.842959508Z","cvss":[{"version":"3.1","score":4.4,"vector":"CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:N/I:L/A:L","level":"medium"}],"cwes":["CWE-787"],"updated_at":"2026-11-10T02:45:42.584685Z"},{"id":"UBUNTU-CVE-2026-100408","description":"Git for Windows is the Windows port of Git. From 2.43.0.windows.1 until 2.55.0.windows.3, when a matching git:* credential exists in Windows Credential Manager and a git-credential-wincred erase input includes a password field, the operation in contrib/credential/wincred/git-credential-wincred.c allocates a buffer of exactly CredentialBlobSize bytes in match_cred_password() and then uses wcsncpy_s() to copy the corresponding number of wide characters plus a terminating NUL. The destination capacity is also supplied in bytes instead of WCHAR elements, allowing a fixed two-byte NUL write past the allocation before the password comparison determines whether CredDeleteW() should remove the credential; erase without a password field does not enter this comparison path. The helper can terminate with Windows heap-corruption status, and git credential reject can appear successful while the rejected credential remains stored. This issue is fixed in version 2.55.0.windows.3.","status":"published","published":"2026-11-04T00:00:00Z","modified":"2026-11-06T01:00:16.653441163Z","cvss":[{"version":"3.1","score":4.4,"vector":"CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:N/I:L/A:L","level":"medium"},{"version":"3.1","score":4.4,"vector":"CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:N/I:L/A:L","level":"medium"}],"updated_at":"2026-11-06T01:33:11.614208Z"},{"id":"AZL-112738","title":"CVE-2026-100408 affecting package git 2.45.4-3","description":"Git for Windows is the Windows port of Git. From 2.43.0.windows.1 until 2.55.0.windows.3, when a matching git:* credential exists in Windows Credential Manager and a git-credential-wincred erase input includes a password field, the operation in contrib/credential/wincred/git-credential-wincred.c allocates a buffer of exactly CredentialBlobSize bytes in match_cred_password() and then uses wcsncpy_s() to copy the corresponding number of wide characters plus a terminating NUL. The destination capacity is also supplied in bytes instead of WCHAR elements, allowing a fixed two-byte NUL write past the allocation before the password comparison determines whether CredDeleteW() should remove the credential; erase without a password field does not enter this comparison path. The helper can terminate with Windows heap-corruption status, and git credential reject can appear successful while the rejected credential remains stored. This issue is fixed in version 2.55.0.windows.3.","status":"published","published":"2026-11-04T15:17:21Z","modified":"2026-11-07T14:16:25.792224088Z","updated_at":"2026-11-07T14:48:25.680996Z"}]}}
