🛡️ CVE-2026-57144 — praisonai

🟠 CVSS 8.0 — High ✅ No Known Exploit CWE-266 OSV
8.0
CVSS Score
0 Low4 Medium7 High9 Critical10

Description

PraisonAI SandlockSandbox falls back to unrestricted subprocess execution when Landlock is unavailable

Summary

praisonai.sandbox.SandlockSandbox is documented and implemented as the kernel-enforced sandbox backend for untrusted code. Its SandboxConfig.native() path lets callers configure allowed filesystem paths and network=False.

On systems where the optional sandlock module imports but reports that Landlock is unavailable, SandlockSandbox.execute() and run_command() do not fail closed. They silently fall back to SubprocessSandbox(self.config).

That fallback keeps the same high-level native policy object but does not enforce the native filesystem or network boundary during code execution. A sandboxed payload can read files outside the configured allowed path and open network connections despite network=False.

Technical Details

SandboxConfig.native() creates a restricted native policy and records caller-provided writable paths plus the requested network posture:

```python

return cls(

sandbox_type="native",

working_dir=os.getcwd(),

security_policy=SecurityPolicy(

allow_network=network,

allow_file_write=True,

allow_subprocess=True,

allowed_paths=resolved_paths,

),

metadata={"writable_paths": resolved_paths, "network": network},

)

```

SandlockSandbox builds the intended kernel policy with Landlock-backed filesystem allowlisting and network denial:

```python

policy = Policy(

fs_readable=allowed_read_paths,

fs_writable=allowed_write_paths,

net_allow_hosts=[] if not limits.network_enabled else None,

max_memory=f"{limits.memory_mb}M",

max_processes=limits.max_processes,

max_open_files=limits.max_open_files,

)

```

However, both execution paths fail open when Sandlock is unavailable:

```python

if not self.is_available:

logger.warning("Sandlock not available, falling back to subprocess")

from .subprocess import SubprocessSandbox

fallback = SubprocessSandbox(self.config)

return await fallback.execute(code, language, limits, env, working_dir)

```

SubprocessSandbox.execute() writes the code to a temp file and runs python with a minimal environment and POSIX rlimits. It does not install a filesystem sandbox, network namespace, syscall filter, chroot, Landlock policy, or path allowlist for the code execution path. The safe_sandbox_path() checks only protect the read_file(), write_file(), and list_files() helper methods.

Why This Is Not Intended Behavior

The report is not based only on a trust-model disagreement. The code and docs define a concrete boundary:

  • PraisonAI's Sandlock README says the backend provides kernel-level filesystem allowlisting, network isolation, seccomp filtering, and blocks /etc/passwd, SSH keys, AWS credentials, and unauthorized connections.
  • The security demo creates SandboxConfig.native(writable_paths=["./safe_workspace"], network=False) and labels file and network access as blocked operations.
  • The upstream sandlock package requires Linux with a compatible Landlock ABI and documents a fail-closed default for missing required protections unless the caller explicitly opts into degraded protection.
  • PraisonAI's own current security page recommends sandboxed execution and says path traversal protection is enabled by default for local sandbox backends.

The bug is the silent fallback from an unavailable kernel-enforced boundary to plain subprocess execution without preserving the configured native policy.

PoV

Run from a PraisonAI source checkout:

```bash

python3 poc/pov_poc.py \

--repo /path/to/PraisonAI

```

The PoV:

1. injects a fake sandlock module that imports successfully but reports no usable Landlock support;

2. configures SandboxConfig.native(writable_paths=[tenant_a], network=False);

3. creates tenant-b-secret.txt outside the configured path;

4. starts a localhost TCP listener;

5. executes code through SandlockSandbox.execute().

Observed result on v4.6.58:

```json

{

"child_output": {

"network_reply": "local-ok",

"outside_read": "TENANT_B_CANARY"

},

"configured_network": false,

"outside_path_under_allowed": false,

"sandlock_available": false,

"sandbox_type": "sandlock",

"status": "COMPLETED",

"vulnerable": true

}

```

This proves both policy boundaries are crossed:

  • the file read target is not under the configured allowed path;
  • the localhost network connection succeeds even though the native policy was created with network=False.

Full PoV script:

```python

#!/usr/bin/env python3

"""Local-only PoV for poc.

The PoV simulates a system where the optional `sandlock` Python package is

installed but kernel Landlock support is unavailable. That is the exact branch

handled by `SandlockSandbox.execute()`: it logs a warning and falls back to

`SubprocessSandbox`.

No external network is used. The network control is a localhost TCP listener.

No sensitive host files are read. The filesystem

How this vulnerability can be exploited

This issue can be reached with local access to the system, attack complexity is low, an attacker needs low-level privileges on the target. No user interaction is required. The scope is changed, meaning a successful attack can affect components beyond the vulnerable one. Rated impact: confidentiality high, integrity high, availability high.

Affected software

CVE-2026-57144 is recorded against 1 package.

  • praisonai (from 4.5.110 up to 4.6.61)

Timeline and source

Published on 18 June 2026 and last revised on 23 July 2026. No public exploit is currently recorded for this entry. Record sourced from OSV.

References

github.com (Web)
github.com (Package)

Details

Severity HIGH
CVSS Score 8.0
CVSS Vector CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H
CWE CWE-266
Public Exploit ✅ No
Source OSV
Published 2026-06-18
Updated 2026-08-12
Modified 2026-07-23
Fix URL N/A

Affected Packages

Software From version Fixed in
praisonai 4.5.110 4.6.61

Similar Threats

Site Security Check

Is praisonai part of your stack?

CVE-2026-57144 is rated CVSS 8.0 High. BotEraser scans your installation against known CVE records and tells you whether this vulnerability applies to the versions you actually run.

Scan My Site Free →

No credit card required  ·  Results in minutes

ⓘ Data Notice: The information presented above has been compiled from publicly available internet sources. Boteraser aggregates this data solely for informational purposes and does not independently classify, evaluate, or endorse any findings about the vulnerabilities listed. The accuracy and completeness of this information is the sole responsibility of the original publishers. Boteraser and its operators accept no liability for any decisions made based on this data.