---
title: "CVE-2026-39888: PraisonAI has sandbox escape via exception frame traversal in `execute_code` (subprocess mode)"
url: https://erroneo.us/security/cve/CVE-2026-39888/
description: "CVE-2026-39888 (praisonaiagents (PyPI)): PraisonAI is a multi-agent teams system. Prior to 1.5.115, executecode() in praisonaiagents.tools.pythontools…"
type: vulnerability-record
section: "Security Digest"
date_published: 2026-04-08
date_modified: 2026-04-09
publisher: erroneo.us
author: erroneo.us Security Desk
cve: "CVE-2026-39888"
kev: false
cvss: 10
epss: 0.00609
license: All rights reserved. Quote with attribution and a link.
---

# CVE-2026-39888: PraisonAI has sandbox escape via exception frame traversal in `execute_code` (subprocess mode)

**Signal:** Critical, preconditions apply. Severe if exploited, but exploitation needs conditions that may not apply to you. (Computed from CISA KEV, EPSS and CVSS; not an editorial verdict.)

## Should you act?

- Not in CISA KEV , but CISA’s SSVC assessment records a public proof-of-concept, so attack code exists.
- EPSS 0.6% , percentile 48: FIRST’s model estimates a 0.6% chance of exploitation activity in the next 30 days, higher than 48% of all scored CVEs (low). EPSS is a probability, not a verdict.
- Needs an account (low (any account)). Exposure depends on who can log in.
- Only applies if your dependency tree includes praisonaiagents (PyPI) <= 1.5.114, fixed in 1.5.115 . Check your lockfile, including transitive dependencies.

## What it is

PraisonAI is a multi-agent teams system. Prior to 1.5.115, executecode() in praisonaiagents.tools.pythontools defaults to sandboxmode="sandbox", which runs user code in a subprocess wrapped with a restricted builtins dict and an AST-based blocklist. The AST blocklist embedded inside the subprocess wrapper (blockedattrs of pythontools.py) contains only 11 attribute names — a strict subset of the 30+ names blocked in the direct-execution path. The four attributes that form a frame-traversal chain out of the sandbox are all absent from the subprocess list (traceback, tbframe, fback, and fbuiltins). Chaining these attributes through a caught exception exposes the real Python builtins dict of the subprocess wrapper frame, from which exec can be retrieved and called under a non-blocked variable name — bypassing every remaining security layer. This vulnerability is fixed in 1.5.115.

## Affected packages

- PyPI `praisonaiagents` <= 1.5.114 → fixed: 1.5.115

## Affected products (CVE record)

- MervinPraison praisonaiagents: < 1.5.115

## Severity

- GitHub_M CVSS 3.1: 10 `CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H`
- GitHub CVSS 3.1: 9.9 `CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H`

## Exploitation

- CISA KEV: not listed (no confirmed in-the-wild exploitation known to CISA).
- CISA SSVC assessment: exploitation poc , automatable no , technical impact total .
- FIRST EPSS (model of 2026-10-21): 0.61% probability of exploitation activity in the next 30 days; percentile 48.

## Sources

- [GitHub Advisory GHSA-qf73-2hrx-xprp](https://github.com/advisories/GHSA-qf73-2hrx-xprp)
- [CVE.org record CVE-2026-39888](https://www.cve.org/CVERecord?id=CVE-2026-39888)
- [NVD entry CVE-2026-39888](https://nvd.nist.gov/vuln/detail/CVE-2026-39888)
- [github.com](https://github.com/MervinPraison/PraisonAI/security/advisories/GHSA-qf73-2hrx-xprp)

---
Source page: https://erroneo.us/security/cve/CVE-2026-39888/ · Security Digest: https://erroneo.us/security/ · More: https://erroneo.us/llms.txt
