Skip to content

GHSA-6q48-6c7w-9gw2 (critical): bump certifi to 2026.10.19 - #2010

Merged
mishushakov merged 2 commits into
mainfrom
devin/1792566370-certifi-ghsa-6q48
Oct 21, 2026
Merged

mishushakov merged 2 commits into
mainfrom
devin/1792566370-certifi-ghsa-6q48

Conversation

@devin-ai-integration

@devin-ai-integration devin-ai-integration Bot commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Clears GHSA-6q48-6c7w-9gw2 (critical, no CVE ID assigned yet): certifi bundles emSign root CAs with compromised intermediate CA keys. Affects certifi >=2019.03.09, <2026.10.19; first patched version is 2026.10.19.

certifi is a runtime transitive dependency (e2b → httpx / httpcore → certifi), so it is in the trust store for every HTTPS call the SDK makes.

Lockfile-only change, done with uv 0.10.12 so the lockfile stays at revision = 3:

  • packages/python-sdk/uv.lock
  • packages/desktop-python/uv.lock
  • packages/code-interpreter-python/uv.lock

certifi 2026.7.22 -> 2026.10.19. No pyproject.toml constraint changes and no changeset: the published packages never pinned certifi, so users already get the fix when they upgrade certifi in their own environment (pip install -U certifi).

Note: certifi 2026.10.19 came out on 2026-10-20, so it's newer than the 3-day minimumReleaseAge the repo applies to pnpm. I'm proposing it anyway because it's the only patched release for a critical CA-trust advisory. Reviewers should decide whether to wait out the window.

Verification

  • pip-audit on the exported python-sdk lock (all groups): no known vulnerabilities after the bump (previously PYSEC-2026-4320 / GHSA-6q48-6c7w-9gw2)
  • uv run pytest tests/test_*.py in packages/python-sdk: 489 passed
  • Live smoke test against E2B (Sandbox.create() + commands.run) over TLS with the new bundle: OK

Link to Devin session: https://app.devin.ai/sessions/1fd08fc404004c31b7466969c8fdc9bb
Open in Devin Desktop: https://app.devin.ai/desktop/session/1fd08fc404004c31b7466969c8fdc9bb?variant=devin


Devin Review

…ical)

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
@devin-ai-integration

Copy link
Copy Markdown
Contributor Author

I'll fix CI failures and address comments from users with write access. I'll skip comments containing "(aside)".

  • Disable automatic comment, CI, and merge conflict monitoring

@changeset-bot

changeset-bot Bot commented Oct 21, 2026 •

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: 420cd91

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 21, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-21T07:09:40.528243Z 67365d9 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

TASTE.md review: complies, with 0 violations. This PR only changes uv.lock files (certifi 2026.7.22 → 2026.10.19) and doesn't touch the public SDK surface, so no T-1–T-74 rule applies.

Written by Devin

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Devin Review: No Issues Found

Devin Review analyzed this PR and found no bugs or issues to report.

Devin Review

@github-actions

github-actions Bot commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor

Package Artifacts

Built from b418c4f. Download artifacts from this workflow run.

JS SDK (e2b@2.58.1-devin-1792566370-certifi-ghsa-6q48.0, with @e2b/dockerfile-utils@0.1.2-devin-1792566370-certifi-ghsa-6q48.0):

npm install ./e2b-dockerfile-utils-0.1.2-devin-1792566370-certifi-ghsa-6q48.0.tgz ./e2b-2.58.1-devin-1792566370-certifi-ghsa-6q48.0.tgz

CLI (@e2b/cli@2.22.4-devin-1792566370-certifi-ghsa-6q48.0):

npm install ./e2b-cli-2.22.4-devin-1792566370-certifi-ghsa-6q48.0.tgz

Code Interpreter JS SDK (@e2b/code-interpreter@2.9.1-devin-1792566370-certifi-ghsa-6q48.0):

npm install ./e2b-code-interpreter-2.9.1-devin-1792566370-certifi-ghsa-6q48.0.tgz

Desktop JS SDK (@e2b/desktop@2.5.1-devin-1792566370-certifi-ghsa-6q48.0):

npm install ./e2b-desktop-2.5.1-devin-1792566370-certifi-ghsa-6q48.0.tgz

Python SDK (e2b==2.58.0+devin.1792566370.certifi.ghsa.6q48, with e2b-dockerfile-utils==0.1.1+devin.1792566370.certifi.ghsa.6q48):

pip install ./e2b_dockerfile_utils-0.1.1+devin.1792566370.certifi.ghsa.6q48-py3-none-any.whl ./e2b-2.58.0+devin.1792566370.certifi.ghsa.6q48-py3-none-any.whl

Code Interpreter Python SDK (e2b-code-interpreter==2.11.2+devin.1792566370.certifi.ghsa.6q48):

pip install ./e2b_code_interpreter-2.11.2+devin.1792566370.certifi.ghsa.6q48-py3-none-any.whl

Desktop Python SDK (e2b-desktop==2.7.1+devin.1792566370.certifi.ghsa.6q48):

pip install ./e2b_desktop-2.7.1+devin.1792566370.certifi.ghsa.6q48-py3-none-any.whl

@claude claude Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I reviewed this PR and found no bugs. A human should still look at it: the repo-wide CODEOWNERS entry covers these files, and the PR leaves the release-age decision to reviewers, since certifi 2026.10.19 was published on 2026-10-20, inside the 3-day window pnpm-workspace.yaml applies to Node packages.

What was reviewed:

  • The certifi hunk in all three uv.lock files. Each one changes only the version, sdist and wheel entries, and the three files match byte-for-byte.
  • The new URLs, filenames and upload times all match version 2026.10.19. The sha256 values were not checked against PyPI in this run.
  • No other packages, pyproject.toml constraints or lockfile metadata changed.
Extended reasoning...

The change only edits lockfiles. It bumps the transitive dependency certifi from 2026.7.22 to 2026.10.19 in the uv.lock files for python-sdk, desktop-python and code-interpreter-python, and each file changes by 3 lines. certifi supplies the CA trust store for the SDK's HTTPS calls, so the change touches TLS trust, though no source code changes. The decision to defer rests on two facts: the root CODEOWNERS assigns every path to a single owner, and the PR asks reviewers to decide whether to accept a release that is newer than the repo's minimum release age.

@devin-ai-integration

Copy link
Copy Markdown
Contributor Author

The Python SDK test failures here aren't caused by this lockfile change. test_run_command_as_user_that_does_not_exist (sync + async) fails because the backend's error text changed: it now returns failed to run command: ... instead of failed to run command 'whoami': .... The same failure shows up on other branches, e.g. #2000 (bump-protobuf-py, run 39418239676) and run 39470634901. The other failures (test_connect_to_pty and test_build_template_with_symlinks, each failing on just one job, the latter with a server-side BuildException) are intermittent integration failures. Desktop and Code Interpreter Python suites pass on both Staging and Production.

Written by Devin

mishushakov pushed a commit that referenced this pull request Oct 21, 2026
…sktop (#2011)

## Summary
`e2b-desktop` declared `pillow>=12.0.0,<13` as a runtime dependency.
Every Pillow 12.x release is affected by these high-severity advisories,
and the only fix is in 13.0.0 (released 2026-10-16):

- **CVE-2026-112404** /
[GHSA-c6hw-5grf-ff96](GHSA-c6hw-5grf-ff96)
(high): OOB read in `TiffDecode.c` tile and RGBA paths leaks heap memory
into pixels (`>=8.1.0, <13.0.0`)
- **CVE-2026-112895** /
[GHSA-p4wg-p73j-c528](GHSA-p4wg-p73j-c528)
(high): unbounded recursion parsing a PDF page tree or trailer chain

The bump also clears two medium advisories: CVE-2026-112395 /
GHSA-462x-pgg6-55fp and CVE-2026-112899 / GHSA-vx6w-vv9f-6gvg.

The old `<13` cap stopped users from upgrading to the patched Pillow.
Per review, the floor now goes up too, so a vulnerable 12.x can no
longer be resolved:

```diff
- "pillow>=12.0.0,<13",
+ "pillow>=13.0.0,<14",
```

The lock moves from `pillow 12.3.0` to `13.0.0`. I relocked with uv
0.10.12, so the lockfile stays at `revision = 3`. There's a changeset
(`@e2b/desktop-python` patch).

Pillow 13's breaking changes are: dropping Python 3.10 (we already
require `>=3.11`), I-mode PNG clipping, and the removal of
`Image._show`, `get_child_images` and `ImageCmsProfile.product_*`. None
of these affect this package: `e2b_desktop` doesn't import PIL, and only
the tests use `Image`/`ImageChops`.

Out of scope: `code-interpreter-python` pulls in Pillow only through its
dev-group `matplotlib`, so I left that alone rather than force a major
bump for a dev-only advisory.

## Verification
- In `packages/desktop-python`, `uv run pytest -n 4 tests` against live
E2B with Pillow 13.0.0: 18 passed (this includes `test_controls.py`,
which uses `PIL.Image`/`ImageChops`)
- `make lint` and `make typecheck` (ty): pass
- `pip-audit` on the exported lock: no Pillow findings left (the only
remaining finding is certifi, fixed separately in #2010)

Link to Devin session:
https://app.devin.ai/sessions/1fd08fc404004c31b7466969c8fdc9bb
Open in Devin Desktop:
https://app.devin.ai/desktop/session/1fd08fc404004c31b7466969c8fdc9bb?variant=devin
<!-- devin-review-badge-begin -->

---

<a href="https://app.devin.ai/review/e2b-dev/e2b/pull/2011"
target="_blank"><picture><source media="(prefers-color-scheme: dark)"
srcset="https://static.devin.ai/assets/gh-devin-review-dark.svg?v=4"><img
src="https://static.devin.ai/assets/gh-devin-review-light.svg?v=4"
alt="Devin Review"></picture></a>
<!-- devin-review-badge-end -->

---------

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
@mishushakov
mishushakov enabled auto-merge (squash) October 21, 2026 16:19
mishushakov added a commit that referenced this pull request Oct 21, 2026
## Summary
The orchestrator stopped repeating the failed command in template build
errors (e2b-dev/runtime `4b3b122` "fix(orchestrator): report a failed
build command without repeating it"), and that's now deployed to
production as well as staging:

```diff
- failed to run command 'whoami': command failed: unauthenticated: invalid username: 'root123'
+ failed to run command: command failed: unauthenticated: invalid username: 'root123'
```

`test_run_command_as_user_that_does_not_exist` (Python sync + async) and
`runCmd.test.ts > run command as user that does not exist` (JS) still
asserted the old message, so they fail on every PR that runs the SDK
suites (e.g. #2010, `feat/en-3411-allow-default-dns`). This PR updates
the expected string only, with no SDK changes.

Ran the changed tests against production: Python 6 passed, JS 3 passed.

Link to Devin session:
https://app.devin.ai/sessions/44907c1a82f44d669290264aad35ed9a
Open in Devin Desktop:
https://app.devin.ai/desktop/session/44907c1a82f44d669290264aad35ed9a?variant=devin
Requested by: @mishushakov
<!-- devin-review-badge-begin -->

---

<a href="https://app.devin.ai/review/e2b-dev/e2b/pull/2014"
target="_blank"><picture><source media="(prefers-color-scheme: dark)"
srcset="https://static.devin.ai/assets/gh-devin-review-dark.svg?v=4"><img
src="https://static.devin.ai/assets/gh-devin-review-light.svg?v=4"
alt="Devin Review"></picture></a>
<!-- devin-review-badge-end -->

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: mish@e2b.dev <mish@e2b.dev>
@mishushakov
mishushakov merged commit 8ad31ed into main Oct 21, 2026
30 of 32 checks passed
@mishushakov
mishushakov deleted the devin/1792566370-certifi-ghsa-6q48 branch October 21, 2026 18:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant