Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Jupyter Security

Status: In Progress · Proposal

September 2026

Summary of Work Completed

This month was focused on a triage catchup (20 advisories + 4 emails), mostly closing a lot of duplicates. We have a few vulnerabilities that are reported dozen of times due to AI.

The counterpart is that I had no time to write fixes, although I reached with two subprojects about open vulnerabilities.

I put together some statistics in JupyterLab: https://jupyter.zulipchat.com/#narrow/channel/538444-Security.5BPublic.5D/topic/Statistics/near/619738010 - the code has been pushed on the public security repository https://github.com/jupyter/security/tree/main/lab

I am drafting a new funding proposal with Carreau to continue this proposal after December

I was elected as the software steering security representative. Thanks to Jason Grout for handling the documentations updates consecutive to this!

Deliverables/Milestones

Documentation:

Processed GHSAs:

Closed as duplicates:

Click to expand
  • GHSA-97p8-mh5v-38xq

  • GHSA-vccx-hp5j-37j8

  • GHSA-7q97-7g2m-4354

  • GHSA-x5jj-xcv9-4w75

  • GHSA-53c8-rxh3-3jq5

  • GHSA-r3c6-864h-gvwh

  • GHSA-q6q9-3wvc-924p

  • GHSA-xqvq-73g7-v63q

  • GHSA-6j57-j9w6-6fcw

  • GHSA-mcx4-2x35-qq67

  • GHSA-9fr6-rgcw-3cwp

  • GHSA-ch66-5pm6-f4c9

Closed as not a vulnerability:

Click to expand
  • GHSA-6pmw-6fjc-rqjj

Accepted

Click to expand
  • GHSA-7rvj-4prw-5h89

  • GHSA-4hx8-6pmx-236v

  • GHSA-h2fj-rjp3-387r

  • GHSA-65hh-f7w2-rh2m

  • GHSA-f249-v4h8-2j54

  • GHSA-6c95-ghgq-3p9c

  • GHSA-chg9-78g7-w373

Published

Click to expand
  • GHSA-c3mw-737p-c7g2

Statistics for August

Advisories in triage

Accepted advisories waiting for a fix

Published advisories

Challenges or Risks

Backlog of accepted advisories waiting to be fixed is high and not decreasing.

Reports keep flowing in at high volumes.

Budget Update

Next Steps

Long term initiatives, not yet started:

Appendix

Script used for statistics

See August 2026 report.

August 2026

Summary of Work Completed

11 reports were triaged including 3 by email, and fixes were written or reviewed for four of the accepted ones.

22 new advisories were opened across the Jupyter orgs in July + 8 emails received at security@jupyter.org.

Jupyterlab desktop got its first release in two years to address a security issue that got published in a blog article.

Ten advisories were published this month, most of them in jupyterlab.

Deliverables/Milestones

Reports accepted and turned into advisories:

Reports triaged and closed:

Published :

Supply chain / tooling

Statistics for July

Advisories in triage

Accepted advisories waiting for a fix

Published advisories

Definitions

Challenges or Risks

Incoming volume is still the main risk: 22 new advisories opened this month. A large share of the reports still looks AI-generated and low signal.

The draft backlog is still very large.

Budget Update

Next Steps

Appendix

Script used for statistics

using https://github.com/Yann-P/github-security-overview @ 111a70467f8076740629a8c92fbafa233a9640df

JUPYTER_ORGS=(binder-examples binderhub-ci-repos ipython jupyter jupyter-attic jupyter-book jupyter-governance jupyter-incubator jupyter-resources jupyter-server jupyter-standard jupyter-standards jupyter-widgets jupyter-xeus jupytercon jupyterhealth jupyterhub jupyterlab jupyterlite pickleshare voila-dashboards voila-gallery)
FROM_DATE=2026-07-01
TO_DATE=2026-08-01

security-overview "${JUPYTER_ORGS[@]}" --state triage | wc -l
security-overview "${JUPYTER_ORGS[@]}" --state triage | datamash median 1
security-overview "${JUPYTER_ORGS[@]}" --state triage --opened-from $FROM_DATE --opened-to $TO_DATE | wc -l
# All states, to measure incoming volume
security-overview "${JUPYTER_ORGS[@]}" --opened-from $FROM_DATE --opened-to $TO_DATE | wc -l

security-overview "${JUPYTER_ORGS[@]}" --state draft | wc -l
security-overview "${JUPYTER_ORGS[@]}" --state draft | datamash median 1
# Open for more than 90 days
security-overview "${JUPYTER_ORGS[@]}" --state draft --opened-to $(date -v-90d +%Y-%m-%d) | wc -l

security-overview "${JUPYTER_ORGS[@]}" --state published | wc -l
security-overview "${JUPYTER_ORGS[@]}" --state published | datamash median 3 # 3 is the column for time to publication

security-overview "${JUPYTER_ORGS[@]}" --state published --published-from $FROM_DATE --published-to $TO_DATE | wc -l
security-overview "${JUPYTER_ORGS[@]}" --state published --published-from $FROM_DATE --published-to $TO_DATE | datamash median 3

July 2026

Summary of Work Completed

This month was focused on supply chain and measurements included below, and maintenance about the email addresses used to reach us and PGP keys. A few fixes. Issues in triage are stacking up and I need to prioritize this for the beginning of July.

Deliverables/Milestones

Statistics for June

Advisories in triage

Accepted advisories waiting for a fix

Published advisories

Definitions

Challenges or Risks

Lots of incoming reports, lots of them seem to be AI.

Budget Update

Next Steps

Publish key indicators on jupyter.org for transparency

Catch up on triage (lots of reports lately).

Appendix

Script used for statistics

using https://github.com/Yann-P/github-security-overview @ 5bb654593f6bbbd700a108b59c6fef5873edfea3

JUPYTER_ORGS=(binder-examples binderhub-ci-repos ipython jupyter jupyter-attic jupyter-book jupyter-governance jupyter-incubator jupyter-resources jupyter-server jupyter-standard jupyter-standards jupyter-widgets jupyter-xeus jupytercon jupyterhealth jupyterhub jupyterlab jupyterlite pickleshare voila-dashboards voila-gallery)
FROM_DATE=2026-06-01
TO_DATE=2026-07-01

security-overview "${JUPYTER_ORGS[@]}" --state triage | wc -l
security-overview "${JUPYTER_ORGS[@]}" --state triage | datamash median 1

security-overview "${JUPYTER_ORGS[@]}" --state draft | wc -l
security-overview "${JUPYTER_ORGS[@]}" --state draft | datamash median 1
# Open for more than 90 days
security-overview "${JUPYTER_ORGS[@]}" --state draft --opened-to $(date -v-90d +%Y-%m-%d) | wc -l

security-overview "${JUPYTER_ORGS[@]}" --state published | wc -l
security-overview "${JUPYTER_ORGS[@]}" --state published | datamash median 3 # 3 is the column for time to publication

security-overview "${JUPYTER_ORGS[@]}" --state published --published-from $FROM_DATE --published-to $TO_DATE | wc -l
security-overview "${JUPYTER_ORGS[@]}" --state published --published-from $FROM_DATE --published-to $TO_DATE | datamash median 3

June 2026

Context: contract with Yann-P started on 2026-06-01 (2 days ago) for the next 6 months at 8h/week as part of jupyter-governance/funding-proposals#28.

Summary of Work Completed

As volunteer work before the contract started

After start of contract

Deliverables/Milestones

As volunteer work before the contract started

Published advisories

And a few others that are not yet published.

After start of contract

Supply chain inventory scripts in jupyter/cve

Challenges or Risks

Budget Update

Next Steps