<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>Jupyter Blog - Yann Pellegrini</title><link href="https://blog.jupyter.org/" rel="alternate"/><link href="https://blog.jupyter.org/feeds/author-yann-pellegrini.atom.xml" rel="self"/><id>https://blog.jupyter.org/</id><updated>2026-10-29T06:00:00+00:00</updated><subtitle>The Project Jupyter blog: news, releases, and community stories, archived from blog.jupyter.org.</subtitle><entry><title>Jupyter Security Council Updates</title><link href="https://blog.jupyter.org/posts/2026/jupyter-security-council-updates/" rel="alternate"/><published>2026-10-29T06:00:00+00:00</published><updated>2026-10-29T06:00:00+00:00</updated><author><name>Yann Pellegrini</name></author><id>tag:blog.jupyter.org,2026-10-29:/posts/2026/jupyter-security-council-updates/</id><summary type="html">&lt;p&gt;Current Jupyter Security Council initiatives and how AI security reports are impacting Project Jupyter.&lt;/p&gt;
</summary><content type="html">&lt;p class="standalone-image"&gt;&lt;img src="https://blog.jupyter.org/posts/2026/jupyter-security-council-updates/images/BJSHWFC2fl.webp" alt="Jupyter Security updates: triage, supply chain, prioritization, tooling, ownership, contributors" width="400" loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;p&gt;Unless you are a maintainer or vulnerability reporter, you may not hear about security often; in fact security ranked last in the &lt;a href="https://blog.jupyter.org/what-you-told-us-results-from-the-2026-jupyter-user-experience-and-product-enhancement-survey-9a2d911cf42f"&gt;2026 User Survey&lt;/a&gt;. Here is what the Jupyter Security Council is working on in 2026, the tricky bits, and where we’re heading.&lt;/p&gt;
&lt;h2 id="who-we-are"&gt;Who we are&lt;/h2&gt;
&lt;p&gt;The &lt;a href="https://github.com/jupyter/security#jupyter-security-subproject-council"&gt;Security Council&lt;/a&gt; is one of Jupyter’s &lt;a href="https://jupyter.org/governance/list-of-subprojects/"&gt;subprojects&lt;/a&gt;. Security triage, fixing and publication have always been handled by maintainers, and they still do much of that work. Since April 2026, I have been supporting their effort especially on triage and long-term initiatives as part of a &lt;a href="https://jupyterfoundation.org/"&gt;Jupyter Foundation&lt;/a&gt; grant funding me 1 day per week until December 2026. A second grant has extended this capacity and timeline to 2 days a week, plus time from &lt;a href="https://github.com/Carreau"&gt;@Carreau&lt;/a&gt; to bring expertise and onboard new contributors, until March 2027.&lt;/p&gt;
&lt;h2 id="what-makes-jupyter-security-challenging"&gt;What makes Jupyter Security challenging&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Scale:&lt;/strong&gt; Jupyter is spread across 22 GitHub organizations and more than 400 repositories (counting only the public, non-archived, non-documentation ones). From these repos, Jupyter publishes 228 PyPI packages and 281 npm packages.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Security boundaries:&lt;/strong&gt; Evaluating security reports is tricky due to the complicated security boundary: Jupyter executes code by design, but in a controlled way. We have to define exactly what is allowed and what is not; this is especially challenging when multiple repos work together.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Releasing fixes:&lt;/strong&gt; merging fixes has to be coordinated with the publication of releases, which requires maintainers’ time. We do not directly deploy Jupyter; security advisories are a tool to let our users know they need to upgrade through dependabot and similar tools.&lt;/p&gt;
&lt;h2 id="2026-in-numbers"&gt;2026 in numbers&lt;/h2&gt;
&lt;p&gt;So far in 2026 we have received 181 &lt;a href="https://docs.github.com/en/code-security/how-tos/report-and-fix-vulnerabilities/report-privately"&gt;GitHub security advisories (GHSA)&lt;/a&gt;, and September 2026 has hit a record high of 40 reports.&lt;/p&gt;
&lt;p&gt;As of 2026-10-16, 88 (49%) were closed as invalid or duplicate, 32 (18%) are being fixed and 32 (18%) have been fixed then published. The rest is in the triage backlog.&lt;/p&gt;
&lt;p&gt;We are also catching up on 25 reports opened before 2026 that are waiting for a fix (the rest of the 150 reports opened before 2026 were either closed or published). Therefore this October, Jupyter Foundation approved a &lt;a href="https://github.com/jupyter-governance/funding-proposals/issues/75"&gt;funding proposal&lt;/a&gt; for additional capacity to keep up with this additional workload.&lt;/p&gt;
&lt;p class="standalone-image"&gt;&lt;img src="https://blog.jupyter.org/posts/2026/jupyter-security-council-updates/images/BJ0zGcJ3Mg.webp" alt="Bar chart: 86 advisories open now, most waiting for a fix and the rest waiting for triage, against 92 published in all time" loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;p&gt;As this graph shows, our current backlog of reports awaiting triage or fixes almost reaches the total number of advisories we have ever published on GitHub. This is driven primarily by the surge in AI-generated reports. &lt;a href="https://github.com/jupyter/security/blob/main/lab/advisories.ipynb"&gt;Source&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="fighting-ai-with-ai"&gt;Fighting AI with AI?&lt;/h2&gt;
&lt;p class="standalone-image"&gt;&lt;img src="https://blog.jupyter.org/posts/2026/jupyter-security-council-updates/images/SJbrQBt9ze.webp" alt="Bar chart of advisories opened per month from January 2025 to September 2026: under 10 a month until March 2026, about 20 to 25 a month from April to August, and almost 40 in September" loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;p&gt;This is how many reports we have received each month on GitHub across the whole project. &lt;a href="https://github.com/jupyter/security/blob/main/lab/advisories.ipynb"&gt;Source&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The triage volume had been manageable with manual review until August (20/month), but the 40 reports we received in September leave no doubt: we have to figure out a way to leverage AI to help with triage, at the very least to deal with duplicates.&lt;/p&gt;
&lt;p&gt;We also find AI reports are very lengthy and hard to read, with a high false positive rate. The reports routinely overstate their severity, and we sometimes deal with autonomous agents (e.g., if we ask a question an AI will reply to us).&lt;/p&gt;
&lt;p&gt;AI can only be effective at triage when the threat model is well documented, otherwise false positives are frequent. Here is an example of Michał Krassowski’s work on JupyterLab where he documented the &lt;a href="https://github.com/anthropics/oss-scanner/pull/438/changes#diff-4531a89d075f5c805fe27df9bfa6696084d7cba5f5fe67804255b33eabc0f7a2"&gt;threat model&lt;/a&gt; and &lt;a href="https://github.com/jupyterlab/jupyterlab/pull/20040"&gt;strengthened instructions for LLMs&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We are not alone in this effort and I believe we should also federate efforts on tooling with other security communities. For instance the &lt;a href="https://devguide.python.org/security/psrt/"&gt;Python Security Response Team&lt;/a&gt; is developing &lt;a href="https://github.com/python/psrt-ghsa-bot"&gt;their own tool, the PSRT GHSA Bot&lt;/a&gt; to work with incoming GHSAs at scale.&lt;/p&gt;
&lt;h2 id="what-we-are-working-on"&gt;What we are working on&lt;/h2&gt;
&lt;p&gt;In addition to day-to-day work on triage, the Security Council and I are working on several long-term initiatives to increase the security posture of the project.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Supply chain security:&lt;/strong&gt; CI hardening to prevent a GitHub Actions hijack; trusted publishing to limit the damage of a potential PyPI or npm account incident. This initiative, still being implemented, was started in April.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Prioritization:&lt;/strong&gt; not all 400+ repositories need the same attention. We need to establish an auditable methodology to find out where to focus our efforts on supply chain security or writing fixes.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tooling:&lt;/strong&gt; &lt;a href="https://github.com/Yann-P/github-security-overview"&gt;github-security-overview&lt;/a&gt; is an actively developed command-line tool that aggregates GHSAs across multiple GitHub organizations and repositories.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dealing with maintenance discrepancies:&lt;/strong&gt; repositories like JupyterLab, JupyterHub and JupyterLite have been mostly handling their own reports and fixes. However the Jupyter ecosystem has a lot of inactive repositories that are still downloaded or depended on a lot. To address this, the Security Council is pursuing two long-term initiatives:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;attribution: what subproject is responsible for what repo;&lt;/li&gt;
&lt;li&gt;tiering system and archiving: identifying less-maintained repos and warning users if they are a security risk&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Onboarding more security contributors:&lt;/strong&gt; the latest Jupyter Foundation-funded &lt;a href="https://github.com/jupyter-governance/funding-proposals/issues/75"&gt;proposal&lt;/a&gt; includes some time from &lt;a href="https://github.com/Carreau"&gt;@Carreau&lt;/a&gt; on onboarding new contributors, strengthening documentation, and providing Jupyter expertise.&lt;/p&gt;
&lt;h2 id="jupyter-security-is-more-open-than-you-think-heres-how-you-can-contribute"&gt;Jupyter Security is more open than you think: here’s how you can contribute&lt;/h2&gt;
&lt;p&gt;We are working in public at &lt;a href="https://github.com/jupyter/security"&gt;https://github.com/jupyter/security&lt;/a&gt;. You are welcome to suggest initiatives through issues or comment on existing issues. We try to label good first issues for tasks like documentation updates.&lt;/p&gt;
&lt;p&gt;For casual chatter, our Zulip channel is &lt;a href="https://jupyter.zulipchat.com/#narrow/channel/538444-Security.5BPublic.5D"&gt;@Security[Public] channel&lt;/a&gt;. We host open, regular &lt;a href="https://docs.jupyter.org/en/stable/community/content-community.html"&gt;Zoom meetings&lt;/a&gt; on Tuesdays.&lt;/p&gt;
&lt;p&gt;Feel free to reach us at &lt;a href="mailto:security-council@jupyter.org"&gt;security-council@jupyter.org&lt;/a&gt;, or see &lt;a href="https://jupyter.org/security"&gt;https://jupyter.org/security&lt;/a&gt; if you have a security issue to report.&lt;/p&gt;
&lt;h2 id="resources"&gt;Resources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://jupyter-governance.github.io/funding-proposals/projects/2026/security/"&gt;Public monthly reports&lt;/a&gt; with numbers as part of my Jupyter Foundation funding&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/jupyter/security/blob/main/lab/advisories.ipynb"&gt;More statistics&lt;/a&gt; on our public security repo!&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Yann-P/oss-prague-2026-jupyter-security"&gt;Slides&lt;/a&gt; from my Open Source Summit 2026 Prague talk on Jupyter Security&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.jupyter.org/?q=security"&gt;Other Jupyter blog articles about security&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="main-content-end" aria-hidden="true"&gt;&lt;/div&gt;
&lt;h2 id="about-the-author"&gt;About the author&lt;/h2&gt;
&lt;p&gt;&lt;img src="https://blog.jupyter.org/posts/2026/jupyter-security-council-updates/images/HkE7TL1nMx.webp" alt="Portrait of Yann Pellegrini" width="150" loading="lazy" data-body-image=""&gt;&lt;br&gt;
&lt;a href="https://github.com/Yann-P"&gt;Yann Pellegrini&lt;/a&gt; is an independent software engineer who recently turned to open-source. Since April 2026, he has been working on triage and long-term initiatives for Jupyter Security, currently supported by a Jupyter Foundation grant. Yann also co-maintains the &lt;a href="https://github.com/pydata/pydata-sphinx-theme"&gt;PyData Sphinx Theme&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="acknowledgements"&gt;Acknowledgements&lt;/h2&gt;
&lt;p&gt;Thanks to the Jupyter Foundation for two rounds of security funding in 2026.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/Carreau"&gt;@Carreau&lt;/a&gt;, for introducing me to Jupyter security, and help on writing the funding proposals; &lt;a href="https://github.com/jasongrout"&gt;Jason Grout&lt;/a&gt;, for working on governance and reviewing communication material; &lt;a href="https://github.com/krassowski/"&gt;Michał Krassowski&lt;/a&gt; for driving security across JupyterLab, and many security initiatives across the whole project; &lt;a href="https://github.com/minrk/"&gt;Min Ragan-Kelley&lt;/a&gt; for driving security on JupyterHub, and reviewing many security fixes and PRs and &lt;a href="https://github.com/abpai94"&gt;Abhishek Pai&lt;/a&gt; for reviewing.&lt;/p&gt;
</content><category term="security"/><category term="AI"/></entry></feed>