Skip to content
Heist/ feed
Back to feed
Medium

NiceGUI's unvalidated chunk size parameter in media routes can cause memory exhaustion

Type: advisorySources: OSV

NiceGUI is a Python-based UI framework. Prior to version 3.9.0, NiceGUI's app.add_media_file() and app.add_media_files() media routes accept a user-controlled query parameter that influences how files are read during streaming. The parameter is passed to the range-response implementation without validation, allowing an attacker to bypass chunked streaming and force the server to load entire files into memory at once. With large media files and concurrent requests, this can lead to excessive memory consumption, degraded performance, or denial of service. This issue has been patched in version 3.9.0.

Products
Not specified
Affected versions
Not specified
Fixed versions
Not specified
CVEs
CVE-2026-33332
Confirmed fixed CVEs
Not specified
Updated in this feed
3 Nov 2026, 14:07 UTC · Revision 1

Source evidence

NiceGUI's unvalidated chunk size parameter in media routes can cause memory exhaustion

core-osv · Original source

Published 24 Mar 2026, 19:20 UTC

NiceGUI is a Python-based UI framework. Prior to version 3.9.0, NiceGUI's app.add_media_file() and app.add_media_files() media routes accept a user-controlled query parameter that influences how files are read during streaming. The parameter is passed to the range-response implementation without validation, allowing an attacker to bypass chunked streaming and force the server to load entire files into memory at once. With large media files and concurrent requests, this can lead to excessive memory consumption, degraded performance, or denial of service. This issue has been patched in version 3.9.0.

osv:CVE-2026-33332
Complete source record
{
  "id": "9e54464d580417537ea2b1fb7cac0846f5f9acf4e3b2d16c6370eb17a56ddb23",
  "url": "https://osv.dev/vulnerability/CVE-2026-33332",
  "method": "structured",
  "payload": {
    "kind": "advisory",
    "title": "NiceGUI's unvalidated chunk size parameter in media routes can cause memory exhaustion",
    "summary": "NiceGUI is a Python-based UI framework. Prior to version 3.9.0, NiceGUI's app.add_media_file() and app.add_media_files() media routes accept a user-controlled query parameter that influences how files are read during streaming. The parameter is passed to the range-response implementation without validation, allowing an attacker to bypass chunked streaming and force the server to load entire files into memory at once. With large media files and concurrent requests, this can lead to excessive memory consumption, degraded performance, or denial of service. This issue has been patched in version 3.9.0.",
    "evidence": "osv:CVE-2026-33332",
    "products": [],
    "severity": "medium",
    "structured": {
      "id": "CVE-2026-33332",
      "aliases": [
        "CVE-2026-33332",
        "GHSA-w5g8-5849-vj76",
        "PYSEC-2026-2233"
      ],
      "metrics": [
        {
          "type": "CVSS_V4",
          "score": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N"
        }
      ],
      "affected": [
        {
          "ranges": [
            {
              "repo": "https://github.com/zauberzeug/nicegui",
              "type": "GIT",
              "events": [
                {
                  "introduced": "0"
                },
                {
                  "fixed": "9a03535786b3411b48f70a7fc5c46ba8a42dc02f"
                },
                {
                  "fixed": "9026962b8c4f3f225c98b2fbc35aa6b60cb3495b"
                }
              ],
              "database_specific": {
                "extracted_events": [
                  {
                    "cpe": "cpe:2.3:a:zauberzeug:nicegui:*:*:*:*:*:*:*:*",
                    "range": [
                      {
                        "introduced": "0"
                      },
                      {
                        "fixed": "3.9.0"
                      }
                    ],
                    "source": "CPE_RANGE"
                  },
                  {
                    "range": [
                      {
                        "fixed": "9026962b8c4f3f225c98b2fbc35aa6b60cb3495b"
                      }
                    ],
                    "source": "REFERENCES_COMMIT"
                  },
                  {
                    "range": [
                      {
                        "fixed": "9a03535786b3411b48f70a7fc5c46ba8a42dc02f"
                      }
                    ],
                    "source": "REFERENCES_TAG",
                    "original_tag": "v3.9.0"
                  }
                ]
              }
            }
          ],
          "versions": [
            "v3.8.0",
            "v3.7.1",
            "v3.7.0",
            "v3.6.1",
            "v3.6.0",
            "v3.5.0",
            "v3.4.1",
            "v3.4.0",
            "v3.3.1",
            "v3.3.0",
            "v3.2.0",
            "v3.1.0",
            "v3.0.4",
            "v3.0.3",
            "v3.0.2",
            "v3.0.1",
            "v3.0.0",
            "v2.24.2",
            "v2.24.1",
            "v2.24.0",
            "v2.23.3",
            "v2.23.2",
            "v2.23.1",
            "v2.23.0",
            "v2.22.1",
            "v2.22.0",
            "v2.21.0",
            "v2.20.0",
            "v2.19.0",
            "v2.18.0",
            "v2.17.0",
            "v2.16.1",
            "v2.16.0",
            "v2.15.0",
            "v2.14.1",
            "v2.14.0",
            "v2.13.0",
            "v2.12.1",
            "v2.12.0",
            "v2.11.1",
            "v2.11.0",
            "v2.10.1",
            "v2.10.0",
            "v2.9.1",
            "v2.9.0",
            "v2.8.1",
            "v2.8.0",
            "v2.7.0",
            "v2.5.0",
            "v2.4.0",
            "v2.3.0",
            "v2.2.0",
            "v2.1.0",
            "v2.0.1",
            "v2.0.0",
            "v1.4.37",
            "v1.4.36",
            "v1.4.35",
            "v1.4.34",
            "v1.4.33",
            "v1.4.32",
            "v1.4.31",
            "v1.4.30",
            "v1.4.29",
            "v1.4.28",
            "v1.4.27",
            "v1.4.26",
            "v1.4.25",
            "v1.4.24",
            "v1.4.23",
            "v1.4.22",
            "v1.4.21",
            "v1.4.20",
            "v1.4.19",
            "v1.4.18",
            "v1.4.17",
            "v1.4.16",
            "v1.4.15",
            "v1.4.14",
            "v1.4.13",
            "v1.4.12",
            "v1.4.11",
            "v1.4.10",
            "v1.4.9",
            "v1.4.8",
            "v1.4.7",
            "v1.4.6",
            "v1.4.5",
            "v1.4.4",
            "v1.4.3",
            "v1.4.2",
            "v1.4.1",
            "v1.4.0",
            "v1.3.16",
            "v1.3.15",
            "v1.3.14",
            "v1.3.13",
            "v1.3.12",
            "v1.3.11",
            "v1.3.10",
            "v1.3.9",
            "v1.3.8",
            "v1.3.7",
            "v1.3.6",
            "v1.3.5",
            "v1.3.4",
            "v1.3.2",
            "v1.3.1",
            "v1.3.0",
            "v1.2.6",
            "v1.2.5",
            "v1.2.4",
            "v1.2.3",
            "v1.2.2",
            "v1.1.11",
            "v1.1.10",
            "v1.1.9",
            "v1.1.8",
            "v1.1.7",
            "v1.1.6",
            "v1.1.5",
            "v1.1.4",
            "v1.1.3",
            "v1.1.2",
            "v1.1.1",
            "v1.1.0",
            "v1.0.10",
            "v1.0.9",
            "v0.9.26",
            "v1.0.8",
            "v1.0.7",
            "v1.0.6",
            "v1.0.5",
            "v1.0.4",
            "v1.0.3",
            "v1.0.2",
            "v1.0.1",
            "v1.0.0",
            "v0.9.25",
            "v0.9.24",
            "v0.9.22",
            "v0.9.21",
            "v0.9.20",
            "v0.9.19",
            "v0.9.18",
            "v0.9.17",
            "v0.9.16",
            "v0.9.15",
            "v0.9.14",
            "v0.9.13",
            "v0.9.12",
            "v0.9.11",
            "v0.9.10",
            "v0.9.9",
            "v0.9.8",
            "v0.9.7",
            "v0.9.6",
            "v0.9.5",
            "v0.9.4",
            "v0.9.3",
            "v0.9.2",
            "v0.9.1",
            "v0.9.0",
            "v0.8.16",
            "v0.8.15",
            "v0.8.14",
            "v0.8.13",
            "v0.8.12",
            "v0.8.11",
            "v0.8.10",
            "v0.8.9",
            "v0.8.8",
            "v0.8.4",
            "v0.8.3",
            "v0.8.2",
            "v0.8.1",
            "v0.8.0",
            "v0.7.28",
            "v0.7.27",
            "v0.7.26",
            "v0.7.25",
            "v0.7.24",
            "v0.7.23",
            "v0.7.22",
            "v0.7.21",
            "v0.7.20",
            "v0.7.19",
            "v0.7.18",
            "v0.7.17",
            "v0.7.16",
            "v0.7.15",
            "v0.7.14",
            "v0.7.13",
            "v0.7.12",
            "v0.7.11",
            "v0.7.10",
            "v0.7.9",
            "v0.7.8",
            "v0.7.7",
            "v0.7.6",
            "v0.7.5",
            "v0.7.4",
            "v0.7.3",
            "v0.7.2",
            "v0.7.1",
            "v0.7.0",
            "v0.6.13",
            "v0.6.12",
            "v0.6.11",
            "v0.6.10",
            "v0.6.9",
            "v0.6.8",
            "v0.6.7",
            "v0.6.6",
            "v0.6.5",
            "v0.6.4",
            "v0.6.3",
            "v0.6.2",
            "v0.6.1",
            "v0.6.0",
            "v0.5.9",
            "v0.5.8",
            "v0.5.7",
            "v0.5.6",
            "v0.5.5",
            "v0.5.4",
            "v0.5.2",
            "v0.5.1",
            "v0.5.0",
            "v0.4.15",
            "v0.4.14",
            "v0.4.13",
            "v0.4.12",
            "v0.4.11",
            "v0.4.10",
            "v0.4.9",
            "v0.4.8",
            "v0.4.7",
            "v0.4.6",
            "v0.4.5",
            "v0.4.4",
            "v0.4.3",
            "v0.4.2",
            "v0.4.1",
            "v0.4.0",
            "v0.3.9",
            "v0.3.8",
            "v0.3.7",
            "v0.3.6",
            "v0.3.5",
            "v0.3.4",
            "v0.3.3",
            "v0.3.2",
            "v0.2.15",
            "v0.2.14",
            "v0.2.13",
            "v0.2.12",
            "v0.2.4",
            "v0.2.10",
            "v0.2.9",
            "v0.2.8",
            "v0.2.7",
            "v0.2.6",
            "v0.2.5",
            "v0.2.3",
            "v0.2.2",
            "v0.2.1",
            "v0.2.0",
            "v0.1.2"
          ],
          "database_specific": {
            "source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-33332.json"
          }
        }
      ],
      "modified": "2026-10-28T02:30:29.239640761Z",
      "provider": "osv",
      "references": [
        "https://github.com/zauberzeug/nicegui/releases/tag/v3.9.0",
        "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/33xxx/CVE-2026-33332.json",
        "https://github.com/zauberzeug/nicegui/security/advisories/GHSA-w5g8-5849-vj76",
        "https://nvd.nist.gov/vuln/detail/CVE-2026-33332",
        "https://github.com/zauberzeug/nicegui/commit/9026962b8c4f3f225c98b2fbc35aa6b60cb3495b"
      ],
      "provider_metadata": {
        "cwe_ids": [
          "CWE-20",
          "CWE-770"
        ],
        "cna_assigner": "GitHub_M",
        "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/33xxx/CVE-2026-33332.json"
      }
    },
    "related_cves": [
      {
        "value": "CVE-2026-33332",
        "evidence": "/id"
      }
    ],
    "security_relevant": true,
    "severity_evidence": "/severity/0/score"
  },
  "source_id": "core-osv",
  "document_id": 496104,
  "published_at": "2026-03-24T19:20:53.386+00:00"
}