CVE-2024-39700: JupyterLab extension-template: CI workflow RCE
CRITICALThe JupyterLab extension template generates a GitHub Actions workflow (update-integration-tests.yml) that contains a code injection flaw. Anyone who can open a pull request against a repository built from the template can run arbitrary commands in its CI. This is rated CVSS 10.0 (critical) because the workflow runs with repository-level privileges and can reach secrets and publishing credentials. The package has 1,881 downstream dependents and 46 other CVEs, and its OpenSSF Scorecard is a middling 5.8/10. It is not in CISA KEV, no public exploit or Nuclei template is known, and EPSS and SSVC data are unavailable, so there is no evidence of active exploitation. Have extension authors upgrade the template to the latest version, accept the overwrite of update-integration-tests.yml and re-apply local changes afterwards. They should also rebase open PRs from untrusted contributors and audit CI logs and repository secrets for signs of tampering.
What is the risk?
Severity is critical on paper (CVSS 10.0, network, low complexity, low privileges, no user interaction, scope changed). Real-world exploitability depends on the repository accepting PRs from external contributors, which is the norm for open-source extensions. No public exploit, scanner template or KEV listing exists, and EPSS is not available, so the exploitation likelihood is unquantified. The main exposure is the CI/CD supply chain rather than runtime AI systems: stolen tokens or publishing credentials could lead to compromised PyPI or npm releases of JupyterLab extensions. Existing PRs may still run the vulnerable workflow version from the main branch, so patching alone does not close the window.
How does the attack unfold?
What systems are affected?
| Package | Ecosystem | Vulnerable Range | Patched |
|---|---|---|---|
| Jupyter | pip | — | No patch |
Do you use Jupyter? You're affected.
How severe is it?
What is the attack surface?
What should I do?
1 step1) Upgrade repositories to the latest extension-template version using copier update; accept the overwrite of update-integration-tests.yml and re-apply any custom changes afterward. 2) Temporarily disable GitHub Actions while upgrading. 3) Rebase all open PRs from untrusted users, since Actions may run the main-branch workflow version from the time the PR was created. 4) If upgrading from a template version older than 4.3.0, consider leaving out the proposed release workflow changes until the extra configuration is ready. 5) Rotate secrets, PyPI/npm tokens and deploy keys for any repo that ran the vulnerable workflow with external PRs. 6) Detect: review the Actions run history and logs for unexpected commands, outbound connections or workflow runs triggered by unknown contributors, and check for unauthorized commits or releases. 7) Harden: restrict workflow token permissions to read-only by default and require approval for workflow runs from first-time contributors.
How is it classified?
Which compliance frameworks are affected?
This CVE is relevant to:
Frequently Asked Questions
What is CVE-2024-39700?
The JupyterLab extension template generates a GitHub Actions workflow (update-integration-tests.yml) that contains a code injection flaw. Anyone who can open a pull request against a repository built from the template can run arbitrary commands in its CI. This is rated CVSS 10.0 (critical) because the workflow runs with repository-level privileges and can reach secrets and publishing credentials. The package has 1,881 downstream dependents and 46 other CVEs, and its OpenSSF Scorecard is a middling 5.8/10. It is not in CISA KEV, no public exploit or Nuclei template is known, and EPSS and SSVC data are unavailable, so there is no evidence of active exploitation. Have extension authors upgrade the template to the latest version, accept the overwrite of update-integration-tests.yml and re-apply local changes afterwards. They should also rebase open PRs from untrusted contributors and audit CI logs and repository secrets for signs of tampering.
Is CVE-2024-39700 actively exploited?
No confirmed active exploitation of CVE-2024-39700 has been reported, but organizations should still patch proactively.
How to fix CVE-2024-39700?
1) Upgrade repositories to the latest extension-template version using copier update; accept the overwrite of update-integration-tests.yml and re-apply any custom changes afterward. 2) Temporarily disable GitHub Actions while upgrading. 3) Rebase all open PRs from untrusted users, since Actions may run the main-branch workflow version from the time the PR was created. 4) If upgrading from a template version older than 4.3.0, consider leaving out the proposed release workflow changes until the extra configuration is ready. 5) Rotate secrets, PyPI/npm tokens and deploy keys for any repo that ran the vulnerable workflow with external PRs. 6) Detect: review the Actions run history and logs for unexpected commands, outbound connections or workflow runs triggered by unknown contributors, and check for unauthorized commits or releases. 7) Harden: restrict workflow token permissions to read-only by default and require approval for workflow runs from first-time contributors.
What systems are affected by CVE-2024-39700?
This vulnerability affects the following AI/ML architecture patterns: CI/CD pipelines, Jupyter notebook environments, ML development workflows, AI software supply chain.
What is the CVSS score for CVE-2024-39700?
CVE-2024-39700 has a CVSS v3.1 base score of 10.0 (CRITICAL).
What is the AI security impact?
Affected AI Architectures
MITRE ATLAS Techniques
AML.T0010.001AI SoftwareAML.T0049Exploit Public-Facing ApplicationAML.T0050Command and Scripting InterpreterCompliance Controls Affected
What are the technical details?
Original Advisory
JupyterLab extension template is a `copier` template for JupyterLab extensions. Repositories created using this template with `test` option include `update-integration-tests.yml` workflow which has an RCE vulnerability. Extension authors hosting their code on GitHub are urged to upgrade the template to the latest version. Users who made changes to `update-integration-tests.yml`, accept overwriting of this file and re-apply your changes later. Users may wish to temporarily disable GitHub Actions while working on the upgrade. We recommend rebasing all open pull requests from untrusted users as actions may run using the version from the `main` branch at the time when the pull request was created. Users who are upgrading from template version prior to 4.3.0 may wish to leave out proposed changes to the release workflow for now as it requires additional configuration.
Exploitation Scenario
An attacker forks a public JupyterLab extension repository created from the template and opens a pull request with a crafted branch name, title or file content that carries shell payload text. The vulnerable update-integration-tests.yml workflow interpolates that attacker-controlled value into a command and executes it on the runner. The payload reads the workflow's GITHUB_TOKEN and any repository secrets, such as PyPI or npm publishing tokens. The attacker then pushes a trojanized release of the extension, which runs in the JupyterLab environments of data scientists and ML engineers who install or update it.
Weaknesses (CWE)
CWE-94 — Improper Control of Generation of Code: The product constructs all or part of a code segment using externally-influenced input from an upstream component, but it does not neutralize or incorrectly neutralizes special elements that could modify the syntax or behavior of the intended code segment.
- [Architecture and Design] Refactor your program so that you do not have to dynamically generate code.
- [Architecture and Design] Run your code in a "jail" or similar sandbox environment that enforces strict boundaries between the process and the operating system. This may effectively restrict which code can be executed by your product. Examples include the Unix chroot jail and AppArmor. In general, managed code may provide some protection. This may not be a feasible solution, and it only limits the impact to the operating system; the rest of your application may still be subject to compromise. Be careful to avoid CWE-243 and other weaknesses related to jails.
Source: MITRE CWE corpus.
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:HReferences
Timeline
Related Vulnerabilities
CVE-2023-2557410.0JupyterHub LTI13: JWT forgery enables full auth bypass
Same package: jupyterCVE-2026-441809.8Jupyter Enterprise Gateway: root privilege bypass in Kubernetes
Same package: jupyterCVE-2026-235379.1Feast: unauth file write to RCE via /save-document
Same package: jupyterCVE-2026-545279.0jupyterlab-git: stored XSS escalates to full RCE
Same package: jupyterCVE-2026-447279.0jupyter-server: stored XSS yields kernel RCE
Same package: jupyter