<?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-09T17:44:17.741132+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/euvd-2026-278364</id>
    <title>EUVD-2026-278364</title>
    <updated>2026-10-09T17:44:17.778136+00:00</updated>
    <content>EUVD-2026-278364</content>
    <link href="https://cve.radiocsirt.org/vuln/euvd-2026-278364"/>
  </entry>
  <entry>
    <id>https://cve.radiocsirt.org/vuln/fkie_cve-2026-34172</id>
    <title>fkie_cve-2026-34172</title>
    <updated>2026-10-09T17:44:17.778183+00:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>Giskard is an open-source Python library for testing and evaluating agentic systems. Prior to versions 0.3.4 and 1.0.2b1, ChatWorkflow.chat(message) passes its string argument directly as a Jinja2 template source to a non-sandboxed Environment. A developer who passes user input to this method enables full remote code execution via Jinja2 class traversal. The method name chat and parameter name message naturally invite passing user input directly, but the string is silently parsed as a Jinja2 template, not treated as plain text. This issue has been patched in versions 0.3.4 and 1.0.2b1.</p>
      </div>
    </content>
    <link href="https://cve.radiocsirt.org/vuln/fkie_cve-2026-34172"/>
  </entry>
  <entry>
    <id>https://cve.radiocsirt.org/vuln/ghsa-frv4-x25r-588m</id>
    <title>GHSA-frv4-x25r-588m — Giskard Agents have Server-side template injection via ChatWorkflow.chat() using non-sandboxed Jinja2 Environment</title>
    <updated>2026-10-09T17:44:17.778227+00:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml"><p><strong>Affected:</strong> PyPI: giskard-agents</p>
<p>## Summary</p>
<p>`ChatWorkflow.chat(message)` passes its string argument directly as a Jinja2 template source to a non-sandboxed `Environment`. A developer who passes user input to this method enables full remote code execution via Jinja2 class traversal.</p>
<p>The method name `chat` and parameter name `message` naturally invite passing user input directly, but the string is silently parsed as a Jinja2 template, not treated as plain text.</p>
<p>## Root Cause</p>
<p>`libs/giskard-agents/src/giskard/agents/workflow.py` line ~261:
```python
def chat(self, message: str | Message | MessageTemplate, role: Role = "user") -&gt; Self:
    if isinstance(message, str):
        message = MessageTemplate(role=role, content_template=message)
```</p>
<p>The string becomes `content_template`, which is parsed by `from_string()`:</p>
<p>`libs/giskard-agents/src/giskard/agents/templates/message.py` lines 14-15:
```python
def render(self, **kwargs: Any) -&gt; Message:
    template = _inline_env.from_string(self.content_template)
    rendered_content = template.render(**kwargs)
```</p>
<p>The Jinja2 Environment is not sandboxed:</p>
<p>`libs/giskard-agents/src/giskard/agents/templates/environment.py` line 37:
```python
_inline_env = Environment(
    autoescape=False,
    # Not SandboxedEnvironment
)
```</p>
<p>## Proof of Concept</p>
<p>```python
from jinja2 import Environment
env = Environment()  # Same as giskard's _inline_env</p>
<p># Class traversal reaches os.popen
t = env.from_string("{{ ''.__class__.__mro__[1].__subclasses__() | length }}")
print(t.render(…</p></div>
    </content>
    <link href="https://cve.radiocsirt.org/vuln/ghsa-frv4-x25r-588m"/>
  </entry>
  <entry>
    <id>https://cve.radiocsirt.org/vuln/pysec-2026-2487</id>
    <title>PYSEC-2026-2487 — Giskard Agents have Server-side template injection via ChatWorkflow.chat() using non-sandboxed Jinja2 Environment</title>
    <updated>2026-10-09T17:44:17.778284+00:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml"><p><strong>Affected:</strong> PyPI: giskard-agents</p>
<p>## Summary</p>
<p>`ChatWorkflow.chat(message)` passes its string argument directly as a Jinja2 template source to a non-sandboxed `Environment`. A developer who passes user input to this method enables full remote code execution via Jinja2 class traversal.</p>
<p>The method name `chat` and parameter name `message` naturally invite passing user input directly, but the string is silently parsed as a Jinja2 template, not treated as plain text.</p>
<p>## Root Cause</p>
<p>`libs/giskard-agents/src/giskard/agents/workflow.py` line ~261:
```python
def chat(self, message: str | Message | MessageTemplate, role: Role = "user") -&gt; Self:
    if isinstance(message, str):
        message = MessageTemplate(role=role, content_template=message)
```</p>
<p>The string becomes `content_template`, which is parsed by `from_string()`:</p>
<p>`libs/giskard-agents/src/giskard/agents/templates/message.py` lines 14-15:
```python
def render(self, **kwargs: Any) -&gt; Message:
    template = _inline_env.from_string(self.content_template)
    rendered_content = template.render(**kwargs)
```</p>
<p>The Jinja2 Environment is not sandboxed:</p>
<p>`libs/giskard-agents/src/giskard/agents/templates/environment.py` line 37:
```python
_inline_env = Environment(
    autoescape=False,
    # Not SandboxedEnvironment
)
```</p>
<p>## Proof of Concept</p>
<p>```python
from jinja2 import Environment
env = Environment()  # Same as giskard's _inline_env</p>
<p># Class traversal reaches os.popen
t = env.from_string("{{ ''.__class__.__mro__[1].__subclasses__() | length }}")
print(t.render(…</p></div>
    </content>
    <link href="https://cve.radiocsirt.org/vuln/pysec-2026-2487"/>
  </entry>
</feed>
