CVE-2026-59248 (GCVE-0-2026-59248)

Vulnerability from cvelistv5 – Published: 2026-07-28 09:54 – Updated: 2026-07-29 04:18
VLAI
Title
Unbounded HPACK/QPACK prefixed-integer decoding in Cowlib causes memory-exhaustion DoS
Summary
Allocation of resources without limits vulnerability in ninenines cowlib allows an unauthenticated remote HTTP/2 or HTTP/3 peer to exhaust memory on the vulnerable server (or client) and cause a denial of service. The HPACK and QPACK prefixed-integer decoder cow_hpack_common:dec_big_int/3 in src/cow_hpack_common.hrl (invoked from cow_hpack:decode/2 in src/cow_hpack.erl and from cow_qpack:decode_field_section/3 in src/cow_qpack.erl) reads continuation octets until it sees one whose high bit is clear, evaluating Int + (Value bsl M) at each step with the shift M growing by seven per octet. No limit is enforced on the number of continuation octets, on the resulting bit width, or on the value; the decoder consumes whatever encoded length the peer supplies. Because Erlang integers are immutable, each intermediate Value bsl M and each accumulator update allocates a fresh bignum whose digit width grows linearly with the number of octets processed so far. Summed across the whole decode, the transient bignum digit materialization is on the order of the square of the encoded length. A single maximal HPACK indexed representation carried inside one HTTP/2 HEADERS plus one CONTINUATION frame at Cowboy's default max_frame_size_received can force hundreds of megabytes of transient allocation and garbage-collection churn before the resulting header-table index is rejected as invalid. Repeated or concurrent connections multiply the pressure and can drive the Erlang VM to memory exhaustion. Cowlib is the HTTP parser used by Cowboy, RabbitMQ's management plugin, and other Erlang and Elixir HTTP/2 and HTTP/3 servers and clients, so any exposed endpoint that accepts HPACK or QPACK from an untrusted peer is reachable. This issue affects cowlib: from 2.0.0 before 2.19.0.
SSVC
Exploitation: none Automatable: yes Technical Impact: partial
CISA Coordinator · CISA-ADP (v2.0.3)
Decision recorded 2026-07-28 12:39 UTC
CWE
  • CWE-770 - Allocation of Resources Without Limits or Throttling
Assigner
EEF CNA under the mitre root
CNA scorecard A 97/100 over 353 records in the last 180 days details
Impacted products
Vendor Product Version CPE status
ninenines cowlib Affected: 2.0.0-pre.1 , < 2.19.0 (semver)
    cpe:2.3:a:ninenines:cowlib:*:*:*:*:*:*:*:*
Create a notification for this product.
ninenines cowlib Affected: 5ddecbc121f812aec53d9df91829448d8e94e44c , < f582430498072a0c65ad338030321576dc13a343 (git)
    cpe:2.3:a:ninenines:cowlib:*:*:*:*:*:*:*:*
Create a notification for this product.
Show details on NVD website

{
  "containers": {
    "adp": [
      {
        "metrics": [
          {
            "other": {
              "content": {
                "id": "CVE-2026-59248",
                "options": [
                  {
                    "Exploitation": "none"
                  },
                  {
                    "Automatable": "yes"
                  },
                  {
                    "Technical Impact": "partial"
                  }
                ],
                "role": "CISA Coordinator",
                "timestamp": "2026-07-28T12:39:48.662716Z",
                "version": "2.0.3"
              },
              "type": "ssvc"
            }
          }
        ],
        "providerMetadata": {
          "dateUpdated": "2026-07-28T12:40:53.530Z",
          "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
          "shortName": "CISA-ADP"
        },
        "title": "CISA ADP Vulnrichment"
      }
    ],
    "cna": {
      "affected": [
        {
          "collectionURL": "https://repo.hex.pm",
          "cpes": [
            "cpe:2.3:a:ninenines:cowlib:*:*:*:*:*:*:*:*"
          ],
          "defaultStatus": "unaffected",
          "modules": [
            "cow_hpack",
            "cow_qpack"
          ],
          "packageName": "cowlib",
          "packageURL": "pkg:hex/cowlib",
          "product": "cowlib",
          "programFiles": [
            "src/cow_hpack_common.hrl",
            "src/cow_hpack.erl",
            "src/cow_qpack.erl"
          ],
          "programRoutines": [
            {
              "name": "cow_hpack:decode/2"
            },
            {
              "name": "cow_qpack:decode_field_section/3"
            }
          ],
          "repo": "https://github.com/ninenines/cowlib",
          "vendor": "ninenines",
          "versions": [
            {
              "lessThan": "2.19.0",
              "status": "affected",
              "version": "2.0.0-pre.1",
              "versionType": "semver"
            }
          ]
        },
        {
          "collectionURL": "https://github.com",
          "cpes": [
            "cpe:2.3:a:ninenines:cowlib:*:*:*:*:*:*:*:*"
          ],
          "defaultStatus": "unaffected",
          "modules": [
            "cow_hpack",
            "cow_qpack"
          ],
          "packageName": "ninenines/cowlib",
          "packageURL": "pkg:github/ninenines/cowlib",
          "product": "cowlib",
          "programFiles": [
            "src/cow_hpack_common.hrl",
            "src/cow_hpack.erl",
            "src/cow_qpack.erl"
          ],
          "programRoutines": [
            {
              "name": "cow_hpack:decode/2"
            },
            {
              "name": "cow_qpack:decode_field_section/3"
            }
          ],
          "repo": "https://github.com/ninenines/cowlib",
          "vendor": "ninenines",
          "versions": [
            {
              "lessThan": "f582430498072a0c65ad338030321576dc13a343",
              "status": "affected",
              "version": "5ddecbc121f812aec53d9df91829448d8e94e44c",
              "versionType": "git"
            }
          ]
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "criteria": "cpe:2.3:a:ninenines:cowlib:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "2.19.0",
                  "versionStartIncluding": "2.0.0-pre.1",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ],
          "operator": "AND"
        }
      ],
      "credits": [
        {
          "lang": "en",
          "type": "finder",
          "value": "David Hern\u00e1ndez"
        },
        {
          "lang": "en",
          "type": "reporter",
          "value": "Jonatan M\u00e4nnchen / EEF"
        },
        {
          "lang": "en",
          "type": "remediation developer",
          "value": "Lo\u00efc Hoguin"
        },
        {
          "lang": "en",
          "type": "analyst",
          "value": "Jonatan M\u00e4nnchen / EEF"
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "supportingMedia": [
            {
              "base64": false,
              "type": "text/html",
              "value": "\u003cp\u003eAllocation of resources without limits vulnerability in ninenines cowlib allows an unauthenticated remote HTTP/2 or HTTP/3 peer to exhaust memory on the vulnerable server (or client) and cause a denial of service.\u003c/p\u003e\u003cp\u003eThe HPACK and QPACK prefixed-integer decoder \u003ctt\u003ecow_hpack_common:dec_big_int/3\u003c/tt\u003e in \u003ctt\u003esrc/cow_hpack_common.hrl\u003c/tt\u003e (invoked from \u003ctt\u003ecow_hpack:decode/2\u003c/tt\u003e in \u003ctt\u003esrc/cow_hpack.erl\u003c/tt\u003e and from \u003ctt\u003ecow_qpack:decode_field_section/3\u003c/tt\u003e in \u003ctt\u003esrc/cow_qpack.erl\u003c/tt\u003e) reads continuation octets until it sees one whose high bit is clear, evaluating \u003ctt\u003eInt + (Value bsl M)\u003c/tt\u003e at each step with the shift \u003ctt\u003eM\u003c/tt\u003e growing by seven per octet. No limit is enforced on the number of continuation octets, on the resulting bit width, or on the value; the decoder consumes whatever encoded length the peer supplies.\u003c/p\u003e\u003cp\u003eBecause Erlang integers are immutable, each intermediate \u003ctt\u003eValue bsl M\u003c/tt\u003e and each accumulator update allocates a fresh bignum whose digit width grows linearly with the number of octets processed so far. Summed across the whole decode, the transient bignum digit materialization is on the order of the square of the encoded length. A single maximal HPACK indexed representation carried inside one HTTP/2 \u003ctt\u003eHEADERS\u003c/tt\u003e plus one \u003ctt\u003eCONTINUATION\u003c/tt\u003e frame at Cowboy\u0027s default \u003ctt\u003emax_frame_size_received\u003c/tt\u003e can force hundreds of megabytes of transient allocation and garbage-collection churn before the resulting header-table index is rejected as invalid. Repeated or concurrent connections multiply the pressure and can drive the Erlang VM to memory exhaustion.\u003c/p\u003e\u003cp\u003eCowlib is the HTTP parser used by Cowboy, RabbitMQ\u0027s management plugin, and other Erlang and Elixir HTTP/2 and HTTP/3 servers and clients, so any exposed endpoint that accepts HPACK or QPACK from an untrusted peer is reachable.\u003c/p\u003e\u003cp\u003eThis issue affects cowlib: from 2.0.0 before 2.19.0.\u003c/p\u003e"
            }
          ],
          "value": "Allocation of resources without limits vulnerability in ninenines cowlib allows an unauthenticated remote HTTP/2 or HTTP/3 peer to exhaust memory on the vulnerable server (or client) and cause a denial of service.\n\nThe HPACK and QPACK prefixed-integer decoder cow_hpack_common:dec_big_int/3 in src/cow_hpack_common.hrl (invoked from cow_hpack:decode/2 in src/cow_hpack.erl and from cow_qpack:decode_field_section/3 in src/cow_qpack.erl) reads continuation octets until it sees one whose high bit is clear, evaluating Int + (Value bsl M) at each step with the shift M growing by seven per octet. No limit is enforced on the number of continuation octets, on the resulting bit width, or on the value; the decoder consumes whatever encoded length the peer supplies.\n\nBecause Erlang integers are immutable, each intermediate Value bsl M and each accumulator update allocates a fresh bignum whose digit width grows linearly with the number of octets processed so far. Summed across the whole decode, the transient bignum digit materialization is on the order of the square of the encoded length. A single maximal HPACK indexed representation carried inside one HTTP/2 HEADERS plus one CONTINUATION frame at Cowboy\u0027s default max_frame_size_received can force hundreds of megabytes of transient allocation and garbage-collection churn before the resulting header-table index is rejected as invalid. Repeated or concurrent connections multiply the pressure and can drive the Erlang VM to memory exhaustion.\n\nCowlib is the HTTP parser used by Cowboy, RabbitMQ\u0027s management plugin, and other Erlang and Elixir HTTP/2 and HTTP/3 servers and clients, so any exposed endpoint that accepts HPACK or QPACK from an untrusted peer is reachable.\n\nThis issue affects cowlib: from 2.0.0 before 2.19.0."
        }
      ],
      "impacts": [
        {
          "capecId": "CAPEC-130",
          "descriptions": [
            {
              "lang": "en",
              "value": "CAPEC-130 Excessive Allocation"
            }
          ]
        }
      ],
      "metrics": [
        {
          "cvssV4_0": {
            "attackComplexity": "LOW",
            "attackRequirements": "NONE",
            "attackVector": "NETWORK",
            "baseScore": 8.7,
            "baseSeverity": "HIGH",
            "privilegesRequired": "NONE",
            "subAvailabilityImpact": "NONE",
            "subConfidentialityImpact": "NONE",
            "subIntegrityImpact": "NONE",
            "userInteraction": "NONE",
            "vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N",
            "version": "4.0",
            "vulnAvailabilityImpact": "HIGH",
            "vulnConfidentialityImpact": "NONE",
            "vulnIntegrityImpact": "NONE"
          },
          "format": "CVSS",
          "scenarios": [
            {
              "lang": "en",
              "value": "GENERAL"
            }
          ]
        }
      ],
      "problemTypes": [
        {
          "descriptions": [
            {
              "cweId": "CWE-770",
              "description": "CWE-770 Allocation of Resources Without Limits or Throttling",
              "lang": "en",
              "type": "CWE"
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-07-29T04:18:17.483Z",
        "orgId": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
        "shortName": "EEF"
      },
      "references": [
        {
          "tags": [
            "third-party-advisory",
            "related"
          ],
          "url": "https://cna.erlef.org/cves/CVE-2026-59248.html"
        },
        {
          "tags": [
            "related"
          ],
          "url": "https://osv.dev/vulnerability/EEF-CVE-2026-59248"
        },
        {
          "tags": [
            "patch"
          ],
          "url": "https://github.com/ninenines/cowlib/commit/f582430498072a0c65ad338030321576dc13a343"
        }
      ],
      "source": {
        "discovery": "EXTERNAL"
      },
      "title": "Unbounded HPACK/QPACK prefixed-integer decoding in Cowlib causes memory-exhaustion DoS",
      "x_generator": {
        "engine": "cvelib 1.8.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
    "assignerShortName": "EEF",
    "cveId": "CVE-2026-59248",
    "datePublished": "2026-07-28T09:54:19.579Z",
    "dateReserved": "2026-07-04T04:24:03.652Z",
    "dateUpdated": "2026-07-29T04:18:17.483Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "vulnerability-lookup:meta": {
    "epss": {
      "cve": "CVE-2026-59248",
      "date": "2026-11-05",
      "epss": "0.00292",
      "percentile": "0.21865"
    },
    "microsoft_vex": {
      "current_release_date": "2026-09-13T01:45:45.000Z",
      "cve": "CVE-2026-59248",
      "id": "msrc_CVE-2026-59248",
      "initial_release_date": "2026-08-07T00:56:20.000Z",
      "product_status:fixed": "1",
      "product_status:known_affected": "2",
      "source": "Microsoft CSAF VEX",
      "status": "final",
      "title": "Unbounded HPACK/QPACK prefixed-integer decoding in Cowlib causes memory-exhaustion DoS",
      "url": "https://msrc.microsoft.com/csaf/vex/2026/msrc_cve-2026-59248.json",
      "version": "3"
    },
    "nvd": {
      "cve": {
        "affected": [
          {
            "affectedData": [
              {
                "collectionURL": "https://repo.hex.pm",
                "cpes": [
                  "cpe:2.3:a:ninenines:cowlib:*:*:*:*:*:*:*:*"
                ],
                "defaultStatus": "unaffected",
                "modules": [
                  "cow_hpack",
                  "cow_qpack"
                ],
                "packageName": "cowlib",
                "packageURL": "pkg:hex/cowlib",
                "product": "cowlib",
                "programFiles": [
                  "src/cow_hpack_common.hrl",
                  "src/cow_hpack.erl",
                  "src/cow_qpack.erl"
                ],
                "programRoutines": [
                  {
                    "name": "cow_hpack:decode/2"
                  },
                  {
                    "name": "cow_qpack:decode_field_section/3"
                  }
                ],
                "repo": "https://github.com/ninenines/cowlib",
                "vendor": "ninenines",
                "versions": [
                  {
                    "lessThan": "2.19.0",
                    "status": "affected",
                    "version": "2.0.0-pre.1",
                    "versionType": "semver"
                  }
                ]
              },
              {
                "collectionURL": "https://github.com",
                "cpes": [
                  "cpe:2.3:a:ninenines:cowlib:*:*:*:*:*:*:*:*"
                ],
                "defaultStatus": "unaffected",
                "modules": [
                  "cow_hpack",
                  "cow_qpack"
                ],
                "packageName": "ninenines/cowlib",
                "packageURL": "pkg:github/ninenines/cowlib",
                "product": "cowlib",
                "programFiles": [
                  "src/cow_hpack_common.hrl",
                  "src/cow_hpack.erl",
                  "src/cow_qpack.erl"
                ],
                "programRoutines": [
                  {
                    "name": "cow_hpack:decode/2"
                  },
                  {
                    "name": "cow_qpack:decode_field_section/3"
                  }
                ],
                "repo": "https://github.com/ninenines/cowlib",
                "vendor": "ninenines",
                "versions": [
                  {
                    "lessThan": "f582430498072a0c65ad338030321576dc13a343",
                    "status": "affected",
                    "version": "5ddecbc121f812aec53d9df91829448d8e94e44c",
                    "versionType": "git"
                  }
                ]
              }
            ],
            "source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db"
          }
        ],
        "cveTags": [],
        "descriptions": [
          {
            "lang": "en",
            "value": "Allocation of resources without limits vulnerability in ninenines cowlib allows an unauthenticated remote HTTP/2 or HTTP/3 peer to exhaust memory on the vulnerable server (or client) and cause a denial of service.\n\nThe HPACK and QPACK prefixed-integer decoder cow_hpack_common:dec_big_int/3 in src/cow_hpack_common.hrl (invoked from cow_hpack:decode/2 in src/cow_hpack.erl and from cow_qpack:decode_field_section/3 in src/cow_qpack.erl) reads continuation octets until it sees one whose high bit is clear, evaluating Int + (Value bsl M) at each step with the shift M growing by seven per octet. No limit is enforced on the number of continuation octets, on the resulting bit width, or on the value; the decoder consumes whatever encoded length the peer supplies.\n\nBecause Erlang integers are immutable, each intermediate Value bsl M and each accumulator update allocates a fresh bignum whose digit width grows linearly with the number of octets processed so far. Summed across the whole decode, the transient bignum digit materialization is on the order of the square of the encoded length. A single maximal HPACK indexed representation carried inside one HTTP/2 HEADERS plus one CONTINUATION frame at Cowboy\u0027s default max_frame_size_received can force hundreds of megabytes of transient allocation and garbage-collection churn before the resulting header-table index is rejected as invalid. Repeated or concurrent connections multiply the pressure and can drive the Erlang VM to memory exhaustion.\n\nCowlib is the HTTP parser used by Cowboy, RabbitMQ\u0027s management plugin, and other Erlang and Elixir HTTP/2 and HTTP/3 servers and clients, so any exposed endpoint that accepts HPACK or QPACK from an untrusted peer is reachable.\n\nThis issue affects cowlib: from 2.0.0 before 2.19.0."
          },
          {
            "lang": "es",
            "value": "La vulnerabilidad de asignaci\u00f3n de recursos sin l\u00edmites en ninenines cowlib permite que un par HTTP/2 o HTTP/3 remoto no autenticado agote la memoria en el servidor (o cliente) vulnerable y cause una denegaci\u00f3n de servicio.\n\nEl decodificador de enteros con prefijo HPACK y QPACK cow_hpack_common:dec_big_int/3 en src/cow_hpack_common.hrl (invocado desde cow_hpack:decode/2 en src/cow_hpack.erl y desde cow_qpack:decode_field_section/3 en src/cow_qpack.erl) lee octetos de continuaci\u00f3n hasta que ve uno cuyo bit m\u00e1s significativo est\u00e1 claro, evaluando Int + (Value bsl M) en cada paso con el desplazamiento M creciendo en siete por octeto. No se impone ning\u00fan l\u00edmite en el n\u00famero de octetos de continuaci\u00f3n, en el ancho de bits resultante o en el valor; el decodificador consume cualquier longitud codificada que el par suministre.\n\nDebido a que los enteros de Erlang son inmutables, cada Value bsl M intermedio y cada actualizaci\u00f3n del acumulador asigna un nuevo bignum cuyo ancho de d\u00edgito crece linealmente con el n\u00famero de octetos procesados hasta ahora. Sumado a lo largo de toda la decodificaci\u00f3n, la materializaci\u00f3n transitoria de d\u00edgitos bignum es del orden del cuadrado de la longitud codificada. Una \u00fanica representaci\u00f3n indexada HPACK m\u00e1xima transportada dentro de un frame HTTP/2 HEADERS m\u00e1s un frame CONTINUATION en el max_frame_size_received predeterminado de Cowboy puede forzar cientos de megabytes de asignaci\u00f3n transitoria y agitaci\u00f3n de recolecci\u00f3n de basura antes de que el \u00edndice de la tabla de encabezados resultante sea rechazado como inv\u00e1lido. Las conexiones repetidas o concurrentes multiplican la presi\u00f3n y pueden llevar a la VM de Erlang al agotamiento de la memoria.\n\nCowlib es el analizador HTTP utilizado por Cowboy, el plugin de gesti\u00f3n de RabbitMQ, y otros servidores y clientes HTTP/2 y HTTP/3 de Erlang y Elixir, por lo que cualquier punto final expuesto que acepte HPACK o QPACK de un par no confiable es alcanzable.\n\nEste problema afecta a cowlib: desde 2.0.0 antes de 2.19.0."
          }
        ],
        "id": "CVE-2026-59248",
        "lastModified": "2026-10-24T13:10:00.147",
        "metrics": {
          "cvssMetricV40": [
            {
              "cvssData": {
                "Automatable": "NOT_DEFINED",
                "Recovery": "NOT_DEFINED",
                "Safety": "NOT_DEFINED",
                "attackComplexity": "LOW",
                "attackRequirements": "NONE",
                "attackVector": "NETWORK",
                "availabilityRequirement": "NOT_DEFINED",
                "baseScore": 8.7,
                "baseSeverity": "HIGH",
                "confidentialityRequirement": "NOT_DEFINED",
                "exploitMaturity": "NOT_DEFINED",
                "integrityRequirement": "NOT_DEFINED",
                "modifiedAttackComplexity": "NOT_DEFINED",
                "modifiedAttackRequirements": "NOT_DEFINED",
                "modifiedAttackVector": "NOT_DEFINED",
                "modifiedPrivilegesRequired": "NOT_DEFINED",
                "modifiedSubAvailabilityImpact": "NOT_DEFINED",
                "modifiedSubConfidentialityImpact": "NOT_DEFINED",
                "modifiedSubIntegrityImpact": "NOT_DEFINED",
                "modifiedUserInteraction": "NOT_DEFINED",
                "modifiedVulnAvailabilityImpact": "NOT_DEFINED",
                "modifiedVulnConfidentialityImpact": "NOT_DEFINED",
                "modifiedVulnIntegrityImpact": "NOT_DEFINED",
                "privilegesRequired": "NONE",
                "providerUrgency": "NOT_DEFINED",
                "subAvailabilityImpact": "NONE",
                "subConfidentialityImpact": "NONE",
                "subIntegrityImpact": "NONE",
                "userInteraction": "NONE",
                "valueDensity": "NOT_DEFINED",
                "vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X",
                "version": "4.0",
                "vulnAvailabilityImpact": "HIGH",
                "vulnConfidentialityImpact": "NONE",
                "vulnIntegrityImpact": "NONE",
                "vulnerabilityResponseEffort": "NOT_DEFINED"
              },
              "source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
              "type": "Secondary"
            }
          ],
          "ssvcV203": [
            {
              "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "ssvcData": {
                "id": "CVE-2026-59248",
                "options": [
                  {
                    "exploitation": "none"
                  },
                  {
                    "automatable": "yes"
                  },
                  {
                    "technicalImpact": "partial"
                  }
                ],
                "role": "CISA Coordinator",
                "timestamp": "2026-07-28T12:39:48.662716Z",
                "version": "2.0.3"
              }
            }
          ]
        },
        "published": "2026-07-28T10:16:50.083",
        "references": [
          {
            "source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
            "url": "https://cna.erlef.org/cves/CVE-2026-59248.html"
          },
          {
            "source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
            "url": "https://github.com/ninenines/cowlib/commit/f582430498072a0c65ad338030321576dc13a343"
          },
          {
            "source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
            "url": "https://osv.dev/vulnerability/EEF-CVE-2026-59248"
          }
        ],
        "sourceIdentifier": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
        "vulnStatus": "Deferred",
        "weaknesses": [
          {
            "description": [
              {
                "lang": "en",
                "value": "CWE-770"
              }
            ],
            "source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
            "type": "Secondary"
          }
        ]
      }
    },
    "redhat_vex": {
      "aggregate_severity": "Important",
      "current_release_date": "2026-08-21T00:13:06+00:00",
      "cve": "CVE-2026-59248",
      "id": "CVE-2026-59248",
      "initial_release_date": "2026-07-28T09:54:19.579000+00:00",
      "product_status:fixed": "6",
      "source": "Red Hat CSAF VEX",
      "status": "final",
      "title": "cowlib: Cowlib: Denial of Service due to unbounded HPACK/QPACK prefixed-integer decoding",
      "url": "https://security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-59248.json",
      "version": "3"
    },
    "vulnrichment": {
      "containers": {
        "adp": [
          {
            "metrics": [
              {
                "other": {
                  "content": {
                    "id": "CVE-2026-59248",
                    "options": [
                      {
                        "Exploitation": "none"
                      },
                      {
                        "Automatable": "yes"
                      },
                      {
                        "Technical Impact": "partial"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-07-28T12:39:48.662716Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-07-28T12:40:49.783Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "cna": {
          "affected": [
            {
              "collectionURL": "https://repo.hex.pm",
              "cpes": [
                "cpe:2.3:a:ninenines:cowlib:*:*:*:*:*:*:*:*"
              ],
              "defaultStatus": "unaffected",
              "modules": [
                "cow_hpack",
                "cow_qpack"
              ],
              "packageName": "cowlib",
              "packageURL": "pkg:hex/cowlib",
              "product": "cowlib",
              "programFiles": [
                "src/cow_hpack_common.hrl",
                "src/cow_hpack.erl",
                "src/cow_qpack.erl"
              ],
              "programRoutines": [
                {
                  "name": "cow_hpack:decode/2"
                },
                {
                  "name": "cow_qpack:decode_field_section/3"
                }
              ],
              "repo": "https://github.com/ninenines/cowlib",
              "vendor": "ninenines",
              "versions": [
                {
                  "lessThan": "2.19.0",
                  "status": "affected",
                  "version": "2.0.0-pre.1",
                  "versionType": "semver"
                }
              ]
            },
            {
              "collectionURL": "https://github.com",
              "cpes": [
                "cpe:2.3:a:ninenines:cowlib:*:*:*:*:*:*:*:*"
              ],
              "defaultStatus": "unaffected",
              "modules": [
                "cow_hpack",
                "cow_qpack"
              ],
              "packageName": "ninenines/cowlib",
              "packageURL": "pkg:github/ninenines/cowlib",
              "product": "cowlib",
              "programFiles": [
                "src/cow_hpack_common.hrl",
                "src/cow_hpack.erl",
                "src/cow_qpack.erl"
              ],
              "programRoutines": [
                {
                  "name": "cow_hpack:decode/2"
                },
                {
                  "name": "cow_qpack:decode_field_section/3"
                }
              ],
              "repo": "https://github.com/ninenines/cowlib",
              "vendor": "ninenines",
              "versions": [
                {
                  "lessThan": "f582430498072a0c65ad338030321576dc13a343",
                  "status": "affected",
                  "version": "5ddecbc121f812aec53d9df91829448d8e94e44c",
                  "versionType": "git"
                }
              ]
            }
          ],
          "cpeApplicability": [
            {
              "nodes": [
                {
                  "cpeMatch": [
                    {
                      "criteria": "cpe:2.3:a:ninenines:cowlib:*:*:*:*:*:*:*:*",
                      "versionEndExcluding": "2.19.0",
                      "versionStartIncluding": "2.0.0-pre.1",
                      "vulnerable": true
                    }
                  ],
                  "negate": false,
                  "operator": "OR"
                }
              ],
              "operator": "AND"
            }
          ],
          "credits": [
            {
              "lang": "en",
              "type": "finder",
              "value": "David Hern\u00e1ndez"
            },
            {
              "lang": "en",
              "type": "reporter",
              "value": "Jonatan M\u00e4nnchen / EEF"
            },
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "Lo\u00efc Hoguin"
            },
            {
              "lang": "en",
              "type": "analyst",
              "value": "Jonatan M\u00e4nnchen / EEF"
            }
          ],
          "descriptions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eAllocation of resources without limits vulnerability in ninenines cowlib allows an unauthenticated remote HTTP/2 or HTTP/3 peer to exhaust memory on the vulnerable server (or client) and cause a denial of service.\u003c/p\u003e\u003cp\u003eThe HPACK and QPACK prefixed-integer decoder \u003ctt\u003ecow_hpack_common:dec_big_int/3\u003c/tt\u003e in \u003ctt\u003esrc/cow_hpack_common.hrl\u003c/tt\u003e (invoked from \u003ctt\u003ecow_hpack:decode/2\u003c/tt\u003e in \u003ctt\u003esrc/cow_hpack.erl\u003c/tt\u003e and from \u003ctt\u003ecow_qpack:decode_field_section/3\u003c/tt\u003e in \u003ctt\u003esrc/cow_qpack.erl\u003c/tt\u003e) reads continuation octets until it sees one whose high bit is clear, evaluating \u003ctt\u003eInt + (Value bsl M)\u003c/tt\u003e at each step with the shift \u003ctt\u003eM\u003c/tt\u003e growing by seven per octet. No limit is enforced on the number of continuation octets, on the resulting bit width, or on the value; the decoder consumes whatever encoded length the peer supplies.\u003c/p\u003e\u003cp\u003eBecause Erlang integers are immutable, each intermediate \u003ctt\u003eValue bsl M\u003c/tt\u003e and each accumulator update allocates a fresh bignum whose digit width grows linearly with the number of octets processed so far. Summed across the whole decode, the transient bignum digit materialization is on the order of the square of the encoded length. A single maximal HPACK indexed representation carried inside one HTTP/2 \u003ctt\u003eHEADERS\u003c/tt\u003e plus one \u003ctt\u003eCONTINUATION\u003c/tt\u003e frame at Cowboy\u0027s default \u003ctt\u003emax_frame_size_received\u003c/tt\u003e can force hundreds of megabytes of transient allocation and garbage-collection churn before the resulting header-table index is rejected as invalid. Repeated or concurrent connections multiply the pressure and can drive the Erlang VM to memory exhaustion.\u003c/p\u003e\u003cp\u003eCowlib is the HTTP parser used by Cowboy, RabbitMQ\u0027s management plugin, and other Erlang and Elixir HTTP/2 and HTTP/3 servers and clients, so any exposed endpoint that accepts HPACK or QPACK from an untrusted peer is reachable.\u003c/p\u003e\u003cp\u003eThis issue affects cowlib: from 2.0.0 before 2.19.0.\u003c/p\u003e"
                }
              ],
              "value": "Allocation of resources without limits vulnerability in ninenines cowlib allows an unauthenticated remote HTTP/2 or HTTP/3 peer to exhaust memory on the vulnerable server (or client) and cause a denial of service.\n\nThe HPACK and QPACK prefixed-integer decoder cow_hpack_common:dec_big_int/3 in src/cow_hpack_common.hrl (invoked from cow_hpack:decode/2 in src/cow_hpack.erl and from cow_qpack:decode_field_section/3 in src/cow_qpack.erl) reads continuation octets until it sees one whose high bit is clear, evaluating Int + (Value bsl M) at each step with the shift M growing by seven per octet. No limit is enforced on the number of continuation octets, on the resulting bit width, or on the value; the decoder consumes whatever encoded length the peer supplies.\n\nBecause Erlang integers are immutable, each intermediate Value bsl M and each accumulator update allocates a fresh bignum whose digit width grows linearly with the number of octets processed so far. Summed across the whole decode, the transient bignum digit materialization is on the order of the square of the encoded length. A single maximal HPACK indexed representation carried inside one HTTP/2 HEADERS plus one CONTINUATION frame at Cowboy\u0027s default max_frame_size_received can force hundreds of megabytes of transient allocation and garbage-collection churn before the resulting header-table index is rejected as invalid. Repeated or concurrent connections multiply the pressure and can drive the Erlang VM to memory exhaustion.\n\nCowlib is the HTTP parser used by Cowboy, RabbitMQ\u0027s management plugin, and other Erlang and Elixir HTTP/2 and HTTP/3 servers and clients, so any exposed endpoint that accepts HPACK or QPACK from an untrusted peer is reachable.\n\nThis issue affects cowlib: from 2.0.0 before 2.19.0."
            }
          ],
          "impacts": [
            {
              "capecId": "CAPEC-130",
              "descriptions": [
                {
                  "lang": "en",
                  "value": "CAPEC-130 Excessive Allocation"
                }
              ]
            }
          ],
          "metrics": [
            {
              "cvssV4_0": {
                "attackComplexity": "LOW",
                "attackRequirements": "NONE",
                "attackVector": "NETWORK",
                "baseScore": 8.7,
                "baseSeverity": "HIGH",
                "privilegesRequired": "NONE",
                "subAvailabilityImpact": "NONE",
                "subConfidentialityImpact": "NONE",
                "subIntegrityImpact": "NONE",
                "userInteraction": "NONE",
                "vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N",
                "version": "4.0",
                "vulnAvailabilityImpact": "HIGH",
                "vulnConfidentialityImpact": "NONE",
                "vulnIntegrityImpact": "NONE"
              },
              "format": "CVSS",
              "scenarios": [
                {
                  "lang": "en",
                  "value": "GENERAL"
                }
              ]
            }
          ],
          "problemTypes": [
            {
              "descriptions": [
                {
                  "cweId": "CWE-770",
                  "description": "CWE-770 Allocation of Resources Without Limits or Throttling",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            }
          ],
          "providerMetadata": {
            "dateUpdated": "2026-07-29T04:18:17.483Z",
            "orgId": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
            "shortName": "EEF"
          },
          "references": [
            {
              "tags": [
                "third-party-advisory",
                "related"
              ],
              "url": "https://cna.erlef.org/cves/CVE-2026-59248.html"
            },
            {
              "tags": [
                "related"
              ],
              "url": "https://osv.dev/vulnerability/EEF-CVE-2026-59248"
            },
            {
              "tags": [
                "patch"
              ],
              "url": "https://github.com/ninenines/cowlib/commit/f582430498072a0c65ad338030321576dc13a343"
            }
          ],
          "source": {
            "discovery": "EXTERNAL"
          },
          "title": "Unbounded HPACK/QPACK prefixed-integer decoding in Cowlib causes memory-exhaustion DoS",
          "x_generator": {
            "engine": "cvelib 1.8.0"
          }
        }
      },
      "cveMetadata": {
        "assignerOrgId": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
        "assignerShortName": "EEF",
        "cveId": "CVE-2026-59248",
        "datePublished": "2026-07-28T09:54:19.579Z",
        "dateReserved": "2026-07-04T04:24:03.652Z",
        "dateUpdated": "2026-07-29T04:18:17.483Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }
  }
}



Log in or create an account to share your comment.




Tags
Taxonomy of the tags.


Loading…

Loading…

Loading…

Drag nodes to arrange them. Double-click a related vulnerability to open it, or a source to visit its link. The Physics button on the left tunes the layout and the simulation; the legend at the bottom left hides or shows nodes by kind and by sighting type.

Forecast uses a logistic model when the trend is rising, or an exponential decay model when the trend is falling. Fitted via linearized least squares.

Sightings

Author Source Type Date Other

Nomenclature

  • Seen: The vulnerability was mentioned, discussed, or observed by the user.
  • Confirmed: The vulnerability has been validated from an analyst's perspective.
  • Published Proof of Concept: A public proof of concept is available for this vulnerability.
  • Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
  • Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
  • Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
  • Not confirmed: The user expressed doubt about the validity of the vulnerability.
  • Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.
Vulnerability timeline

Sightings and recorded dates, grouped by day · UTC

JSON
Events included in the timeline

Loading timeline…


    Loading…

    Loading…

    Loading…

    Related by attack behaviour

    Vulnerabilities whose description is nearest to this one in the vector space of the CIRCL/vulnerability-attack-technique-biencoder model. This is a similarity search over the bi-encoder space (plain cosine), not a classification, and it has no measured accuracy.