<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
  <channel>
    <title>Most recent entries from all</title>
    <link>https://vulnerability.circl.lu</link>
    <description>Contains only the most 10 recent entries.</description>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>python-feedgen</generator>
    <language>en</language>
    <lastBuildDate>Thu, 08 Oct 2026 08:32:35 +0000</lastBuildDate>
    <item>
      <title>CVE-2026-40117 — PraisonAIAgents Affected by Arbitrary File Read via read_skill_file Missing Workspace Boundary and Approval Gate</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2026-40117</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; MervinPraison PraisonAIAgents&lt;/p&gt;
&lt;p&gt;PraisonAIAgents is a multi-agent teams system. Prior to 1.5.128, read_skill_file() in skill_tools.py allows reading arbitrary files from the filesystem by accepting an unrestricted skill_path parameter. Unlike file_tools.read_file which enforces workspace boundary confinement, and unlike run_skill_script which requires critical-level approval, read_skill_file has neither protection. An agent influenced by prompt injection can exfiltrate sensitive files without triggering any approval prompt. This vulnerability is fixed in 1.5.128.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; MervinPraison PraisonAIAgents&lt;/p&gt;
&lt;p&gt;PraisonAIAgents is a multi-agent teams system. Prior to 1.5.128, read_skill_file() in skill_tools.py allows reading arbitrary files from the filesystem by accepting an unrestricted skill_path parameter. Unlike file_tools.read_file which enforces workspace boundary confinement, and unlike run_skill_script which requires critical-level approval, read_skill_file has neither protection. An agent influenced by prompt injection can exfiltrate sensitive files without triggering any approval prompt. This vulnerability is fixed in 1.5.128.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2026-40117</guid>
    </item>
    <item>
      <title>PYSEC-2026-2949 — PraisonAIAgents: Arbitrary File Read via read_skill_file Missing Workspace Boundary and Approval Gate</title>
      <link>https://vulnerability.circl.lu/vuln/pysec-2026-2949</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: praisonaiagents&lt;/p&gt;
&lt;p&gt;## Summary&lt;/p&gt;
&lt;p&gt;`read_skill_file()` in `skill_tools.py` allows reading arbitrary files from the filesystem by accepting an unrestricted `skill_path` parameter. Unlike `file_tools.read_file` which enforces workspace boundary confinement, and unlike `run_skill_script` which requires critical-level approval, `read_skill_file` has neither protection. An agent influenced by prompt injection can exfiltrate sensitive files without triggering any approval prompt.&lt;/p&gt;
&lt;p&gt;## Details&lt;/p&gt;
&lt;p&gt;The vulnerability is a missing authorization check in `read_skill_file()` at `src/praisonai-agents/praisonaiagents/tools/skill_tools.py:128`.&lt;/p&gt;
&lt;p&gt;The function&amp;#39;s path validation on line 163 only ensures `file_path` doesn&amp;#39;t escape `skill_path` via directory traversal:&lt;/p&gt;
&lt;p&gt;```python
# skill_tools.py:128-170
def read_skill_file(self, skill_path: str, file_path: str, encoding: str = &amp;#39;utf-8&amp;#39;) -&amp;gt; str:
    # ...
    skill_path = os.path.expanduser(skill_path)      # line 147
    if not os.path.isabs(skill_path):
        skill_path = os.path.join(self._working_directory, skill_path)
    skill_path = os.path.abspath(skill_path)          # line 150&lt;/p&gt;
&lt;p&gt;# ... existence checks ...&lt;/p&gt;
&lt;p&gt;full_path = os.path.join(skill_path, file_path)   # line 159
    full_path = os.path.abspath(full_path)             # line 160&lt;/p&gt;
&lt;p&gt;# Security check: ensure file is within skill directory
    if not full_path.startswith(skill_path):           # line 163
        return f&amp;#34;Error: Path traversal detected...&amp;#34;&lt;/p&gt;
&lt;p&gt;with open(full_path, &amp;#39;r&amp;#39;, encoding=encodin…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: praisonaiagents&lt;/p&gt;
&lt;p&gt;## Summary&lt;/p&gt;
&lt;p&gt;`read_skill_file()` in `skill_tools.py` allows reading arbitrary files from the filesystem by accepting an unrestricted `skill_path` parameter. Unlike `file_tools.read_file` which enforces workspace boundary confinement, and unlike `run_skill_script` which requires critical-level approval, `read_skill_file` has neither protection. An agent influenced by prompt injection can exfiltrate sensitive files without triggering any approval prompt.&lt;/p&gt;
&lt;p&gt;## Details&lt;/p&gt;
&lt;p&gt;The vulnerability is a missing authorization check in `read_skill_file()` at `src/praisonai-agents/praisonaiagents/tools/skill_tools.py:128`.&lt;/p&gt;
&lt;p&gt;The function&amp;#39;s path validation on line 163 only ensures `file_path` doesn&amp;#39;t escape `skill_path` via directory traversal:&lt;/p&gt;
&lt;p&gt;```python
# skill_tools.py:128-170
def read_skill_file(self, skill_path: str, file_path: str, encoding: str = &amp;#39;utf-8&amp;#39;) -&amp;gt; str:
    # ...
    skill_path = os.path.expanduser(skill_path)      # line 147
    if not os.path.isabs(skill_path):
        skill_path = os.path.join(self._working_directory, skill_path)
    skill_path = os.path.abspath(skill_path)          # line 150&lt;/p&gt;
&lt;p&gt;# ... existence checks ...&lt;/p&gt;
&lt;p&gt;full_path = os.path.join(skill_path, file_path)   # line 159
    full_path = os.path.abspath(full_path)             # line 160&lt;/p&gt;
&lt;p&gt;# Security check: ensure file is within skill directory
    if not full_path.startswith(skill_path):           # line 163
        return f&amp;#34;Error: Path traversal detected...&amp;#34;&lt;/p&gt;
&lt;p&gt;with open(full_path, &amp;#39;r&amp;#39;, encoding=encodin…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/pysec-2026-2949</guid>
    </item>
  </channel>
</rss>
