data/reports: add GO-2024-2687

Aliases: CVE-2023-45288

Updates golang/vulndb#2687

Change-Id: Idb607a27b190e11812a63eff20f83720656a3df5
Reviewed-on: https://go-review.googlesource.com/c/vulndb/+/576216
Reviewed-by: Damien Neil <dneil@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
diff --git a/data/cve/v5/GO-2024-2687.json b/data/cve/v5/GO-2024-2687.json
new file mode 100644
index 0000000..e1082ac
--- /dev/null
+++ b/data/cve/v5/GO-2024-2687.json
@@ -0,0 +1,879 @@
+{
+  "dataType": "CVE_RECORD",
+  "dataVersion": "5.0",
+  "cveMetadata": {
+    "cveId": "CVE-2023-45288"
+  },
+  "containers": {
+    "cna": {
+      "providerMetadata": {
+        "orgId": "1bb62c36-49e3-4200-9d77-64a1400537cc"
+      },
+      "title": "HTTP/2 CONTINUATION flood in net/http",
+      "descriptions": [
+        {
+          "lang": "en",
+          "value": "An attacker may cause an HTTP/2 endpoint to read arbitrary amounts of header data by sending an excessive number of CONTINUATION frames. Maintaining HPACK state requires parsing and processing all HEADERS and CONTINUATION frames on a connection. When a request's headers exceed MaxHeaderBytes, no memory is allocated to store the excess headers, but they are still parsed. This permits an attacker to cause an HTTP/2 endpoint to read arbitrary amounts of header data, all associated with a request which is going to be rejected. These headers can include Huffman-encoded data which is significantly more expensive for the receiver to decode than for an attacker to send. The fix sets a limit on the amount of excess header frames we will process before closing a connection."
+        }
+      ],
+      "affected": [
+        {
+          "vendor": "Go standard library",
+          "product": "net/http",
+          "collectionURL": "https://pkg.go.dev",
+          "packageName": "net/http",
+          "versions": [
+            {
+              "version": "0",
+              "lessThan": "1.21.9",
+              "status": "affected",
+              "versionType": "semver"
+            },
+            {
+              "version": "1.22.0-0",
+              "lessThan": "1.22.2",
+              "status": "affected",
+              "versionType": "semver"
+            }
+          ],
+          "programRoutines": [
+            {
+              "name": "http2Framer.readMetaFrame"
+            },
+            {
+              "name": "CanonicalHeaderKey"
+            },
+            {
+              "name": "Client.CloseIdleConnections"
+            },
+            {
+              "name": "Client.Do"
+            },
+            {
+              "name": "Client.Get"
+            },
+            {
+              "name": "Client.Head"
+            },
+            {
+              "name": "Client.Post"
+            },
+            {
+              "name": "Client.PostForm"
+            },
+            {
+              "name": "Cookie.String"
+            },
+            {
+              "name": "Cookie.Valid"
+            },
+            {
+              "name": "Dir.Open"
+            },
+            {
+              "name": "Error"
+            },
+            {
+              "name": "Get"
+            },
+            {
+              "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": "ParseTime"
+            },
+            {
+              "name": "Post"
+            },
+            {
+              "name": "PostForm"
+            },
+            {
+              "name": "ProxyFromEnvironment"
+            },
+            {
+              "name": "ReadRequest"
+            },
+            {
+              "name": "ReadResponse"
+            },
+            {
+              "name": "Redirect"
+            },
+            {
+              "name": "Request.AddCookie"
+            },
+            {
+              "name": "Request.BasicAuth"
+            },
+            {
+              "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": "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.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": "http2ClientConn.Close"
+            },
+            {
+              "name": "http2ClientConn.Ping"
+            },
+            {
+              "name": "http2ClientConn.RoundTrip"
+            },
+            {
+              "name": "http2ClientConn.Shutdown"
+            },
+            {
+              "name": "http2ConnectionError.Error"
+            },
+            {
+              "name": "http2ErrCode.String"
+            },
+            {
+              "name": "http2FrameHeader.String"
+            },
+            {
+              "name": "http2FrameType.String"
+            },
+            {
+              "name": "http2FrameWriteRequest.String"
+            },
+            {
+              "name": "http2Framer.ReadFrame"
+            },
+            {
+              "name": "http2Framer.WriteContinuation"
+            },
+            {
+              "name": "http2Framer.WriteData"
+            },
+            {
+              "name": "http2Framer.WriteDataPadded"
+            },
+            {
+              "name": "http2Framer.WriteGoAway"
+            },
+            {
+              "name": "http2Framer.WriteHeaders"
+            },
+            {
+              "name": "http2Framer.WritePing"
+            },
+            {
+              "name": "http2Framer.WritePriority"
+            },
+            {
+              "name": "http2Framer.WritePushPromise"
+            },
+            {
+              "name": "http2Framer.WriteRSTStream"
+            },
+            {
+              "name": "http2Framer.WriteRawFrame"
+            },
+            {
+              "name": "http2Framer.WriteSettings"
+            },
+            {
+              "name": "http2Framer.WriteSettingsAck"
+            },
+            {
+              "name": "http2Framer.WriteWindowUpdate"
+            },
+            {
+              "name": "http2GoAwayError.Error"
+            },
+            {
+              "name": "http2Server.ServeConn"
+            },
+            {
+              "name": "http2Setting.String"
+            },
+            {
+              "name": "http2SettingID.String"
+            },
+            {
+              "name": "http2SettingsFrame.ForeachSetting"
+            },
+            {
+              "name": "http2StreamError.Error"
+            },
+            {
+              "name": "http2Transport.CloseIdleConnections"
+            },
+            {
+              "name": "http2Transport.NewClientConn"
+            },
+            {
+              "name": "http2Transport.RoundTrip"
+            },
+            {
+              "name": "http2Transport.RoundTripOpt"
+            },
+            {
+              "name": "http2bufferedWriter.Flush"
+            },
+            {
+              "name": "http2bufferedWriter.Write"
+            },
+            {
+              "name": "http2chunkWriter.Write"
+            },
+            {
+              "name": "http2clientConnPool.GetClientConn"
+            },
+            {
+              "name": "http2connError.Error"
+            },
+            {
+              "name": "http2dataBuffer.Read"
+            },
+            {
+              "name": "http2duplicatePseudoHeaderError.Error"
+            },
+            {
+              "name": "http2gzipReader.Close"
+            },
+            {
+              "name": "http2gzipReader.Read"
+            },
+            {
+              "name": "http2headerFieldNameError.Error"
+            },
+            {
+              "name": "http2headerFieldValueError.Error"
+            },
+            {
+              "name": "http2noDialClientConnPool.GetClientConn"
+            },
+            {
+              "name": "http2noDialH2RoundTripper.RoundTrip"
+            },
+            {
+              "name": "http2pipe.Read"
+            },
+            {
+              "name": "http2priorityWriteScheduler.CloseStream"
+            },
+            {
+              "name": "http2priorityWriteScheduler.OpenStream"
+            },
+            {
+              "name": "http2pseudoHeaderError.Error"
+            },
+            {
+              "name": "http2requestBody.Close"
+            },
+            {
+              "name": "http2requestBody.Read"
+            },
+            {
+              "name": "http2responseWriter.Flush"
+            },
+            {
+              "name": "http2responseWriter.FlushError"
+            },
+            {
+              "name": "http2responseWriter.Push"
+            },
+            {
+              "name": "http2responseWriter.SetReadDeadline"
+            },
+            {
+              "name": "http2responseWriter.SetWriteDeadline"
+            },
+            {
+              "name": "http2responseWriter.Write"
+            },
+            {
+              "name": "http2responseWriter.WriteHeader"
+            },
+            {
+              "name": "http2responseWriter.WriteString"
+            },
+            {
+              "name": "http2roundRobinWriteScheduler.OpenStream"
+            },
+            {
+              "name": "http2serverConn.CloseConn"
+            },
+            {
+              "name": "http2serverConn.Flush"
+            },
+            {
+              "name": "http2stickyErrWriter.Write"
+            },
+            {
+              "name": "http2transportResponseBody.Close"
+            },
+            {
+              "name": "http2transportResponseBody.Read"
+            },
+            {
+              "name": "http2writeData.String"
+            },
+            {
+              "name": "initALPNRequest.ServeHTTP"
+            },
+            {
+              "name": "loggingConn.Close"
+            },
+            {
+              "name": "loggingConn.Read"
+            },
+            {
+              "name": "loggingConn.Write"
+            },
+            {
+              "name": "maxBytesReader.Close"
+            },
+            {
+              "name": "maxBytesReader.Read"
+            },
+            {
+              "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.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"
+            }
+          ],
+          "defaultStatus": "unaffected"
+        },
+        {
+          "vendor": "golang.org/x/net",
+          "product": "golang.org/x/net/http2",
+          "collectionURL": "https://pkg.go.dev",
+          "packageName": "golang.org/x/net/http2",
+          "versions": [
+            {
+              "version": "0",
+              "lessThan": "0.23.0",
+              "status": "affected",
+              "versionType": "semver"
+            }
+          ],
+          "programRoutines": [
+            {
+              "name": "Framer.readMetaFrame"
+            },
+            {
+              "name": "ClientConn.Close"
+            },
+            {
+              "name": "ClientConn.Ping"
+            },
+            {
+              "name": "ClientConn.RoundTrip"
+            },
+            {
+              "name": "ClientConn.Shutdown"
+            },
+            {
+              "name": "ConfigureServer"
+            },
+            {
+              "name": "ConfigureTransport"
+            },
+            {
+              "name": "ConfigureTransports"
+            },
+            {
+              "name": "ConnectionError.Error"
+            },
+            {
+              "name": "ErrCode.String"
+            },
+            {
+              "name": "FrameHeader.String"
+            },
+            {
+              "name": "FrameType.String"
+            },
+            {
+              "name": "FrameWriteRequest.String"
+            },
+            {
+              "name": "Framer.ReadFrame"
+            },
+            {
+              "name": "Framer.WriteContinuation"
+            },
+            {
+              "name": "Framer.WriteData"
+            },
+            {
+              "name": "Framer.WriteDataPadded"
+            },
+            {
+              "name": "Framer.WriteGoAway"
+            },
+            {
+              "name": "Framer.WriteHeaders"
+            },
+            {
+              "name": "Framer.WritePing"
+            },
+            {
+              "name": "Framer.WritePriority"
+            },
+            {
+              "name": "Framer.WritePushPromise"
+            },
+            {
+              "name": "Framer.WriteRSTStream"
+            },
+            {
+              "name": "Framer.WriteRawFrame"
+            },
+            {
+              "name": "Framer.WriteSettings"
+            },
+            {
+              "name": "Framer.WriteSettingsAck"
+            },
+            {
+              "name": "Framer.WriteWindowUpdate"
+            },
+            {
+              "name": "GoAwayError.Error"
+            },
+            {
+              "name": "ReadFrameHeader"
+            },
+            {
+              "name": "Server.ServeConn"
+            },
+            {
+              "name": "Setting.String"
+            },
+            {
+              "name": "SettingID.String"
+            },
+            {
+              "name": "SettingsFrame.ForeachSetting"
+            },
+            {
+              "name": "StreamError.Error"
+            },
+            {
+              "name": "Transport.CloseIdleConnections"
+            },
+            {
+              "name": "Transport.NewClientConn"
+            },
+            {
+              "name": "Transport.RoundTrip"
+            },
+            {
+              "name": "Transport.RoundTripOpt"
+            },
+            {
+              "name": "bufferedWriter.Flush"
+            },
+            {
+              "name": "bufferedWriter.Write"
+            },
+            {
+              "name": "chunkWriter.Write"
+            },
+            {
+              "name": "clientConnPool.GetClientConn"
+            },
+            {
+              "name": "connError.Error"
+            },
+            {
+              "name": "dataBuffer.Read"
+            },
+            {
+              "name": "duplicatePseudoHeaderError.Error"
+            },
+            {
+              "name": "gzipReader.Close"
+            },
+            {
+              "name": "gzipReader.Read"
+            },
+            {
+              "name": "headerFieldNameError.Error"
+            },
+            {
+              "name": "headerFieldValueError.Error"
+            },
+            {
+              "name": "noDialClientConnPool.GetClientConn"
+            },
+            {
+              "name": "noDialH2RoundTripper.RoundTrip"
+            },
+            {
+              "name": "pipe.Read"
+            },
+            {
+              "name": "priorityWriteScheduler.CloseStream"
+            },
+            {
+              "name": "priorityWriteScheduler.OpenStream"
+            },
+            {
+              "name": "pseudoHeaderError.Error"
+            },
+            {
+              "name": "requestBody.Close"
+            },
+            {
+              "name": "requestBody.Read"
+            },
+            {
+              "name": "responseWriter.Flush"
+            },
+            {
+              "name": "responseWriter.FlushError"
+            },
+            {
+              "name": "responseWriter.Push"
+            },
+            {
+              "name": "responseWriter.SetReadDeadline"
+            },
+            {
+              "name": "responseWriter.SetWriteDeadline"
+            },
+            {
+              "name": "responseWriter.Write"
+            },
+            {
+              "name": "responseWriter.WriteHeader"
+            },
+            {
+              "name": "responseWriter.WriteString"
+            },
+            {
+              "name": "roundRobinWriteScheduler.OpenStream"
+            },
+            {
+              "name": "serverConn.CloseConn"
+            },
+            {
+              "name": "serverConn.Flush"
+            },
+            {
+              "name": "stickyErrWriter.Write"
+            },
+            {
+              "name": "transportResponseBody.Close"
+            },
+            {
+              "name": "transportResponseBody.Read"
+            },
+            {
+              "name": "writeData.String"
+            }
+          ],
+          "defaultStatus": "unaffected"
+        }
+      ],
+      "problemTypes": [
+        {
+          "descriptions": [
+            {
+              "lang": "en",
+              "description": "CWE-400: Uncontrolled Resource Consumption"
+            }
+          ]
+        }
+      ],
+      "references": [
+        {
+          "url": "https://go.dev/issue/65051"
+        },
+        {
+          "url": "https://go.dev/cl/576155"
+        },
+        {
+          "url": "https://groups.google.com/g/golang-announce/c/YgW0sx8mN3M"
+        },
+        {
+          "url": "https://pkg.go.dev/vuln/GO-2024-2687"
+        }
+      ],
+      "credits": [
+        {
+          "lang": "en",
+          "value": "Bartek Nowotarski (https://nowotarski.info/)"
+        }
+      ]
+    }
+  }
+}
\ No newline at end of file
diff --git a/data/osv/GO-2024-2687.json b/data/osv/GO-2024-2687.json
new file mode 100644
index 0000000..145ba00
--- /dev/null
+++ b/data/osv/GO-2024-2687.json
@@ -0,0 +1,359 @@
+{
+  "schema_version": "1.3.1",
+  "id": "GO-2024-2687",
+  "modified": "0001-01-01T00:00:00Z",
+  "published": "0001-01-01T00:00:00Z",
+  "aliases": [
+    "CVE-2023-45288"
+  ],
+  "summary": "HTTP/2 CONTINUATION flood in net/http",
+  "details": "An attacker may cause an HTTP/2 endpoint to read arbitrary amounts of header data by sending an excessive number of CONTINUATION frames.\n\nMaintaining HPACK state requires parsing and processing all HEADERS and CONTINUATION frames on a connection. When a request's headers exceed MaxHeaderBytes, no memory is allocated to store the excess headers, but they are still parsed.\n\nThis permits an attacker to cause an HTTP/2 endpoint to read arbitrary amounts of header data, all associated with a request which is going to be rejected. These headers can include Huffman-encoded data which is significantly more expensive for the receiver to decode than for an attacker to send.\n\nThe fix sets a limit on the amount of excess header frames we will process before closing a connection.",
+  "affected": [
+    {
+      "package": {
+        "name": "stdlib",
+        "ecosystem": "Go"
+      },
+      "ranges": [
+        {
+          "type": "SEMVER",
+          "events": [
+            {
+              "introduced": "0"
+            },
+            {
+              "fixed": "1.21.9"
+            },
+            {
+              "introduced": "1.22.0-0"
+            },
+            {
+              "fixed": "1.22.2"
+            }
+          ]
+        }
+      ],
+      "ecosystem_specific": {
+        "imports": [
+          {
+            "path": "net/http",
+            "symbols": [
+              "CanonicalHeaderKey",
+              "Client.CloseIdleConnections",
+              "Client.Do",
+              "Client.Get",
+              "Client.Head",
+              "Client.Post",
+              "Client.PostForm",
+              "Cookie.String",
+              "Cookie.Valid",
+              "Dir.Open",
+              "Error",
+              "Get",
+              "HandlerFunc.ServeHTTP",
+              "Head",
+              "Header.Add",
+              "Header.Del",
+              "Header.Get",
+              "Header.Set",
+              "Header.Values",
+              "Header.Write",
+              "Header.WriteSubset",
+              "ListenAndServe",
+              "ListenAndServeTLS",
+              "NewRequest",
+              "NewRequestWithContext",
+              "NotFound",
+              "ParseTime",
+              "Post",
+              "PostForm",
+              "ProxyFromEnvironment",
+              "ReadRequest",
+              "ReadResponse",
+              "Redirect",
+              "Request.AddCookie",
+              "Request.BasicAuth",
+              "Request.FormFile",
+              "Request.FormValue",
+              "Request.MultipartReader",
+              "Request.ParseForm",
+              "Request.ParseMultipartForm",
+              "Request.PostFormValue",
+              "Request.Referer",
+              "Request.SetBasicAuth",
+              "Request.UserAgent",
+              "Request.Write",
+              "Request.WriteProxy",
+              "Response.Cookies",
+              "Response.Location",
+              "Response.Write",
+              "ResponseController.EnableFullDuplex",
+              "ResponseController.Flush",
+              "ResponseController.Hijack",
+              "ResponseController.SetReadDeadline",
+              "ResponseController.SetWriteDeadline",
+              "Serve",
+              "ServeContent",
+              "ServeFile",
+              "ServeMux.ServeHTTP",
+              "ServeTLS",
+              "Server.Close",
+              "Server.ListenAndServe",
+              "Server.ListenAndServeTLS",
+              "Server.Serve",
+              "Server.ServeTLS",
+              "Server.SetKeepAlivesEnabled",
+              "Server.Shutdown",
+              "SetCookie",
+              "Transport.CancelRequest",
+              "Transport.Clone",
+              "Transport.CloseIdleConnections",
+              "Transport.RoundTrip",
+              "body.Close",
+              "body.Read",
+              "bodyEOFSignal.Close",
+              "bodyEOFSignal.Read",
+              "bodyLocked.Read",
+              "bufioFlushWriter.Write",
+              "cancelTimerBody.Close",
+              "cancelTimerBody.Read",
+              "checkConnErrorWriter.Write",
+              "chunkWriter.Write",
+              "connReader.Read",
+              "connectMethodKey.String",
+              "expectContinueReader.Close",
+              "expectContinueReader.Read",
+              "extraHeader.Write",
+              "fileHandler.ServeHTTP",
+              "fileTransport.RoundTrip",
+              "globalOptionsHandler.ServeHTTP",
+              "gzipReader.Close",
+              "gzipReader.Read",
+              "http2ClientConn.Close",
+              "http2ClientConn.Ping",
+              "http2ClientConn.RoundTrip",
+              "http2ClientConn.Shutdown",
+              "http2ConnectionError.Error",
+              "http2ErrCode.String",
+              "http2FrameHeader.String",
+              "http2FrameType.String",
+              "http2FrameWriteRequest.String",
+              "http2Framer.ReadFrame",
+              "http2Framer.WriteContinuation",
+              "http2Framer.WriteData",
+              "http2Framer.WriteDataPadded",
+              "http2Framer.WriteGoAway",
+              "http2Framer.WriteHeaders",
+              "http2Framer.WritePing",
+              "http2Framer.WritePriority",
+              "http2Framer.WritePushPromise",
+              "http2Framer.WriteRSTStream",
+              "http2Framer.WriteRawFrame",
+              "http2Framer.WriteSettings",
+              "http2Framer.WriteSettingsAck",
+              "http2Framer.WriteWindowUpdate",
+              "http2Framer.readMetaFrame",
+              "http2GoAwayError.Error",
+              "http2Server.ServeConn",
+              "http2Setting.String",
+              "http2SettingID.String",
+              "http2SettingsFrame.ForeachSetting",
+              "http2StreamError.Error",
+              "http2Transport.CloseIdleConnections",
+              "http2Transport.NewClientConn",
+              "http2Transport.RoundTrip",
+              "http2Transport.RoundTripOpt",
+              "http2bufferedWriter.Flush",
+              "http2bufferedWriter.Write",
+              "http2chunkWriter.Write",
+              "http2clientConnPool.GetClientConn",
+              "http2connError.Error",
+              "http2dataBuffer.Read",
+              "http2duplicatePseudoHeaderError.Error",
+              "http2gzipReader.Close",
+              "http2gzipReader.Read",
+              "http2headerFieldNameError.Error",
+              "http2headerFieldValueError.Error",
+              "http2noDialClientConnPool.GetClientConn",
+              "http2noDialH2RoundTripper.RoundTrip",
+              "http2pipe.Read",
+              "http2priorityWriteScheduler.CloseStream",
+              "http2priorityWriteScheduler.OpenStream",
+              "http2pseudoHeaderError.Error",
+              "http2requestBody.Close",
+              "http2requestBody.Read",
+              "http2responseWriter.Flush",
+              "http2responseWriter.FlushError",
+              "http2responseWriter.Push",
+              "http2responseWriter.SetReadDeadline",
+              "http2responseWriter.SetWriteDeadline",
+              "http2responseWriter.Write",
+              "http2responseWriter.WriteHeader",
+              "http2responseWriter.WriteString",
+              "http2roundRobinWriteScheduler.OpenStream",
+              "http2serverConn.CloseConn",
+              "http2serverConn.Flush",
+              "http2stickyErrWriter.Write",
+              "http2transportResponseBody.Close",
+              "http2transportResponseBody.Read",
+              "http2writeData.String",
+              "initALPNRequest.ServeHTTP",
+              "loggingConn.Close",
+              "loggingConn.Read",
+              "loggingConn.Write",
+              "maxBytesReader.Close",
+              "maxBytesReader.Read",
+              "onceCloseListener.Close",
+              "persistConn.Read",
+              "persistConnWriter.ReadFrom",
+              "persistConnWriter.Write",
+              "populateResponse.Write",
+              "populateResponse.WriteHeader",
+              "readTrackingBody.Close",
+              "readTrackingBody.Read",
+              "readWriteCloserBody.Read",
+              "redirectHandler.ServeHTTP",
+              "response.Flush",
+              "response.FlushError",
+              "response.Hijack",
+              "response.ReadFrom",
+              "response.Write",
+              "response.WriteHeader",
+              "response.WriteString",
+              "serverHandler.ServeHTTP",
+              "socksDialer.DialWithConn",
+              "socksUsernamePassword.Authenticate",
+              "stringWriter.WriteString",
+              "timeoutHandler.ServeHTTP",
+              "timeoutWriter.Write",
+              "timeoutWriter.WriteHeader",
+              "transportReadFromServerError.Error"
+            ]
+          }
+        ]
+      }
+    },
+    {
+      "package": {
+        "name": "golang.org/x/net",
+        "ecosystem": "Go"
+      },
+      "ranges": [
+        {
+          "type": "SEMVER",
+          "events": [
+            {
+              "introduced": "0"
+            },
+            {
+              "fixed": "0.23.0"
+            }
+          ]
+        }
+      ],
+      "ecosystem_specific": {
+        "imports": [
+          {
+            "path": "golang.org/x/net/http2",
+            "symbols": [
+              "ClientConn.Close",
+              "ClientConn.Ping",
+              "ClientConn.RoundTrip",
+              "ClientConn.Shutdown",
+              "ConfigureServer",
+              "ConfigureTransport",
+              "ConfigureTransports",
+              "ConnectionError.Error",
+              "ErrCode.String",
+              "FrameHeader.String",
+              "FrameType.String",
+              "FrameWriteRequest.String",
+              "Framer.ReadFrame",
+              "Framer.WriteContinuation",
+              "Framer.WriteData",
+              "Framer.WriteDataPadded",
+              "Framer.WriteGoAway",
+              "Framer.WriteHeaders",
+              "Framer.WritePing",
+              "Framer.WritePriority",
+              "Framer.WritePushPromise",
+              "Framer.WriteRSTStream",
+              "Framer.WriteRawFrame",
+              "Framer.WriteSettings",
+              "Framer.WriteSettingsAck",
+              "Framer.WriteWindowUpdate",
+              "Framer.readMetaFrame",
+              "GoAwayError.Error",
+              "ReadFrameHeader",
+              "Server.ServeConn",
+              "Setting.String",
+              "SettingID.String",
+              "SettingsFrame.ForeachSetting",
+              "StreamError.Error",
+              "Transport.CloseIdleConnections",
+              "Transport.NewClientConn",
+              "Transport.RoundTrip",
+              "Transport.RoundTripOpt",
+              "bufferedWriter.Flush",
+              "bufferedWriter.Write",
+              "chunkWriter.Write",
+              "clientConnPool.GetClientConn",
+              "connError.Error",
+              "dataBuffer.Read",
+              "duplicatePseudoHeaderError.Error",
+              "gzipReader.Close",
+              "gzipReader.Read",
+              "headerFieldNameError.Error",
+              "headerFieldValueError.Error",
+              "noDialClientConnPool.GetClientConn",
+              "noDialH2RoundTripper.RoundTrip",
+              "pipe.Read",
+              "priorityWriteScheduler.CloseStream",
+              "priorityWriteScheduler.OpenStream",
+              "pseudoHeaderError.Error",
+              "requestBody.Close",
+              "requestBody.Read",
+              "responseWriter.Flush",
+              "responseWriter.FlushError",
+              "responseWriter.Push",
+              "responseWriter.SetReadDeadline",
+              "responseWriter.SetWriteDeadline",
+              "responseWriter.Write",
+              "responseWriter.WriteHeader",
+              "responseWriter.WriteString",
+              "roundRobinWriteScheduler.OpenStream",
+              "serverConn.CloseConn",
+              "serverConn.Flush",
+              "stickyErrWriter.Write",
+              "transportResponseBody.Close",
+              "transportResponseBody.Read",
+              "writeData.String"
+            ]
+          }
+        ]
+      }
+    }
+  ],
+  "references": [
+    {
+      "type": "REPORT",
+      "url": "https://go.dev/issue/65051"
+    },
+    {
+      "type": "FIX",
+      "url": "https://go.dev/cl/576155"
+    },
+    {
+      "type": "WEB",
+      "url": "https://groups.google.com/g/golang-announce/c/YgW0sx8mN3M"
+    }
+  ],
+  "credits": [
+    {
+      "name": "Bartek Nowotarski (https://nowotarski.info/)"
+    }
+  ],
+  "database_specific": {
+    "url": "https://pkg.go.dev/vuln/GO-2024-2687"
+  }
+}
\ No newline at end of file
diff --git a/data/reports/GO-2024-2687.yaml b/data/reports/GO-2024-2687.yaml
new file mode 100644
index 0000000..52c1db9
--- /dev/null
+++ b/data/reports/GO-2024-2687.yaml
@@ -0,0 +1,308 @@
+id: GO-2024-2687
+modules:
+    - module: std
+      versions:
+        - fixed: 1.21.9
+        - introduced: 1.22.0-0
+          fixed: 1.22.2
+      vulnerable_at: 1.22.1
+      packages:
+        - package: net/http
+          symbols:
+            - http2Framer.readMetaFrame
+          derived_symbols:
+            - CanonicalHeaderKey
+            - Client.CloseIdleConnections
+            - Client.Do
+            - Client.Get
+            - Client.Head
+            - Client.Post
+            - Client.PostForm
+            - Cookie.String
+            - Cookie.Valid
+            - Dir.Open
+            - Error
+            - Get
+            - HandlerFunc.ServeHTTP
+            - Head
+            - Header.Add
+            - Header.Del
+            - Header.Get
+            - Header.Set
+            - Header.Values
+            - Header.Write
+            - Header.WriteSubset
+            - ListenAndServe
+            - ListenAndServeTLS
+            - NewRequest
+            - NewRequestWithContext
+            - NotFound
+            - ParseTime
+            - Post
+            - PostForm
+            - ProxyFromEnvironment
+            - ReadRequest
+            - ReadResponse
+            - Redirect
+            - Request.AddCookie
+            - Request.BasicAuth
+            - Request.FormFile
+            - Request.FormValue
+            - Request.MultipartReader
+            - Request.ParseForm
+            - Request.ParseMultipartForm
+            - Request.PostFormValue
+            - Request.Referer
+            - Request.SetBasicAuth
+            - Request.UserAgent
+            - Request.Write
+            - Request.WriteProxy
+            - Response.Cookies
+            - Response.Location
+            - Response.Write
+            - ResponseController.EnableFullDuplex
+            - ResponseController.Flush
+            - ResponseController.Hijack
+            - ResponseController.SetReadDeadline
+            - ResponseController.SetWriteDeadline
+            - Serve
+            - ServeContent
+            - ServeFile
+            - ServeMux.ServeHTTP
+            - ServeTLS
+            - Server.Close
+            - Server.ListenAndServe
+            - Server.ListenAndServeTLS
+            - Server.Serve
+            - Server.ServeTLS
+            - Server.SetKeepAlivesEnabled
+            - Server.Shutdown
+            - SetCookie
+            - Transport.CancelRequest
+            - Transport.Clone
+            - Transport.CloseIdleConnections
+            - Transport.RoundTrip
+            - body.Close
+            - body.Read
+            - bodyEOFSignal.Close
+            - bodyEOFSignal.Read
+            - bodyLocked.Read
+            - bufioFlushWriter.Write
+            - cancelTimerBody.Close
+            - cancelTimerBody.Read
+            - checkConnErrorWriter.Write
+            - chunkWriter.Write
+            - connReader.Read
+            - connectMethodKey.String
+            - expectContinueReader.Close
+            - expectContinueReader.Read
+            - extraHeader.Write
+            - fileHandler.ServeHTTP
+            - fileTransport.RoundTrip
+            - globalOptionsHandler.ServeHTTP
+            - gzipReader.Close
+            - gzipReader.Read
+            - http2ClientConn.Close
+            - http2ClientConn.Ping
+            - http2ClientConn.RoundTrip
+            - http2ClientConn.Shutdown
+            - http2ConnectionError.Error
+            - http2ErrCode.String
+            - http2FrameHeader.String
+            - http2FrameType.String
+            - http2FrameWriteRequest.String
+            - http2Framer.ReadFrame
+            - http2Framer.WriteContinuation
+            - http2Framer.WriteData
+            - http2Framer.WriteDataPadded
+            - http2Framer.WriteGoAway
+            - http2Framer.WriteHeaders
+            - http2Framer.WritePing
+            - http2Framer.WritePriority
+            - http2Framer.WritePushPromise
+            - http2Framer.WriteRSTStream
+            - http2Framer.WriteRawFrame
+            - http2Framer.WriteSettings
+            - http2Framer.WriteSettingsAck
+            - http2Framer.WriteWindowUpdate
+            - http2GoAwayError.Error
+            - http2Server.ServeConn
+            - http2Setting.String
+            - http2SettingID.String
+            - http2SettingsFrame.ForeachSetting
+            - http2StreamError.Error
+            - http2Transport.CloseIdleConnections
+            - http2Transport.NewClientConn
+            - http2Transport.RoundTrip
+            - http2Transport.RoundTripOpt
+            - http2bufferedWriter.Flush
+            - http2bufferedWriter.Write
+            - http2chunkWriter.Write
+            - http2clientConnPool.GetClientConn
+            - http2connError.Error
+            - http2dataBuffer.Read
+            - http2duplicatePseudoHeaderError.Error
+            - http2gzipReader.Close
+            - http2gzipReader.Read
+            - http2headerFieldNameError.Error
+            - http2headerFieldValueError.Error
+            - http2noDialClientConnPool.GetClientConn
+            - http2noDialH2RoundTripper.RoundTrip
+            - http2pipe.Read
+            - http2priorityWriteScheduler.CloseStream
+            - http2priorityWriteScheduler.OpenStream
+            - http2pseudoHeaderError.Error
+            - http2requestBody.Close
+            - http2requestBody.Read
+            - http2responseWriter.Flush
+            - http2responseWriter.FlushError
+            - http2responseWriter.Push
+            - http2responseWriter.SetReadDeadline
+            - http2responseWriter.SetWriteDeadline
+            - http2responseWriter.Write
+            - http2responseWriter.WriteHeader
+            - http2responseWriter.WriteString
+            - http2roundRobinWriteScheduler.OpenStream
+            - http2serverConn.CloseConn
+            - http2serverConn.Flush
+            - http2stickyErrWriter.Write
+            - http2transportResponseBody.Close
+            - http2transportResponseBody.Read
+            - http2writeData.String
+            - initALPNRequest.ServeHTTP
+            - loggingConn.Close
+            - loggingConn.Read
+            - loggingConn.Write
+            - maxBytesReader.Close
+            - maxBytesReader.Read
+            - onceCloseListener.Close
+            - persistConn.Read
+            - persistConnWriter.ReadFrom
+            - persistConnWriter.Write
+            - populateResponse.Write
+            - populateResponse.WriteHeader
+            - readTrackingBody.Close
+            - readTrackingBody.Read
+            - readWriteCloserBody.Read
+            - redirectHandler.ServeHTTP
+            - response.Flush
+            - response.FlushError
+            - response.Hijack
+            - response.ReadFrom
+            - response.Write
+            - response.WriteHeader
+            - response.WriteString
+            - serverHandler.ServeHTTP
+            - socksDialer.DialWithConn
+            - socksUsernamePassword.Authenticate
+            - stringWriter.WriteString
+            - timeoutHandler.ServeHTTP
+            - timeoutWriter.Write
+            - timeoutWriter.WriteHeader
+            - transportReadFromServerError.Error
+    - module: golang.org/x/net
+      versions:
+        - fixed: 0.23.0
+      vulnerable_at: 0.22.0
+      packages:
+        - package: golang.org/x/net/http2
+          symbols:
+            - Framer.readMetaFrame
+          derived_symbols:
+            - ClientConn.Close
+            - ClientConn.Ping
+            - ClientConn.RoundTrip
+            - ClientConn.Shutdown
+            - ConfigureServer
+            - ConfigureTransport
+            - ConfigureTransports
+            - ConnectionError.Error
+            - ErrCode.String
+            - FrameHeader.String
+            - FrameType.String
+            - FrameWriteRequest.String
+            - Framer.ReadFrame
+            - Framer.WriteContinuation
+            - Framer.WriteData
+            - Framer.WriteDataPadded
+            - Framer.WriteGoAway
+            - Framer.WriteHeaders
+            - Framer.WritePing
+            - Framer.WritePriority
+            - Framer.WritePushPromise
+            - Framer.WriteRSTStream
+            - Framer.WriteRawFrame
+            - Framer.WriteSettings
+            - Framer.WriteSettingsAck
+            - Framer.WriteWindowUpdate
+            - GoAwayError.Error
+            - ReadFrameHeader
+            - Server.ServeConn
+            - Setting.String
+            - SettingID.String
+            - SettingsFrame.ForeachSetting
+            - StreamError.Error
+            - Transport.CloseIdleConnections
+            - Transport.NewClientConn
+            - Transport.RoundTrip
+            - Transport.RoundTripOpt
+            - bufferedWriter.Flush
+            - bufferedWriter.Write
+            - chunkWriter.Write
+            - clientConnPool.GetClientConn
+            - connError.Error
+            - dataBuffer.Read
+            - duplicatePseudoHeaderError.Error
+            - gzipReader.Close
+            - gzipReader.Read
+            - headerFieldNameError.Error
+            - headerFieldValueError.Error
+            - noDialClientConnPool.GetClientConn
+            - noDialH2RoundTripper.RoundTrip
+            - pipe.Read
+            - priorityWriteScheduler.CloseStream
+            - priorityWriteScheduler.OpenStream
+            - pseudoHeaderError.Error
+            - requestBody.Close
+            - requestBody.Read
+            - responseWriter.Flush
+            - responseWriter.FlushError
+            - responseWriter.Push
+            - responseWriter.SetReadDeadline
+            - responseWriter.SetWriteDeadline
+            - responseWriter.Write
+            - responseWriter.WriteHeader
+            - responseWriter.WriteString
+            - roundRobinWriteScheduler.OpenStream
+            - serverConn.CloseConn
+            - serverConn.Flush
+            - stickyErrWriter.Write
+            - transportResponseBody.Close
+            - transportResponseBody.Read
+            - writeData.String
+summary: HTTP/2 CONTINUATION flood in net/http
+description: |-
+    An attacker may cause an HTTP/2 endpoint to read arbitrary amounts of header
+    data by sending an excessive number of CONTINUATION frames.
+
+    Maintaining HPACK state requires parsing and processing all HEADERS and
+    CONTINUATION frames on a connection. When a request's headers exceed
+    MaxHeaderBytes, no memory is allocated to store the excess headers, but they are
+    still parsed.
+
+    This permits an attacker to cause an HTTP/2 endpoint to read arbitrary amounts
+    of header data, all associated with a request which is going to be rejected.
+    These headers can include Huffman-encoded data which is significantly more
+    expensive for the receiver to decode than for an attacker to send.
+
+    The fix sets a limit on the amount of excess header frames we will process
+    before closing a connection.
+credits:
+    - Bartek Nowotarski (https://nowotarski.info/)
+references:
+    - report: https://go.dev/issue/65051
+    - fix: https://go.dev/cl/576155
+    - web: https://groups.google.com/g/golang-announce/c/YgW0sx8mN3M
+cve_metadata:
+    id: CVE-2023-45288
+    cwe: 'CWE-400: Uncontrolled Resource Consumption'