CVE-2026-23528

Dask Distributed: When 'Worker Not Found' Means 'Shell Found'

Amit Schendel
Amit Schendel
Senior Security Researcher

Jan 16, 2026·5 min read·2 visits

Executive Summary (TL;DR)

Dask Distributed < 2026.1.0 reflects the worker hostname in error messages without sanitization. In Jupyter environments using `jupyter-server-proxy`, this allows attackers to inject JavaScript that talks to the Jupyter API, upgrading a simple XSS into full Remote Code Execution (RCE).

A classic reflected Cross-Site Scripting (XSS) vulnerability in Dask Distributed turns deadly when paired with Jupyter Lab. By failing to sanitize error messages involving non-existent workers, attackers can piggyback on the Jupyter origin to execute arbitrary Python code on the server.

Fix Analysis (1)

Technical Appendix

CVSS Score
5.3/ 10
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N

Affected Systems

Dask Distributed < 2026.1.0Jupyter Lab (when running dask-labextension)jupyter-server-proxy environments

Affected Versions Detail

Product
Affected Versions
Fixed Version
distributed
dask
< 2026.1.02026.1.0
AttributeDetail
CWE IDCWE-79 (Improper Neutralization of Input During Web Page Generation)
CVSS v4.05.3 (Medium) - Context Dependent High
Attack VectorNetwork (Reflected XSS)
Privileges RequiredNone (Victim interaction required)
User InteractionRequired (Phishing)
Exploit StatusPoC Available
CWE-79
Cross-site Scripting (XSS)

The software does not neutralize or incorrectly neutralizes user-controllable input before it is placed in output that is used as a web page that is served to other users.

Vulnerability Timeline

Fix merged into master
2026-01-16
CVE Published
2026-01-16