531 lines
19 KiB
JSON
531 lines
19 KiB
JSON
{
|
|
"dataType": "CVE_RECORD",
|
|
"dataVersion": "5.2",
|
|
"cveMetadata": {
|
|
"cveId": "CVE-2026-97054",
|
|
"assignerOrgId": "1bb62c36-49e3-4200-9d77-64a1400537cc",
|
|
"state": "PUBLISHED",
|
|
"assignerShortName": "Go",
|
|
"dateReserved": "2026-09-23T23:05:04.988Z",
|
|
"datePublished": "2026-11-11T03:13:17.877Z",
|
|
"dateUpdated": "2026-11-11T03:13:17.877Z"
|
|
},
|
|
"containers": {
|
|
"cna": {
|
|
"providerMetadata": {
|
|
"orgId": "1bb62c36-49e3-4200-9d77-64a1400537cc",
|
|
"shortName": "Go",
|
|
"dateUpdated": "2026-11-11T03:13:17.877Z"
|
|
},
|
|
"title": "HTTP/1 server crash due to MaxBytesReader header race in net/http",
|
|
"descriptions": [
|
|
{
|
|
"lang": "en",
|
|
"value": "For HTTP/1 servers, when MaxBytesReader's limit is exceeded, \"Connection: close\" header is automatically set without synchronization, which might race with another header being set explicitly in the server handler. As a result, an HTTP/1 server that utilizes MaxBytesReader or MaxBytesHandler can crash due to runtime panic if its handler reads the request body concurrently with writing the response header."
|
|
}
|
|
],
|
|
"affected": [
|
|
{
|
|
"vendor": "Go standard library",
|
|
"product": "net/http",
|
|
"collectionURL": "https://pkg.go.dev",
|
|
"packageName": "net/http",
|
|
"versions": [
|
|
{
|
|
"version": "0",
|
|
"lessThan": "1.26.11",
|
|
"status": "affected",
|
|
"versionType": "semver"
|
|
},
|
|
{
|
|
"version": "1.27.0-0",
|
|
"lessThan": "1.27.4",
|
|
"status": "affected",
|
|
"versionType": "semver"
|
|
}
|
|
],
|
|
"programRoutines": [
|
|
{
|
|
"name": "maxBytesReader.Read"
|
|
},
|
|
{
|
|
"name": "CanonicalHeaderKey"
|
|
},
|
|
{
|
|
"name": "Client.CloseIdleConnections"
|
|
},
|
|
{
|
|
"name": "Client.Do"
|
|
},
|
|
{
|
|
"name": "Client.Get"
|
|
},
|
|
{
|
|
"name": "Client.Head"
|
|
},
|
|
{
|
|
"name": "Client.Post"
|
|
},
|
|
{
|
|
"name": "Client.PostForm"
|
|
},
|
|
{
|
|
"name": "ClientConn.Close"
|
|
},
|
|
{
|
|
"name": "ClientConn.RoundTrip"
|
|
},
|
|
{
|
|
"name": "Cookie.String"
|
|
},
|
|
{
|
|
"name": "Cookie.Valid"
|
|
},
|
|
{
|
|
"name": "CrossOriginProtection.AddInsecureBypassPattern"
|
|
},
|
|
{
|
|
"name": "CrossOriginProtection.AddTrustedOrigin"
|
|
},
|
|
{
|
|
"name": "CrossOriginProtection.Check"
|
|
},
|
|
{
|
|
"name": "Dir.Open"
|
|
},
|
|
{
|
|
"name": "Error"
|
|
},
|
|
{
|
|
"name": "Get"
|
|
},
|
|
{
|
|
"name": "Handle"
|
|
},
|
|
{
|
|
"name": "HandleFunc"
|
|
},
|
|
{
|
|
"name": "HandlerFunc.ServeHTTP"
|
|
},
|
|
{
|
|
"name": "Head"
|
|
},
|
|
{
|
|
"name": "Header.Add"
|
|
},
|
|
{
|
|
"name": "Header.Del"
|
|
},
|
|
{
|
|
"name": "Header.Get"
|
|
},
|
|
{
|
|
"name": "Header.Set"
|
|
},
|
|
{
|
|
"name": "Header.Values"
|
|
},
|
|
{
|
|
"name": "Header.Write"
|
|
},
|
|
{
|
|
"name": "Header.WriteSubset"
|
|
},
|
|
{
|
|
"name": "ListenAndServe"
|
|
},
|
|
{
|
|
"name": "ListenAndServeTLS"
|
|
},
|
|
{
|
|
"name": "NewRequest"
|
|
},
|
|
{
|
|
"name": "NewRequestWithContext"
|
|
},
|
|
{
|
|
"name": "NotFound"
|
|
},
|
|
{
|
|
"name": "ParseCookie"
|
|
},
|
|
{
|
|
"name": "ParseSetCookie"
|
|
},
|
|
{
|
|
"name": "ParseTime"
|
|
},
|
|
{
|
|
"name": "Post"
|
|
},
|
|
{
|
|
"name": "PostForm"
|
|
},
|
|
{
|
|
"name": "ProxyFromEnvironment"
|
|
},
|
|
{
|
|
"name": "ReadRequest"
|
|
},
|
|
{
|
|
"name": "ReadResponse"
|
|
},
|
|
{
|
|
"name": "Redirect"
|
|
},
|
|
{
|
|
"name": "Request.AddCookie"
|
|
},
|
|
{
|
|
"name": "Request.BasicAuth"
|
|
},
|
|
{
|
|
"name": "Request.Cookie"
|
|
},
|
|
{
|
|
"name": "Request.Cookies"
|
|
},
|
|
{
|
|
"name": "Request.CookiesNamed"
|
|
},
|
|
{
|
|
"name": "Request.FormFile"
|
|
},
|
|
{
|
|
"name": "Request.FormValue"
|
|
},
|
|
{
|
|
"name": "Request.MultipartReader"
|
|
},
|
|
{
|
|
"name": "Request.ParseForm"
|
|
},
|
|
{
|
|
"name": "Request.ParseMultipartForm"
|
|
},
|
|
{
|
|
"name": "Request.PostFormValue"
|
|
},
|
|
{
|
|
"name": "Request.Referer"
|
|
},
|
|
{
|
|
"name": "Request.SetBasicAuth"
|
|
},
|
|
{
|
|
"name": "Request.UserAgent"
|
|
},
|
|
{
|
|
"name": "Request.Write"
|
|
},
|
|
{
|
|
"name": "Request.WriteProxy"
|
|
},
|
|
{
|
|
"name": "Response.Cookies"
|
|
},
|
|
{
|
|
"name": "Response.Location"
|
|
},
|
|
{
|
|
"name": "Response.Write"
|
|
},
|
|
{
|
|
"name": "ResponseController.EnableFullDuplex"
|
|
},
|
|
{
|
|
"name": "ResponseController.Flush"
|
|
},
|
|
{
|
|
"name": "ResponseController.Hijack"
|
|
},
|
|
{
|
|
"name": "ResponseController.SetReadDeadline"
|
|
},
|
|
{
|
|
"name": "ResponseController.SetWriteDeadline"
|
|
},
|
|
{
|
|
"name": "Serve"
|
|
},
|
|
{
|
|
"name": "ServeContent"
|
|
},
|
|
{
|
|
"name": "ServeFile"
|
|
},
|
|
{
|
|
"name": "ServeFileFS"
|
|
},
|
|
{
|
|
"name": "ServeMux.Handle"
|
|
},
|
|
{
|
|
"name": "ServeMux.HandleFunc"
|
|
},
|
|
{
|
|
"name": "ServeMux.ServeHTTP"
|
|
},
|
|
{
|
|
"name": "ServeTLS"
|
|
},
|
|
{
|
|
"name": "Server.Close"
|
|
},
|
|
{
|
|
"name": "Server.ListenAndServe"
|
|
},
|
|
{
|
|
"name": "Server.ListenAndServeTLS"
|
|
},
|
|
{
|
|
"name": "Server.Serve"
|
|
},
|
|
{
|
|
"name": "Server.ServeTLS"
|
|
},
|
|
{
|
|
"name": "Server.SetKeepAlivesEnabled"
|
|
},
|
|
{
|
|
"name": "Server.Shutdown"
|
|
},
|
|
{
|
|
"name": "SetCookie"
|
|
},
|
|
{
|
|
"name": "Transport.CancelRequest"
|
|
},
|
|
{
|
|
"name": "Transport.Clone"
|
|
},
|
|
{
|
|
"name": "Transport.CloseIdleConnections"
|
|
},
|
|
{
|
|
"name": "Transport.NewClientConn"
|
|
},
|
|
{
|
|
"name": "Transport.RoundTrip"
|
|
},
|
|
{
|
|
"name": "body.Close"
|
|
},
|
|
{
|
|
"name": "body.Read"
|
|
},
|
|
{
|
|
"name": "bodyEOFSignal.Close"
|
|
},
|
|
{
|
|
"name": "bodyEOFSignal.Read"
|
|
},
|
|
{
|
|
"name": "bodyLocked.Read"
|
|
},
|
|
{
|
|
"name": "bufioFlushWriter.Write"
|
|
},
|
|
{
|
|
"name": "cancelTimerBody.Close"
|
|
},
|
|
{
|
|
"name": "cancelTimerBody.Read"
|
|
},
|
|
{
|
|
"name": "checkConnErrorWriter.Write"
|
|
},
|
|
{
|
|
"name": "chunkWriter.Write"
|
|
},
|
|
{
|
|
"name": "connReader.Read"
|
|
},
|
|
{
|
|
"name": "connectMethodKey.String"
|
|
},
|
|
{
|
|
"name": "expectContinueReader.Close"
|
|
},
|
|
{
|
|
"name": "expectContinueReader.Read"
|
|
},
|
|
{
|
|
"name": "extraHeader.Write"
|
|
},
|
|
{
|
|
"name": "fileHandler.ServeHTTP"
|
|
},
|
|
{
|
|
"name": "fileTransport.RoundTrip"
|
|
},
|
|
{
|
|
"name": "globalOptionsHandler.ServeHTTP"
|
|
},
|
|
{
|
|
"name": "gzipReader.Close"
|
|
},
|
|
{
|
|
"name": "gzipReader.Read"
|
|
},
|
|
{
|
|
"name": "http1ClientConn.Close"
|
|
},
|
|
{
|
|
"name": "http1ClientConn.RoundTrip"
|
|
},
|
|
{
|
|
"name": "http2ClientConn.RoundTrip"
|
|
},
|
|
{
|
|
"name": "http2Handler.ServeHTTP"
|
|
},
|
|
{
|
|
"name": "http2ResponseWriter.Flush"
|
|
},
|
|
{
|
|
"name": "http2ResponseWriter.FlushError"
|
|
},
|
|
{
|
|
"name": "http2ResponseWriter.Push"
|
|
},
|
|
{
|
|
"name": "http2RoundTripper.RoundTrip"
|
|
},
|
|
{
|
|
"name": "http3ServerHandler.ServeHTTP"
|
|
},
|
|
{
|
|
"name": "initALPNRequest.ServeHTTP"
|
|
},
|
|
{
|
|
"name": "loggingConn.Close"
|
|
},
|
|
{
|
|
"name": "loggingConn.Read"
|
|
},
|
|
{
|
|
"name": "loggingConn.Write"
|
|
},
|
|
{
|
|
"name": "maxBytesReader.Close"
|
|
},
|
|
{
|
|
"name": "onceCloseListener.Close"
|
|
},
|
|
{
|
|
"name": "persistConn.Read"
|
|
},
|
|
{
|
|
"name": "persistConnWriter.ReadFrom"
|
|
},
|
|
{
|
|
"name": "persistConnWriter.Write"
|
|
},
|
|
{
|
|
"name": "populateResponse.Write"
|
|
},
|
|
{
|
|
"name": "populateResponse.WriteHeader"
|
|
},
|
|
{
|
|
"name": "readTrackingBody.Close"
|
|
},
|
|
{
|
|
"name": "readTrackingBody.Read"
|
|
},
|
|
{
|
|
"name": "readWriteCloserBody.CloseWrite"
|
|
},
|
|
{
|
|
"name": "readWriteCloserBody.Read"
|
|
},
|
|
{
|
|
"name": "redirectHandler.ServeHTTP"
|
|
},
|
|
{
|
|
"name": "response.Flush"
|
|
},
|
|
{
|
|
"name": "response.FlushError"
|
|
},
|
|
{
|
|
"name": "response.Hijack"
|
|
},
|
|
{
|
|
"name": "response.ReadFrom"
|
|
},
|
|
{
|
|
"name": "response.Write"
|
|
},
|
|
{
|
|
"name": "response.WriteHeader"
|
|
},
|
|
{
|
|
"name": "response.WriteString"
|
|
},
|
|
{
|
|
"name": "serverHandler.ServeHTTP"
|
|
},
|
|
{
|
|
"name": "socksDialer.DialWithConn"
|
|
},
|
|
{
|
|
"name": "socksUsernamePassword.Authenticate"
|
|
},
|
|
{
|
|
"name": "stringWriter.WriteString"
|
|
},
|
|
{
|
|
"name": "timeoutHandler.ServeHTTP"
|
|
},
|
|
{
|
|
"name": "timeoutWriter.Write"
|
|
},
|
|
{
|
|
"name": "timeoutWriter.WriteHeader"
|
|
},
|
|
{
|
|
"name": "transportReadFromServerError.Error"
|
|
},
|
|
{
|
|
"name": "unencryptedHTTP2Request.ServeHTTP"
|
|
}
|
|
],
|
|
"defaultStatus": "unaffected"
|
|
}
|
|
],
|
|
"problemTypes": [
|
|
{
|
|
"descriptions": [
|
|
{
|
|
"lang": "en",
|
|
"description": "CWE-820: Missing Synchronization"
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"references": [
|
|
{
|
|
"url": "https://go.dev/cl/862185"
|
|
},
|
|
{
|
|
"url": "https://go.dev/issue/82563"
|
|
},
|
|
{
|
|
"url": "https://groups.google.com/g/golang-announce/c/iY8TY0wWgbM"
|
|
},
|
|
{
|
|
"url": "https://pkg.go.dev/vuln/GO-2026-6859"
|
|
}
|
|
],
|
|
"credits": [
|
|
{
|
|
"lang": "en",
|
|
"value": "Jakub Ciolek (https://ciolek.dev)"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
} |