<?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>Tue, 29 Sep 2026 05:29:37 +0000</lastBuildDate>
    <item>
      <title>BREW-omnara-CVE-2026-34444 — Lupa has a Sandbox escape and RCE due to incomplete attribute_filter enforcement in getattr / setattr</title>
      <link>https://vulnerability.circl.lu/vuln/brew-omnara-cve-2026-34444</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Homebrew: omnara&lt;/p&gt;
&lt;p&gt;### Summary
The `attribute_filter` in the Lupa library is intended to restrict access to sensitive Python attributes when exposing objects to Lua.&lt;/p&gt;
&lt;p&gt;However, the filter is not consistently applied when attributes are accessed through built-in functions like getattr and setattr. This allows an attacker to bypass the intended restrictions and eventually achieve arbitrary code execution.&lt;/p&gt;
&lt;p&gt;### Details
The `attribute_filter` is meant to block access to attributes such as `__class__`, `__mro__`, and similar internal properties.&lt;/p&gt;
&lt;p&gt;In practice, it only applies to direct attribute access:
- `obj.attr` → filtered
- `getattr(obj, &amp;#34;attr&amp;#34;)` → not filtered
Because of this inconsistency, it’s possible to bypass the filter entirely, if access to the Python builtins is granted to Lua code.&lt;/p&gt;
&lt;p&gt;An attacker can use getattr to-
- Access `__class__`
- Walk the `__mro__` chain
- Call `__subclasses__()`
- Iterate over available classes
- Find a function that exposes `__globals__`
- Retrieve something like `os.system`&lt;/p&gt;
&lt;p&gt;At that point, arbitrary command execution becomes straightforward.&lt;/p&gt;
&lt;p&gt;This effectively breaks the security boundary that `attribute_filter` is expected to enforce.&lt;/p&gt;
&lt;p&gt;### PoC
The following example shows how the filter can be bypassed to execute `os.system`:&amp;#39;
```
import lupa
from lupa import LuaRuntime&lt;/p&gt;
&lt;p&gt;def protected_attribute_filter(obj, attr_name, is_setting):
    if isinstance(attr_name, str) and attr_name.startswith(&amp;#39;_&amp;#39;):
        raise AttributeError(f&amp;#34;Access to &amp;#39;{attr_name}&amp;#39; is forbidde…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Homebrew: omnara&lt;/p&gt;
&lt;p&gt;### Summary
The `attribute_filter` in the Lupa library is intended to restrict access to sensitive Python attributes when exposing objects to Lua.&lt;/p&gt;
&lt;p&gt;However, the filter is not consistently applied when attributes are accessed through built-in functions like getattr and setattr. This allows an attacker to bypass the intended restrictions and eventually achieve arbitrary code execution.&lt;/p&gt;
&lt;p&gt;### Details
The `attribute_filter` is meant to block access to attributes such as `__class__`, `__mro__`, and similar internal properties.&lt;/p&gt;
&lt;p&gt;In practice, it only applies to direct attribute access:
- `obj.attr` → filtered
- `getattr(obj, &amp;#34;attr&amp;#34;)` → not filtered
Because of this inconsistency, it’s possible to bypass the filter entirely, if access to the Python builtins is granted to Lua code.&lt;/p&gt;
&lt;p&gt;An attacker can use getattr to-
- Access `__class__`
- Walk the `__mro__` chain
- Call `__subclasses__()`
- Iterate over available classes
- Find a function that exposes `__globals__`
- Retrieve something like `os.system`&lt;/p&gt;
&lt;p&gt;At that point, arbitrary command execution becomes straightforward.&lt;/p&gt;
&lt;p&gt;This effectively breaks the security boundary that `attribute_filter` is expected to enforce.&lt;/p&gt;
&lt;p&gt;### PoC
The following example shows how the filter can be bypassed to execute `os.system`:&amp;#39;
```
import lupa
from lupa import LuaRuntime&lt;/p&gt;
&lt;p&gt;def protected_attribute_filter(obj, attr_name, is_setting):
    if isinstance(attr_name, str) and attr_name.startswith(&amp;#39;_&amp;#39;):
        raise AttributeError(f&amp;#34;Access to &amp;#39;{attr_name}&amp;#39; is forbidde…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/brew-omnara-cve-2026-34444</guid>
    </item>
    <item>
      <title>CVE-2026-34444 — Lupa has a Sandbox escape and RCE due to incomplete attribute_filter enforcement in getattr / setattr</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2026-34444</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; scoder lupa, Red Hat Satellite 6.18, Red Hat OpenShift AI (RHOAI)&lt;/p&gt;
&lt;p&gt;Lupa integrates the runtimes of Lua or LuaJIT2 into CPython. In 2.6 and earlier, attribute_filter is not consistently applied when attributes are accessed through built-in functions like getattr and setattr. This allows an attacker to bypass the intended restrictions and eventually achieve arbitrary code execution.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; scoder lupa, Red Hat Satellite 6.18, Red Hat OpenShift AI (RHOAI)&lt;/p&gt;
&lt;p&gt;Lupa integrates the runtimes of Lua or LuaJIT2 into CPython. In 2.6 and earlier, attribute_filter is not consistently applied when attributes are accessed through built-in functions like getattr and setattr. This allows an attacker to bypass the intended restrictions and eventually achieve arbitrary code execution.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2026-34444</guid>
    </item>
    <item>
      <title>PYSEC-2026-2613 — Lupa has a Sandbox escape and RCE due to incomplete attribute_filter enforcement in getattr / setattr</title>
      <link>https://vulnerability.circl.lu/vuln/pysec-2026-2613</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: lupa&lt;/p&gt;
&lt;p&gt;### Summary
The `attribute_filter` in the Lupa library is intended to restrict access to sensitive Python attributes when exposing objects to Lua.&lt;/p&gt;
&lt;p&gt;However, the filter is not consistently applied when attributes are accessed through built-in functions like getattr and setattr. This allows an attacker to bypass the intended restrictions and eventually achieve arbitrary code execution.&lt;/p&gt;
&lt;p&gt;### Details
The `attribute_filter` is meant to block access to attributes such as `__class__`, `__mro__`, and similar internal properties.&lt;/p&gt;
&lt;p&gt;In practice, it only applies to direct attribute access:
- `obj.attr` → filtered
- `getattr(obj, &amp;#34;attr&amp;#34;)` → not filtered
Because of this inconsistency, it’s possible to bypass the filter entirely, if access to the Python builtins is granted to Lua code.&lt;/p&gt;
&lt;p&gt;An attacker can use getattr to-
- Access `__class__`
- Walk the `__mro__` chain
- Call `__subclasses__()`
- Iterate over available classes
- Find a function that exposes `__globals__`
- Retrieve something like `os.system`&lt;/p&gt;
&lt;p&gt;At that point, arbitrary command execution becomes straightforward.&lt;/p&gt;
&lt;p&gt;This effectively breaks the security boundary that `attribute_filter` is expected to enforce.&lt;/p&gt;
&lt;p&gt;### PoC
The following example shows how the filter can be bypassed to execute `os.system`:&amp;#39;
```
import lupa
from lupa import LuaRuntime&lt;/p&gt;
&lt;p&gt;def protected_attribute_filter(obj, attr_name, is_setting):
    if isinstance(attr_name, str) and attr_name.startswith(&amp;#39;_&amp;#39;):
        raise AttributeError(f&amp;#34;Access to &amp;#39;{attr_name}&amp;#39; is forbidde…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: lupa&lt;/p&gt;
&lt;p&gt;### Summary
The `attribute_filter` in the Lupa library is intended to restrict access to sensitive Python attributes when exposing objects to Lua.&lt;/p&gt;
&lt;p&gt;However, the filter is not consistently applied when attributes are accessed through built-in functions like getattr and setattr. This allows an attacker to bypass the intended restrictions and eventually achieve arbitrary code execution.&lt;/p&gt;
&lt;p&gt;### Details
The `attribute_filter` is meant to block access to attributes such as `__class__`, `__mro__`, and similar internal properties.&lt;/p&gt;
&lt;p&gt;In practice, it only applies to direct attribute access:
- `obj.attr` → filtered
- `getattr(obj, &amp;#34;attr&amp;#34;)` → not filtered
Because of this inconsistency, it’s possible to bypass the filter entirely, if access to the Python builtins is granted to Lua code.&lt;/p&gt;
&lt;p&gt;An attacker can use getattr to-
- Access `__class__`
- Walk the `__mro__` chain
- Call `__subclasses__()`
- Iterate over available classes
- Find a function that exposes `__globals__`
- Retrieve something like `os.system`&lt;/p&gt;
&lt;p&gt;At that point, arbitrary command execution becomes straightforward.&lt;/p&gt;
&lt;p&gt;This effectively breaks the security boundary that `attribute_filter` is expected to enforce.&lt;/p&gt;
&lt;p&gt;### PoC
The following example shows how the filter can be bypassed to execute `os.system`:&amp;#39;
```
import lupa
from lupa import LuaRuntime&lt;/p&gt;
&lt;p&gt;def protected_attribute_filter(obj, attr_name, is_setting):
    if isinstance(attr_name, str) and attr_name.startswith(&amp;#39;_&amp;#39;):
        raise AttributeError(f&amp;#34;Access to &amp;#39;{attr_name}&amp;#39; is forbidde…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/pysec-2026-2613</guid>
    </item>
  </channel>
</rss>
