90,626 Jupyter Notebooks Are Publicly Indexed: The Difference Between Sharing and Exposing
Jupyter notebooks are where analysis happens: data exploration, model training, ad-hoc automation. They are also, when left on the public internet without authentication, arbitrary code execution as a service — anyone who reaches the UI can open a terminal and run commands as the service user. The exposure count below is one of the largest among developer-facing services.
The measurement
ZoomEye's app="Jupyter Notebook" fingerprint matched 90,626 hosts as of 2026-09-21 (sub_type=all, pagesize=1). The fingerprint does not distinguish configured authentication from unauthenticated instances; the number is an upper bound for the population that needs checking, not a vulnerability count.
Why unauthenticated Jupyter is remote code execution
The notebook interface includes a kernel terminal. An unauthenticated instance hands any visitor a shell as the notebook user — with whatever permissions and network position that user has, including access to cloud metadata endpoints. Jupyter instances have appeared repeatedly in cryptomining and ransomware kill chains, and the project's security documentation describes token authentication as the default since version 5.0, meaning instances without it are deliberately or accidentally misconfigured.
Reading the count
Ninety thousand is the aggregate across the internet. The operational question each organization answers locally is whether any of its analysis hosts appear in a public-facing position. Because notebooks are spun up by individual analysts, they are the classic ungoverned asset: launched outside the asset inventory, bound to 0.0.0.0, forgotten. The count is a reminder that the ungoverned set is not small.
Defensive checklist
- Bind notebook servers to localhost or an internal interface; access through SSH tunnels or an authenticated proxy, per Jupyter's public server documentation.
- Enforce token or password authentication; never disable it on multi-user hosts.
- Constrain the notebook user's permissions; never run as root.
- Treat any public Jupyter in your IP space as an immediate incident: assume code execution already happened.
References
- Jupyter Server security documentation — https://jupyter-server.readthedocs.io/en/latest/operators/security.html (retrieved 2026-09-21)
- Jupyter public server guide — https://jupyter-notebook.readthedocs.io/en/stable/public_server.html (retrieved 2026-09-21)
- ZoomEye query
app="Jupyter Notebook"executed 2026-09-21, sub_type=all, pagesize=1; count 90,626.
Top comments (0)