CVE-2026-32145 (GCVE-0-2026-32145)
Vulnerability from cvelistv5
Published
2026-04-02 10:30
Modified
2026-04-07 04:07
CWE
  • CWE-770 - Allocation of Resources Without Limits or Throttling
Summary
Allocation of Resources Without Limits or Throttling vulnerability in gleam-wisp wisp allows a denial of service via multipart form body parsing. The multipart_body function bypasses configured max_body_size and max_files_size limits. When a multipart boundary is not present in a chunk, the parser takes the MoreRequiredForBody path, which appends the chunk to the output but passes the quota unchanged to the recursive call. Only the final chunk containing the boundary is counted via decrement_quota. The same pattern exists in multipart_headers, where MoreRequiredForHeaders recurses without calling decrement_body_quota. An unauthenticated attacker can exhaust server memory or disk by sending arbitrarily large multipart form submissions in a single HTTP request. This issue affects wisp: from 0.2.0 before 2.2.2.
Impacted products
Vendor Product Version
gleam-wisp wisp Version: 0.2.0   
    cpe:2.3:a:gleam-wisp:wisp:*:*:*:*:*:*:*:*
Create a notification for this product.
   gleam-wisp wisp Version: d8e722e22ccb42bda9d0b6248658d37ab4e9b376
    cpe:2.3:a:gleam-wisp:wisp:*:*:*:*:*:*:*:*
Create a notification for this product.
Show details on NVD website


{
  "containers": {
    "adp": [
      {
        "metrics": [
          {
            "other": {
              "content": {
                "id": "CVE-2026-32145",
                "options": [
                  {
                    "Exploitation": "none"
                  },
                  {
                    "Automatable": "yes"
                  },
                  {
                    "Technical Impact": "partial"
                  }
                ],
                "role": "CISA Coordinator",
                "timestamp": "2026-04-02T13:29:06.824466Z",
                "version": "2.0.3"
              },
              "type": "ssvc"
            }
          }
        ],
        "providerMetadata": {
          "dateUpdated": "2026-04-06T19:47:22.060Z",
          "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:gleam-wisp:wisp:*:*:*:*:*:*:*:*"
          ],
          "defaultStatus": "unaffected",
          "modules": [
            "wisp"
          ],
          "packageName": "wisp",
          "packageURL": "pkg:hex/wisp",
          "product": "wisp",
          "programFiles": [
            "src/wisp.gleam"
          ],
          "programRoutines": [
            {
              "name": "wisp:multipart_body/7"
            },
            {
              "name": "wisp:multipart_headers/5"
            }
          ],
          "repo": "https://github.com/gleam-wisp/wisp",
          "vendor": "gleam-wisp",
          "versions": [
            {
              "lessThan": "2.2.2",
              "status": "affected",
              "version": "0.2.0",
              "versionType": "semver"
            }
          ]
        },
        {
          "collectionURL": "https://github.com",
          "cpes": [
            "cpe:2.3:a:gleam-wisp:wisp:*:*:*:*:*:*:*:*"
          ],
          "defaultStatus": "unaffected",
          "modules": [
            "wisp"
          ],
          "packageName": "gleam-wisp/wisp",
          "packageURL": "pkg:github/gleam-wisp/wisp",
          "product": "wisp",
          "programFiles": [
            "src/wisp.gleam"
          ],
          "programRoutines": [
            {
              "name": "wisp:multipart_body/7"
            },
            {
              "name": "wisp:multipart_headers/5"
            }
          ],
          "repo": "https://github.com/gleam-wisp/wisp.git",
          "vendor": "gleam-wisp",
          "versions": [
            {
              "lessThan": "7a978748e12ab29db232c222254465890e1a4a90",
              "status": "affected",
              "version": "d8e722e22ccb42bda9d0b6248658d37ab4e9b376",
              "versionType": "git"
            }
          ]
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "criteria": "cpe:2.3:a:gleam-wisp:wisp:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "2.2.2",
                  "versionStartIncluding": "0.2.0",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ],
          "operator": "AND"
        }
      ],
      "credits": [
        {
          "lang": "en",
          "type": "finder",
          "value": "John Downey"
        },
        {
          "lang": "en",
          "type": "remediation developer",
          "value": "Louis Pilfold"
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "supportingMedia": [
            {
              "base64": false,
              "type": "text/html",
              "value": "Allocation of Resources Without Limits or Throttling vulnerability in gleam-wisp wisp allows a denial of service via multipart form body parsing.\u003cp\u003eThe \u003ctt\u003emultipart_body\u003c/tt\u003e function bypasses configured \u003ctt\u003emax_body_size\u003c/tt\u003e and \u003ctt\u003emax_files_size\u003c/tt\u003e limits. When a multipart boundary is not present in a chunk, the parser takes the \u003ctt\u003eMoreRequiredForBody\u003c/tt\u003e path, which appends the chunk to the output but passes the quota unchanged to the recursive call. Only the final chunk containing the boundary is counted via \u003ctt\u003edecrement_quota\u003c/tt\u003e. The same pattern exists in \u003ctt\u003emultipart_headers\u003c/tt\u003e, where \u003ctt\u003eMoreRequiredForHeaders\u003c/tt\u003e recurses without calling \u003ctt\u003edecrement_body_quota\u003c/tt\u003e.\u003c/p\u003e\u003cp\u003eAn unauthenticated attacker can exhaust server memory or disk by sending arbitrarily large multipart form submissions in a single HTTP request.\u003c/p\u003e\u003cp\u003eThis issue affects wisp: from 0.2.0 before 2.2.2.\u003c/p\u003e"
            }
          ],
          "value": "Allocation of Resources Without Limits or Throttling vulnerability in gleam-wisp wisp allows a denial of service via multipart form body parsing.\n\nThe multipart_body function bypasses configured max_body_size and max_files_size limits. When a multipart boundary is not present in a chunk, the parser takes the MoreRequiredForBody path, which appends the chunk to the output but passes the quota unchanged to the recursive call. Only the final chunk containing the boundary is counted via decrement_quota. The same pattern exists in multipart_headers, where MoreRequiredForHeaders recurses without calling decrement_body_quota.\n\nAn unauthenticated attacker can exhaust server memory or disk by sending arbitrarily large multipart form submissions in a single HTTP request.\n\nThis issue affects wisp: from 0.2.0 before 2.2.2."
        }
      ],
      "impacts": [
        {
          "capecId": "CAPEC-130",
          "descriptions": [
            {
              "lang": "en",
              "value": "CAPEC-130 Excessive Allocation"
            }
          ]
        }
      ],
      "metrics": [
        {
          "cvssV4_0": {
            "Automatable": "NOT_DEFINED",
            "Recovery": "NOT_DEFINED",
            "Safety": "NOT_DEFINED",
            "attackComplexity": "LOW",
            "attackRequirements": "NONE",
            "attackVector": "NETWORK",
            "baseScore": 8.7,
            "baseSeverity": "HIGH",
            "exploitMaturity": "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",
            "version": "4.0",
            "vulnAvailabilityImpact": "HIGH",
            "vulnConfidentialityImpact": "NONE",
            "vulnIntegrityImpact": "NONE",
            "vulnerabilityResponseEffort": "NOT_DEFINED"
          },
          "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-04-07T04:07:10.339Z",
        "orgId": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
        "shortName": "EEF"
      },
      "references": [
        {
          "tags": [
            "vendor-advisory",
            "related"
          ],
          "url": "https://github.com/gleam-wisp/wisp/security/advisories/GHSA-8645-p2v4-73r2"
        },
        {
          "tags": [
            "related"
          ],
          "url": "https://cna.erlef.org/cves/CVE-2026-32145.html"
        },
        {
          "tags": [
            "related"
          ],
          "url": "https://osv.dev/vulnerability/EEF-CVE-2026-32145"
        },
        {
          "tags": [
            "patch"
          ],
          "url": "https://github.com/gleam-wisp/wisp/commit/7a978748e12ab29db232c222254465890e1a4a90"
        }
      ],
      "source": {
        "discovery": "EXTERNAL"
      },
      "title": "Multipart form body parser bypasses body size limits in wisp",
      "workarounds": [
        {
          "lang": "en",
          "supportingMedia": [
            {
              "base64": false,
              "type": "text/html",
              "value": "Deploy a reverse proxy (such as nginx or HAProxy) in front of the wisp application and configure it to enforce request body size limits."
            }
          ],
          "value": "Deploy a reverse proxy (such as nginx or HAProxy) in front of the wisp application and configure it to enforce request body size limits."
        }
      ],
      "x_generator": {
        "engine": "Vulnogram 1.0.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
    "assignerShortName": "EEF",
    "cveId": "CVE-2026-32145",
    "datePublished": "2026-04-02T10:30:47.485Z",
    "dateReserved": "2026-03-10T22:37:29.212Z",
    "dateUpdated": "2026-04-07T04:07:10.339Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "vulnerability-lookup:meta": {
    "vulnrichment": {
      "containers": "{\"adp\": [{\"title\": \"CISA ADP Vulnrichment\", \"metrics\": [{\"other\": {\"type\": \"ssvc\", \"content\": {\"id\": \"CVE-2026-32145\", \"role\": \"CISA Coordinator\", \"options\": [{\"Exploitation\": \"none\"}, {\"Automatable\": \"yes\"}, {\"Technical Impact\": \"partial\"}], \"version\": \"2.0.3\", \"timestamp\": \"2026-04-02T13:29:06.824466Z\"}}}], \"providerMetadata\": {\"orgId\": \"134c704f-9b21-4f2e-91b3-4a467353bcc0\", \"shortName\": \"CISA-ADP\", \"dateUpdated\": \"2026-04-02T13:29:12.423Z\"}}], \"cna\": {\"title\": \"Multipart form body parser bypasses body size limits in wisp\", \"source\": {\"discovery\": \"EXTERNAL\"}, \"credits\": [{\"lang\": \"en\", \"type\": \"finder\", \"value\": \"John Downey\"}, {\"lang\": \"en\", \"type\": \"remediation developer\", \"value\": \"Louis Pilfold\"}], \"impacts\": [{\"capecId\": \"CAPEC-130\", \"descriptions\": [{\"lang\": \"en\", \"value\": \"CAPEC-130 Excessive Allocation\"}]}], \"metrics\": [{\"format\": \"CVSS\", \"cvssV4_0\": {\"Safety\": \"NOT_DEFINED\", \"version\": \"4.0\", \"Recovery\": \"NOT_DEFINED\", \"baseScore\": 8.7, \"Automatable\": \"NOT_DEFINED\", \"attackVector\": \"NETWORK\", \"baseSeverity\": \"HIGH\", \"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\", \"exploitMaturity\": \"NOT_DEFINED\", \"providerUrgency\": \"NOT_DEFINED\", \"userInteraction\": \"NONE\", \"attackComplexity\": \"LOW\", \"attackRequirements\": \"NONE\", \"privilegesRequired\": \"NONE\", \"subIntegrityImpact\": \"NONE\", \"vulnIntegrityImpact\": \"NONE\", \"subAvailabilityImpact\": \"NONE\", \"vulnAvailabilityImpact\": \"HIGH\", \"subConfidentialityImpact\": \"NONE\", \"vulnConfidentialityImpact\": \"NONE\", \"vulnerabilityResponseEffort\": \"NOT_DEFINED\"}, \"scenarios\": [{\"lang\": \"en\", \"value\": \"GENERAL\"}]}], \"affected\": [{\"cpes\": [\"cpe:2.3:a:gleam-wisp:wisp:*:*:*:*:*:*:*:*\"], \"repo\": \"https://github.com/gleam-wisp/wisp\", \"vendor\": \"gleam-wisp\", \"modules\": [\"wisp\"], \"product\": \"wisp\", \"versions\": [{\"status\": \"affected\", \"version\": \"0.2.0\", \"lessThan\": \"2.2.2\", \"versionType\": \"semver\"}], \"packageURL\": \"pkg:hex/wisp\", \"packageName\": \"wisp\", \"programFiles\": [\"src/wisp.gleam\"], \"collectionURL\": \"https://repo.hex.pm\", \"defaultStatus\": \"unaffected\", \"programRoutines\": [{\"name\": \"wisp:multipart_body/7\"}, {\"name\": \"wisp:multipart_headers/5\"}]}, {\"cpes\": [\"cpe:2.3:a:gleam-wisp:wisp:*:*:*:*:*:*:*:*\"], \"repo\": \"https://github.com/gleam-wisp/wisp.git\", \"vendor\": \"gleam-wisp\", \"modules\": [\"wisp\"], \"product\": \"wisp\", \"versions\": [{\"status\": \"affected\", \"version\": \"d8e722e22ccb42bda9d0b6248658d37ab4e9b376\", \"lessThan\": \"7a978748e12ab29db232c222254465890e1a4a90\", \"versionType\": \"git\"}], \"packageURL\": \"pkg:github/gleam-wisp/wisp\", \"packageName\": \"gleam-wisp/wisp\", \"programFiles\": [\"src/wisp.gleam\"], \"collectionURL\": \"https://github.com\", \"defaultStatus\": \"unaffected\", \"programRoutines\": [{\"name\": \"wisp:multipart_body/7\"}, {\"name\": \"wisp:multipart_headers/5\"}]}], \"references\": [{\"url\": \"https://github.com/gleam-wisp/wisp/security/advisories/GHSA-8645-p2v4-73r2\", \"tags\": [\"vendor-advisory\", \"related\"]}, {\"url\": \"https://cna.erlef.org/cves/CVE-2026-32145.html\", \"tags\": [\"related\"]}, {\"url\": \"https://osv.dev/vulnerability/EEF-CVE-2026-32145\", \"tags\": [\"related\"]}, {\"url\": \"https://github.com/gleam-wisp/wisp/commit/7a978748e12ab29db232c222254465890e1a4a90\", \"tags\": [\"patch\"]}], \"workarounds\": [{\"lang\": \"en\", \"value\": \"Deploy a reverse proxy (such as nginx or HAProxy) in front of the wisp application and configure it to enforce request body size limits.\", \"supportingMedia\": [{\"type\": \"text/html\", \"value\": \"Deploy a reverse proxy (such as nginx or HAProxy) in front of the wisp application and configure it to enforce request body size limits.\", \"base64\": false}]}], \"x_generator\": {\"engine\": \"Vulnogram 1.0.0\"}, \"descriptions\": [{\"lang\": \"en\", \"value\": \"Allocation of Resources Without Limits or Throttling vulnerability in gleam-wisp wisp allows a denial of service via multipart form body parsing.\\n\\nThe multipart_body function bypasses configured max_body_size and max_files_size limits. When a multipart boundary is not present in a chunk, the parser takes the MoreRequiredForBody path, which appends the chunk to the output but passes the quota unchanged to the recursive call. Only the final chunk containing the boundary is counted via decrement_quota. The same pattern exists in multipart_headers, where MoreRequiredForHeaders recurses without calling decrement_body_quota.\\n\\nAn unauthenticated attacker can exhaust server memory or disk by sending arbitrarily large multipart form submissions in a single HTTP request.\\n\\nThis issue affects wisp: from 0.2.0 before 2.2.2.\", \"supportingMedia\": [{\"type\": \"text/html\", \"value\": \"Allocation of Resources Without Limits or Throttling vulnerability in gleam-wisp wisp allows a denial of service via multipart form body parsing.\u003cp\u003eThe \u003ctt\u003emultipart_body\u003c/tt\u003e function bypasses configured \u003ctt\u003emax_body_size\u003c/tt\u003e and \u003ctt\u003emax_files_size\u003c/tt\u003e limits. When a multipart boundary is not present in a chunk, the parser takes the \u003ctt\u003eMoreRequiredForBody\u003c/tt\u003e path, which appends the chunk to the output but passes the quota unchanged to the recursive call. Only the final chunk containing the boundary is counted via \u003ctt\u003edecrement_quota\u003c/tt\u003e. The same pattern exists in \u003ctt\u003emultipart_headers\u003c/tt\u003e, where \u003ctt\u003eMoreRequiredForHeaders\u003c/tt\u003e recurses without calling \u003ctt\u003edecrement_body_quota\u003c/tt\u003e.\u003c/p\u003e\u003cp\u003eAn unauthenticated attacker can exhaust server memory or disk by sending arbitrarily large multipart form submissions in a single HTTP request.\u003c/p\u003e\u003cp\u003eThis issue affects wisp: from 0.2.0 before 2.2.2.\u003c/p\u003e\", \"base64\": false}]}], \"problemTypes\": [{\"descriptions\": [{\"lang\": \"en\", \"type\": \"CWE\", \"cweId\": \"CWE-770\", \"description\": \"CWE-770 Allocation of Resources Without Limits or Throttling\"}]}], \"cpeApplicability\": [{\"nodes\": [{\"negate\": false, \"cpeMatch\": [{\"criteria\": \"cpe:2.3:a:gleam-wisp:wisp:*:*:*:*:*:*:*:*\", \"vulnerable\": true, \"versionEndExcluding\": \"2.2.2\", \"versionStartIncluding\": \"0.2.0\"}], \"operator\": \"OR\"}], \"operator\": \"AND\"}], \"providerMetadata\": {\"orgId\": \"6b3ad84c-e1a6-4bf7-a703-f496b71e49db\", \"shortName\": \"EEF\", \"dateUpdated\": \"2026-04-07T04:07:10.339Z\"}}}",
      "cveMetadata": "{\"cveId\": \"CVE-2026-32145\", \"state\": \"PUBLISHED\", \"dateUpdated\": \"2026-04-07T04:07:10.339Z\", \"dateReserved\": \"2026-03-10T22:37:29.212Z\", \"assignerOrgId\": \"6b3ad84c-e1a6-4bf7-a703-f496b71e49db\", \"datePublished\": \"2026-04-02T10:30:47.485Z\", \"assignerShortName\": \"EEF\"}",
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }
  }
}


Log in or create an account to share your comment.




Tags
Taxonomy of the tags.


Loading…

Loading…

Loading…

Sightings

Author Source Type Date

Nomenclature

  • Seen: The vulnerability was mentioned, discussed, or seen somewhere by the user.
  • Confirmed: The vulnerability is confirmed from an analyst perspective.
  • Published Proof of Concept: A public proof of concept is available for this vulnerability.
  • Exploited: This vulnerability was exploited and seen by the user reporting the sighting.
  • Patched: This vulnerability was successfully patched by the user reporting the sighting.
  • Not exploited: This vulnerability was not exploited or seen by the user reporting the sighting.
  • Not confirmed: The user expresses doubt about the veracity of the vulnerability.
  • Not patched: This vulnerability was not successfully patched by the user reporting the sighting.


Loading…

Loading…