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

October 2026

Summary of Work Completed

September had the highest incoming volume on record: 38 new advisories were opened across the Jupyter orgs (20 in August, 22 in July). Many reports are AI-assisted and long but that is nothing new.

More than half (23) were on JupyterHub repositories, including a batch of 11 from one reporter that minrk triaged the same day. The JupyterHub maintainers handled most of their own reports, thanks!

I also spent a good part of my time in September on preparing for Open Source Summit in Prague and Jupyter Open Studio day in London, that I will talk about in the next report.

The follow-up funding proposal I drafted with @Carreau jupyter-governance/funding-proposals#75 was approved by the Jupyter Foundation on 2026-10-02, which means 8 more hours per week will be allocated to security for the next three months (to 16h/week), plus some time allocated to Careau to provide expertise and support growing the security community.

Deliverables/Milestones

On triage:

On documentation:

On communication:

On long-term initiatives:

On supply chain:

On tooling:

Statistics for September

Advisories in triage

Accepted advisories waiting for a fix

Published advisories

Challenges or Risks

Incoming volume nearly doubled compared to August (38 vs 20).

Budget Update

Next Steps

Appendix

Script used for statistics

using https://github.com/Yann-P/github-security-overview @ 0a31e9e8b6f7027780401c5ee10af3021db46418

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-09-01
TO_DATE=2026-09-30

security-overview "${JUPYTER_ORGS[@]}" --state triage | wc -l
security-overview "${JUPYTER_ORGS[@]}" --state triage | datamash median 1
# Still in triage, but opened after the month
security-overview "${JUPYTER_ORGS[@]}" --state triage --opened-from 2026-10-01 | wc -l
security-overview "${JUPYTER_ORGS[@]}" --state triage --opened-from $FROM_DATE --opened-to $TO_DATE | wc -l
# All states, to measure incoming volume (one state at a time, see above)
for state in triage draft published closed; do
  security-overview "${JUPYTER_ORGS[@]}" --state $state --opened-from $FROM_DATE --opened-to $TO_DATE
done > opened.tsv
wc -l < opened.tsv
cut -f4 opened.tsv | sort | uniq -c # by current state (column 4)

security-overview "${JUPYTER_ORGS[@]}" --state draft | wc -l
security-overview "${JUPYTER_ORGS[@]}" --state draft | datamash median 1
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

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