<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <id>https://cve.radiocsirt.org/rss/recent/all/10</id>
  <title>Most recent entries from all</title>
  <updated>2026-10-25T22:25:42.494301+00:00</updated>
  <author>
    <name>Vulnerability-Lookup</name>
    <email>csirt@opendfir.org</email>
  </author>
  <link href="https://cve.radiocsirt.org" rel="alternate"/>
  <generator uri="https://lkiesow.github.io/python-feedgen" version="1.0.0">python-feedgen</generator>
  <subtitle>Contains only the most 10 recent entries.</subtitle>
  <entry>
    <id>https://cve.radiocsirt.org/vuln/ghsa-22cj-m4wf-fv2c</id>
    <title>GHSA-22cj-m4wf-fv2c — PraisonAI Dynamic Context history and terminal tools read files outside configured storage via path traversal</title>
    <updated>2026-10-25T22:25:42.495689+00:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml"><p><strong>Affected:</strong> PyPI: praisonai</p>
<p># PraisonAI Dynamic Context history and terminal tools read files outside configured storage via path traversal</p>
<p>## Summary</p>
<p>PraisonAI's Dynamic Context module provides filesystem-backed history and
terminal-log storage. The SDK reference describes the module as providing:</p>
<p>- artifact storage for tool outputs, history, and terminal logs;
- history persistence with search; and
- terminal session logging.</p>
<p>The module also exports agent-callable tool factories:</p>
<p>- `create_history_tools()` returns `history_search`, `history_tail`, and
  `history_get`.
- `create_terminal_tools()` returns `terminal_tail`, `terminal_grep`, and
  `terminal_commands`.</p>
<p>Those tools accept `run_id` and `agent_id` arguments from the tool caller. The
underlying stores join those values into filesystem paths without rejecting
absolute paths or `..` traversal:</p>
<p>```python
history_dir = self.base_dir / run_id / "history"
return history_dir / f"{agent_id}.jsonl"
```</p>
<p>```python
terminal_dir = self.base_dir / run_id / "terminal"
return terminal_dir / f"{agent_id}.log"
```</p>
<p>Because `run_id` can be an absolute path and `agent_id` can contain traversal,
a lower-trust prompt/user that can call these tools can read `.jsonl` and
`.log` files outside the configured Dynamic Context base directory.</p>
<p>## Affected Product</p>
<p>- Repository: `MervinPraison/PraisonAI`
- Ecosystem: `pip`
- Package: `praisonai`
- Component: Dynamic Context history and terminal tools
- Current source paths:
  - `src/praisonai/praisonai/context/hist…</p></div>
    </content>
    <link href="https://cve.radiocsirt.org/vuln/ghsa-22cj-m4wf-fv2c"/>
  </entry>
</feed>
