Skip to content

Add CVE-2026-22778 vLLM Information Disclosure Template#15358

Open
radraccoon wants to merge 3 commits intoprojectdiscovery:mainfrom
epsilon-sh:add-CVE-2026-22778
Open

Add CVE-2026-22778 vLLM Information Disclosure Template#15358
radraccoon wants to merge 3 commits intoprojectdiscovery:mainfrom
epsilon-sh:add-CVE-2026-22778

Conversation

@radraccoon
Copy link
Copy Markdown

@radraccoon radraccoon commented Feb 16, 2026

Description

Adds nuclei template for CVE-2026-22778 - vLLM information disclosure via PIL exception memory leak.

Details

  • CVE: CVE-2026-22778
  • CVSS: 9.8 (Critical)
  • CWE: CWE-209 (Information exposure through an error message)
  • Product: vLLM
  • Affected Versions: 0.8.3 through 0.14.0
  • Fixed: 0.14.1

Detection Method

Non-destructive two-step API probe:

  1. GET /v1/models to retrieve model ID
  2. POST malformed base64 image to /v1/chat/completions
  3. Match PIL BytesIO memory address leak in error response

Validation

  • Validated with a host running a vulnerable version
  • Validated with a host running a patched version

References

@pussycat0x pussycat0x added the Status: In Progress This issue is being worked on, and has someone assigned. label Feb 16, 2026
Tested against mock vLLM servers:
- Vulnerable (PIL BytesIO leak): template fires, extracts 0x address — true positive
- Patched (generic error): template silent — true negative

Validated with nuclei v3.7.0.
@radraccoon
Copy link
Copy Markdown
Author

Verification

Tested against mock vLLM API servers (Node.js) simulating both vulnerable and patched responses:

True Positive (vulnerable mock — PIL BytesIO memory leak in error):

[CVE-2026-22778:leaked_address] [http] [critical] http://localhost:8000/v1/chat/completions ["0x7f3a4c2b8f40"]

True Negative (patched mock — generic error without memory address):

No results found.

Template correctly:

  • Extracts model ID from /v1/models (step 1)
  • Sends malformed image to /v1/chat/completions (step 2)
  • Matches PIL BytesIO object at 0x... pattern in error response
  • Extracts the leaked heap address
  • Stays silent when error message doesn't contain memory address

Validated with nuclei v3.7.0. Pushed verified: true.

Separate raw blocks don't share extracted variables in nuclei.
Merged GET /v1/models and POST /v1/chat/completions into one raw
block so {{model_id}} flows correctly. Combined duplicate extractors
keys. Verified: 1 TP + 1 TN against mock servers.
@pussycat0x
Copy link
Copy Markdown
Contributor

Hi @radraccoon, Could you please run Nuclei with the -debug flag and share the debug output?
nuclei -u target -t template.yaml -debug This will help us further validation.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Status: In Progress This issue is being worked on, and has someone assigned.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants