Skip to content

chore(deps): security bump for the agent sandbox lock (certifi, pillow, pypdf) - #7845

Merged
mmabrouk merged 2 commits into
release/v0.125.3from
agent/dependabot-sandbox-crit-20261027
Oct 27, 2026
Merged

mmabrouk merged 2 commits into
release/v0.125.3from
agent/dependabot-sandbox-crit-20261027

Conversation

@mmabrouk

@mmabrouk mmabrouk commented Oct 27, 2026 •

Copy link
Copy Markdown
Member

What

Security updates in the agent sandbox Python lock, services/runner/images/sandbox/agent-requirements.txt, which ships in both runner images and the Daytona snapshot.

Package From To Advisory Severity
certifi 2026.7.22 2026.10.23 GHSA-6q48-6c7w-9gw2: bundles emSign root CAs with compromised intermediate CA keys critical
pillow 12.3.0 13.0.0 GHSA-5x8w-8jj5-q52h: FPX JPEG heap overflow leading to code execution critical
pillow 12.3.0 13.0.0 GHSA-8g5g-8vmr-9782: ImagingJpegDecode heap overflow critical
pillow 12.3.0 13.0.0 GHSA-v9pv-5gc8-w2m6: multi-frame loaders reuse stale native storage critical
pillow 12.3.0 13.0.0 GHSA-332p-7hrc-92wf: _tiffWriteProc heap overflow critical
pillow 12.3.0 13.0.0 GHSA-w889-685w-c8fh: Ghostscript argument injection, potentially RCE critical
pypdf 6.19.0 6.21.2 the full pypdf advisory set for this manifest, including 3 high high, medium, low

This clears every pypdf alert on this manifest as well, so the file has no open advisories left above low.

The lock keeps --require-hashes; every new pin carries the sha256 sums of the released files from PyPI. The install runs with --no-deps, so moviepy 2.2.1's pillow<12 cap does not block the patched Pillow 13.

Why the extra files

agent-requirements.txt is a snapshot recipe input, so CI requires a recipe version bump in the same branch:

  • services/runner/config/sandbox-recipe.json: version 3 -> 4.
  • services/runner/images/sandbox/daytona/sandbox-recipe-fingerprint.json: regenerated after each lock change.
  • Docs and hosting examples that name the default snapshot: agenta-agent-sandbox-v3 -> agenta-agent-sandbox-v4.
  • Comments in install-agent-tools.sh and the Daytona README now say Pillow 13.

Verification (hetzner-dev, branch head 336b239)

  • uv pip install --require-hashes --no-deps -r agent-requirements.txt into a clean Python 3.11 venv: 87 packages installed; pillow 13.0.0, certifi 2026.10.23 and pypdf 6.21.2 import correctly.
  • python -m pytest test_recipe_fingerprint.py test_build_snapshot.py: 21 passed.
  • git diff --check: clean.

Baseline: these tests also pass on unmodified main; no pre-existing failures were involved.

Deploy note

The recipe version bump makes agenta-agent-sandbox-v4 the default snapshot name. A v4 snapshot must be built in every Daytona account that uses it before a runner asking for v4 deploys.

Security fixes for the Python set that ships in the sandbox image
(services/runner/images/sandbox/agent-requirements.txt):

- certifi 2026.7.22 -> 2026.10.23 (GHSA-6q48-6c7w-9gw2, critical):
  bundles emSign root CAs with compromised intermediate CA keys.
- pillow 12.3.0 -> 13.0.0 (GHSA-5x8w-8jj5-q52h, GHSA-v9pv-5gc8-w2m6,
  GHSA-332p-7hrc-92wf, GHSA-w889-685w-c8fh, GHSA-8g5g-8vmr-9782,
  critical): FPX and JPEG heap overflows, TIFF write overflow, Ghostscript
  argument injection, and stale storage reuse after mode transitions.

The lock keeps --require-hashes, so both pins carry the sha256 sums of the
released files. The install runs with --no-deps, so moviepy 2.2.1's
`pillow<12` cap does not block the patched Pillow 13.

The lock is a snapshot recipe input, so this commit also bumps
config/sandbox-recipe.json to 4, regenerates
sandbox-recipe-fingerprint.json, and updates the docs that name the default
snapshot (agenta-agent-sandbox-v3 -> v4).

Verification on hetzner-dev:
- uv pip install --require-hashes --no-deps -r agent-requirements.txt into a
  clean Python 3.11 venv: 87 packages installed, pillow 13.0.0 and
  certifi 2026.10.23 import correctly.
- python -m pytest test_recipe_fingerprint.py test_build_snapshot.py: 21 passed.
- git diff --check: clean.

A v4 snapshot must be built in every Daytona account before a runner that
asks for v4 deploys.
@github-actions

github-actions Bot commented Oct 27, 2026 •

Copy link
Copy Markdown
Contributor

📘 Docs preview

Status ✅ Ready
Preview https://pr-7845-agenta-docs-preview.mahmoud-637.workers.dev/docs/
Inspect Actions run
Commit 336b2393ac6929b52c47ad4f75fd2fef31c4fb2a

Pages changed in this pull request

This comment updates in place on every push.

@coderabbitai

coderabbitai Bot commented Oct 27, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

Important

Review skipped

Review was skipped as selected files did not have any reviewable changes.

Run configuration
Commits

Reviewing files that changed from the base of the PR and between 336b239 and 336b239.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

No actionable comments were generated in the recent review.

Recent review info
Run configuration
Commits

Reviewing files that changed from the base of the PR and between f1b5797 and 336b239.

Files selected for processing: 2
  • services/runner/images/sandbox/agent-requirements.txt
  • services/runner/images/sandbox/daytona/sandbox-recipe-fingerprint.json

Included review availability: This review used your included allowance. Your plan provides up to 8 included reviews per hour; 2 remain after this review.

📝 Summary

Summary by CodeRabbit

  • Updates
    • Updated the documented Daytona sandbox snapshot to v4 across setup guides and configuration examples.
    • Updated the sandbox recipe and its pinned dependencies, including Pillow, certifi, and pypdf, to newer versions.
    • Updated the documented Pillow version used in the Daytona sandbox.

The sandbox recipe advances to version 4. Pinned dependencies and the recipe fingerprint are updated. Documentation and configuration examples now refer to the v4 snapshot.

Changes: Daytona snapshot update

Layer / File(s) Summary
Sandbox recipe and dependencies
services/runner/config/sandbox-recipe.json, services/runner/images/sandbox/agent-requirements.txt, services/runner/images/sandbox/daytona/README.md, services/runner/images/sandbox/install-agent-tools.sh, services/runner/images/sandbox/daytona/sandbox-recipe-fingerprint.json
The recipe version changes from 3 to 4. The certifi pin changes to 2026.10.23, the Pillow pin changes to 13.0.0, and the pypdf pin changes to 6.21.2. Package hashes, the recipe fingerprint, and Pillow override references are updated.
Snapshot references
docs/docs/self-host/agents/02-daytona.mdx, docs/docs/self-host/reference/01-configuration.mdx, hosting/README.md, hosting/docker-compose/ee/*.example, hosting/docker-compose/oss/*.example, hosting/kubernetes/helm/values.yaml
Documentation and configuration examples identify agenta-agent-sandbox-v4 as the pinned or default snapshot.

Priority: Normal

Estimated code review effort: 2 (Simple) | ~10 minutes

Merge Risk: Minimal · up to 336b2

This change upgrades certifi, Pillow and pypdf in the agent sandbox lock to address security advisories, and moves the sandbox snapshot to v4. No concrete merge-blocking defect was found. Before deploying, build the v4 snapshot in each Daytona account that uses it. A quick MoviePy image/video smoke test would add confidence under Pillow 13.

Pre-merge checks: Passed 5
Check name Status Explanation
Title check Passed The title clearly identifies the main change: a security dependency update for the agent sandbox lock involving certifi, pillow, and pypdf.
Description check Passed The description directly explains the dependency updates, security advisories, recipe version bump, snapshot reference changes, verification results, and deployment requirement.
Docstring Coverage Passed No eligible functions found in the changed files. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Documentation-only edits and deletions within survi…
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
Full details: Docstring Coverage

Explanation

No eligible functions found in the changed files. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Documentation-only edits and deletions within surviving functions are included; unchanged diff context and fully deleted functions are excluded. Analyzed 0 functions across 1 files. (2 skipped: 2 unsupported.)

Finishing Touches
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

github-actions Bot commented Oct 27, 2026 •

Copy link
Copy Markdown
Contributor

Railway Preview Environment

Item Value
Status stopped
Commit 336b2393ac6929b52c47ad4f75fd2fef31c4fb2a
Manual expiry (UTC) Not granted
CI deadline (UTC) Not granted
Workflow https://github.com/Agenta-AI/agenta/actions/runs/40492212853

Dependent tests finished. Post /preview for manual review. Environment absence verified; retained storage requires separate provider accounting.

Post /preview as a new comment to request a one-hour preview. Repeating it while active does not extend the hour.
Preview data is disposable. Expiry is enforced by the next successful cleanup sweep, not an exact timer.
Environment deletion stops its compute. Provider-retained storage and permanent services may still be billed.

pypdf 6.19.0 -> 6.21.2 in services/runner/images/sandbox/agent-requirements.txt.

Covers the full pypdf advisory set for this manifest, including the three
high-severity ones (arbitrary file write and the PDF writer and text
extraction issues). Hashes are the released sdist and wheel sums from PyPI,
so `--require-hashes` still holds.

The lock is a snapshot recipe input, so the fingerprint is regenerated in
the same commit. The recipe version was already bumped to 4 by the previous
commit on this branch.

Verification on hetzner-dev:
- uv pip install --require-hashes --no-deps into a clean Python 3.11 venv:
  87 packages; pillow 13.0.0, certifi 2026.10.23 and pypdf 6.21.2 import.
- python -m pytest test_recipe_fingerprint.py test_build_snapshot.py:
  21 passed.
@mmabrouk mmabrouk changed the title chore(deps): bump certifi and pillow in the agent sandbox lock (critical) chore(deps): security bump for the agent sandbox lock (certifi, pillow, pypdf) Oct 27, 2026
@mmabrouk
mmabrouk changed the base branch from release/v0.125.2 to release/v0.125.3 October 27, 2026 12:47
@mmabrouk
mmabrouk merged commit 851cbc3 into release/v0.125.3 Oct 27, 2026
79 of 80 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant