Every CVE Search/ Get API key

CVE-2026-105760

vLLM: GLMGA video sampling permits request-driven CPU and memory exhaustion

5.3 MediumFix available

vLLM is an inference and serving engine for large language models. Prior to 0.30.0, a caller can use the request-level media_io_kwargs field to select the GLMGA video backend and supply large values for the fps and max_frames options without a strict work ceiling. GLMGA constructs and deduplicates an attacker-sized pre-decode frame-index list, allowing a compact request and tiny valid video to consume disproportionate CPU time and memory in the shared media-loading executor. This issue is fixed in version 0.30.0.

Attack profile

How easy it is to exploit

Attack vector
Network
Complexity
Low
Privileges needed
None
User interaction
None

What an attacker can affect

Confidentiality
None
Integrity
None
Availability
Low

Exploit likelihood

0.30%Unchanged since Oct 6, 2026
90%50%10%1%

What each source reports

CVE List Score used 5.3

vLLM: GLMGA video sampling permits request-driven CPU and memory exhaustion

vLLM is an inference and serving engine for large language models. Prior to 0.30.0, a caller can use the request-level media_io_kwargs field to select the GLMGA video backend and supply large values for the fps and max_frames options without a strict work ceiling. GLMGA constructs and deduplicates an attacker-sized pre-decode frame-index list, allowing a compact request and tiny valid video to consume disproportionate CPU time and memory in the shared media-loading executor. This issue is fixed in version 0.30.0.

Record
CVE-2026-105760
CVSS 3.1
5.3 MediumCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L
Weakness
CWE-400
Updated
2026-11-02
EUVDEUVD-2026-92851 5.3

vLLM is an inference and serving engine for large language models. Prior to 0.30.0, a caller can use the request-level media_io_kwargs field to select the GLMGA video backend and supply large values for the fps and max_frames options without a strict work ceiling. GLMGA constructs and deduplicates an attacker-sized pre-decode frame-index list, allowing a compact request and tiny valid video to consume disproportionate CPU time and memory in the shared media-loading executor. This issue is fixed in version 0.30.0.

Record
EUVD-2026-92851
CVSS 3.1
5.3 MediumCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L
Updated
2026-11-02
GitHub AdvisoriesGHSA-58v5-2m8f-94pr 5.3

vLLM: GLMGA video sampling permits request-driven CPU and memory exhaustion

Summary

The OpenAI-compatible chat endpoint accepts request-level video loader options through media_io_kwargs. A caller can select the GLMGA sampler and provide large fps and max_frames values. GLMGA first constructs an attacker-sized Python index list and then deduplicates it, even when the supplied video contains only a few frames. This work occurs in the shared media-loading executor before frame reads, allowing a tiny valid video and compact JSON options to consume disproportionate CPU time and memory and delay unrelated media requests.

The demonstrated impact is partial denial of service. No memory corruption, data disclosure, or code execution is claimed.

Affected configuration

The server must expose chat completions for a video-capable model and accept request-level media_io_kwargs. The model does not need to use GLMGA by default because the request value overrides the model's loader mapping. The proof of concept uses an inline two-frame video and explicitly selects the OpenCV decoder, so no external media host or GPU decoder is required.

The request is reachable without vLLM credentials when no API key is configured. With API-key authentication enabled, any caller holding a valid key can reach the same path.

Attack surface

A remote caller submits a valid chat-completion request with a small video and the following request-level options:

{
  "media_io_kwargs": {
    "video": {
      "video_backend": "glmga",
      "backend": "opencv",
      "fps": 500000,
      "max_frames": 500000
    }
  }
}

Increasing both numeric values increases temporary list construction and deduplication work even when the final decoded frame set remains unchanged.

Root cause

  1. ChatCompletionRequest exposes media_io_kwargs as request-controlled nested values: protocol.py#L365-L371.
  2. The request options are carried into chat parameters without a numeric work bound on GLMGA's fps or max_frames: protocol.py#L571-L599.
  3. Media options are merged so request values override configured defaults, including video_backend: connector.py#L577-L605.
  4. The connector selects a registered video loader and runs media loading through the shared executor: video.py#L28-L66 and connector.py#L44-L47.
  5. GLMGA calculates extract_t = min(int(duration * fps), max_frames), builds a list with that many entries, and deduplicates it before decoding frames: video.py#L667-L740.
  6. The OpenCV decoder receives the already-deduplicated indices, so a two-frame file can trigger a large intermediate allocation while producing only two decoded frames: opencv.py#L28-L50.

The missing invariant is a strict upper bound on sampling work before the index list is constructed. Bounding decoded output after deduplication does not bound the vulnerable intermediate computation.

Suggested remediation

Validate request-level video sampling options before dispatching work to the media executor. Enforce conservative absolute limits for fps, max_frames, and especially the computed candidate…

Record
GHSA-58v5-2m8f-94pr
CVSS 3.1
5.3 MediumCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L
Weakness
CWE-400
Updated
2026-11-02
NVD 5.3

vLLM is an inference and serving engine for large language models. Prior to 0.30.0, a caller can use the request-level media_io_kwargs field to select the GLMGA video backend and supply large values for the fps and max_frames options without a strict work ceiling. GLMGA constructs and deduplicates an attacker-sized pre-decode frame-index list, allowing a compact request and tiny valid video to consume disproportionate CPU time and memory in the shared media-loading executor. This issue is fixed in version 0.30.0.

Record
CVE-2026-105760
CVSS 3.1
5.3 MediumCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L
Weakness
CWE-400
Updated
2026-11-02
OSV 5.3

vLLM: GLMGA video sampling permits request-driven CPU and memory exhaustion

vLLM is an inference and serving engine for large language models. Prior to 0.30.0, a caller can use the request-level media_io_kwargs field to select the GLMGA video backend and supply large values for the fps and max_frames options without a strict work ceiling. GLMGA constructs and deduplicates an attacker-sized pre-decode frame-index list, allowing a compact request and tiny valid video to consume disproportionate CPU time and memory in the shared media-loading executor. This issue is fixed in version 0.30.0.

Record
CVE-2026-105760
CVSS 3.1
5.3 MediumCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L
Weakness
CWE-400
Updated
2026-11-04
OSVGHSA-58v5-2m8f-94pr 5.3

vLLM: GLMGA video sampling permits request-driven CPU and memory exhaustion

Summary

The OpenAI-compatible chat endpoint accepts request-level video loader options through media_io_kwargs. A caller can select the GLMGA sampler and provide large fps and max_frames values. GLMGA first constructs an attacker-sized Python index list and then deduplicates it, even when the supplied video contains only a few frames. This work occurs in the shared media-loading executor before frame reads, allowing a tiny valid video and compact JSON options to consume disproportionate CPU time and memory and delay unrelated media requests.

The demonstrated impact is partial denial of service. No memory corruption, data disclosure, or code execution is claimed.

Affected configuration

The server must expose chat completions for a video-capable model and accept request-level media_io_kwargs. The model does not need to use GLMGA by default because the request value overrides the model's loader mapping. The proof of concept uses an inline two-frame video and explicitly selects the OpenCV decoder, so no external media host or GPU decoder is required.

The request is reachable without vLLM credentials when no API key is configured. With API-key authentication enabled, any caller holding a valid key can reach the same path.

Attack surface

A remote caller submits a valid chat-completion request with a small video and the following request-level options:

{
  "media_io_kwargs": {
    "video": {
      "video_backend": "glmga",
      "backend": "opencv",
      "fps": 500000,
      "max_frames": 500000
    }
  }
}

Increasing both numeric values increases temporary list construction and deduplication work even when the final decoded frame set remains unchanged.

Root cause

  1. ChatCompletionRequest exposes media_io_kwargs as request-controlled nested values: protocol.py#L365-L371.
  2. The request options are carried into chat parameters without a numeric work bound on GLMGA's fps or max_frames: protocol.py#L571-L599.
  3. Media options are merged so request values override configured defaults, including video_backend: connector.py#L577-L605.
  4. The connector selects a registered video loader and runs media loading through the shared executor: video.py#L28-L66 and connector.py#L44-L47.
  5. GLMGA calculates extract_t = min(int(duration * fps), max_frames), builds a list with that many entries, and deduplicates it before decoding frames: video.py#L667-L740.
  6. The OpenCV decoder receives the already-deduplicated indices, so a two-frame file can trigger a large intermediate allocation while producing only two decoded frames: opencv.py#L28-L50.

The missing invariant is a strict upper bound on sampling work before the index list is constructed. Bounding decoded output after deduplication does not bound the vulnerable intermediate computation.

Suggested remediation

Validate request-level video sampling options before dispatching work to the media executor. Enforce conservative absolute limits for fps, max_frames, and especially the computed candidate…

Record
GHSA-58v5-2m8f-94pr
CVSS 3.1
5.3 MediumCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L
Weakness
CWE-400
Updated
2026-11-02
OSVPYSEC-2026-4307 5.3

vLLM: GLMGA video sampling permits request-driven CPU and memory exhaustion

Summary

The OpenAI-compatible chat endpoint accepts request-level video loader options through media_io_kwargs. A caller can select the GLMGA sampler and provide large fps and max_frames values. GLMGA first constructs an attacker-sized Python index list and then deduplicates it, even when the supplied video contains only a few frames. This work occurs in the shared media-loading executor before frame reads, allowing a tiny valid video and compact JSON options to consume disproportionate CPU time and memory and delay unrelated media requests.

The demonstrated impact is partial denial of service. No memory corruption, data disclosure, or code execution is claimed.

Affected configuration

The server must expose chat completions for a video-capable model and accept request-level media_io_kwargs. The model does not need to use GLMGA by default because the request value overrides the model's loader mapping. The proof of concept uses an inline two-frame video and explicitly selects the OpenCV decoder, so no external media host or GPU decoder is required.

The request is reachable without vLLM credentials when no API key is configured. With API-key authentication enabled, any caller holding a valid key can reach the same path.

Attack surface

A remote caller submits a valid chat-completion request with a small video and the following request-level options:

{
  "media_io_kwargs": {
    "video": {
      "video_backend": "glmga",
      "backend": "opencv",
      "fps": 500000,
      "max_frames": 500000
    }
  }
}

Increasing both numeric values increases temporary list construction and deduplication work even when the final decoded frame set remains unchanged.

Root cause

  1. ChatCompletionRequest exposes media_io_kwargs as request-controlled nested values: protocol.py#L365-L371.
  2. The request options are carried into chat parameters without a numeric work bound on GLMGA's fps or max_frames: protocol.py#L571-L599.
  3. Media options are merged so request values override configured defaults, including video_backend: connector.py#L577-L605.
  4. The connector selects a registered video loader and runs media loading through the shared executor: video.py#L28-L66 and connector.py#L44-L47.
  5. GLMGA calculates extract_t = min(int(duration * fps), max_frames), builds a list with that many entries, and deduplicates it before decoding frames: video.py#L667-L740.
  6. The OpenCV decoder receives the already-deduplicated indices, so a two-frame file can trigger a large intermediate allocation while producing only two decoded frames: opencv.py#L28-L50.

The missing invariant is a strict upper bound on sampling work before the index list is constructed. Bounding decoded output after deduplication does not bound the vulnerable intermediate computation.

Suggested remediation

Validate request-level video sampling options before dispatching work to the media executor. Enforce conservative absolute limits for fps, max_frames, and especially the computed candidate…

Record
PYSEC-2026-4307
CVSS 3.1
5.3 MediumCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L
Updated
2026-11-02

Affected products

Affected packages

Affected packages
PackageAffectedFixed
vllm
PyPI
0.23.0rc2 up to 0.30.0
0.30.0
vllm
PyPI
0.23.0rc2 up to 0.30.0, plus listed versions
0.23.00.24.00.25.00.25.10.26.0
Show 4 moreShow less
0.27.00.27.10.28.00.29.0
0.30.0

History

History
RecordedChangedSources
factsOSV
first indexedCVE List, EUVD, GitHub Advisories, NVD, OSV

Dates are when Every CVE recorded each change. Upstream dates may differ.

In short

CVE-2026-105760 is a medium vulnerability (CVSS 5.3) in Vllm, published October 5, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.30%, the 22nd percentile. Fixed in vllm 0.30.0.

References

This page doesn't list everything

Left out here: the rest of 3 source descriptions. The JSON record has them.

MoveEnter Open