DevOps & Platform Eng

ObsidianWall's eval() Rejection: Security & Audibility Wins

So, you're building a policy engine and the siren song of `eval()` beckons. Clean, fast, and deceptively simple. Except, as Aisha at ObsidianWall learned, it's a trap that leads straight to a compliance and security dumpster fire.

A visual metaphor for a restricted programming language, perhaps a simple calculator with clear buttons contrasted with a complex, sprawling circuit board.

Key Takeaways

  • ObsidianWall rejects `eval()` for its policy engine due to inherent security risks and lack of determinism/auditability.
  • The core principle is that AI may advise but not govern, extending to the technical decision of using a restricted expression grammar over general-purpose code execution.
  • A tiny, deliberately limited grammar for policy evaluation is prioritized for its explicit boundaries, auditability, and deterministic outcomes, ensuring trustworthy governance.

Look, the ink on the press release is barely dry, and already we’re seeing the familiar gleam of ‘programmable assurance platforms.’ ObsidianWall’s Aisha is calling her new thing ObsidianWall Verdict, a ‘deterministic pre-deployment infrastructure governance engine.’ Sounds… important. And frankly, like most of the enterprise software churn, it’s designed to make someone’s life easier, presumably by blocking deployments that are about to go catastrophically wrong. Fine. But the real story here isn’t the fancy platform; it’s the decision to not use eval().

And that, my friends, is where things get interesting. Because for about five minutes, as Aisha herself admits, eval() looks like a godsend. A single line of Python: result = eval(expression, context). It’s the kind of thing that makes you feel clever, like you’ve outsmarted complexity with pure, unadulterated code elegance. Until you remember what eval() actually does.

It runs anything. Anything. And when your platform is tasked with, say, blocking infrastructure deployments based on policy, that ‘anything’ suddenly includes things like __import__('os').system('rm -rf /'). Or, perhaps more subtly, pulling down secrets and exfiltrating them to some nefarious server. Aisha lays it out starkly: this isn’t a theoretical risk; it’s a gaping security hole disguised as a shortcut.

Why eval() is a Security Nightmare You Can’t Sandbox

Sure, the standard advice is to sandbox eval(). Remove the builtins. Make it look like a digital chastity belt. But as Aisha points out, and as any seasoned security researcher will tell you, Python’s object model is a labyrinth. There are always backdoors, always ways to escape the cage. The problem isn’t that sandboxing is hard; it’s that it’s fundamentally unsolved. Every sandbox ever built for eval() has eventually been broken.

But here’s the kicker, the part that truly sets this apart from your typical ‘don’t use eval()’ PSA: the security risk, while massive, isn’t even the primary reason Aisha tossed it out. That’s a seismic shift.

A governance engine, she argues, isn’t a calculator. It’s a decision-maker. It needs to be trustworthy. And for something to be trustworthy in the eyes of compliance officers and auditors (people who, bless their hearts, speak a different language than developers), it needs three things: determinism, auditability, and boundedness.

eval() fails all three. It’s non-deterministic because it can fiddle with state, perform I/O, and generally cause chaos. It’s not auditable because you can’t explain its behavior without explaining all of Python. And it’s definitely not bounded – it can do anything.

The restriction is not a limitation. It is the entire point.

This is the core insight. ObsidianWall isn’t just avoiding a vulnerability; it’s embracing a philosophy. The platform’s doctrine states: AI may advise, but it may NOT authoritatively govern. That principle filters down to the most granular level. A governance engine shouldn’t have the full power of a programming language; it should have precisely the power it needs and no more.

So, what did Aisha build instead? Not a complex parser, but a restricted expression grammar. Think of it as a tiny, bespoke language designed for one job: evaluating policy conditions. It supports arithmetic operations like addition and basic comparison operators (<=, >, ==). The operands? Context keys (like current_spend) and numeric literals. That’s it. No function calls, no imports, no string manipulation, no loops, no conditionals beyond the comparison itself.

This isn’t a hack; it’s a feature. If a policy needs something outside this tiny grammar, the evaluator spits out a clear error. It’s explicit. It’s testable. It’s a controlled environment that, crucially, allows auditors to follow the money – or in this case, the budget.

Is This the Future of Policy Enforcement?

ObsidianWall’s approach feels like a throwback to an era where tools did one thing and did it exceptionally well. In a world obsessed with LLMs writing our code and AI making our decisions, the idea of intentionally limiting a system’s capabilities might seem counterintuitive. But for systems that require ironclad guarantees of determinism and auditability – like financial controls or, well, infrastructure governance – this is the only sane path forward.

It’s a quiet rebellion against the sprawl, a deliberate choice to prioritize clarity and safety over raw power. And in the high-stakes world of pre-deployment checks, where one wrong move can bring down the house, that deliberate limitation is precisely what makes ObsidianWall Verdict trustworthy.

It’s a stark reminder that sometimes, the most powerful solutions come not from adding more features, but from ruthlessly removing them.

**


🧬 Related Insights

Frequently Asked Questions**

What does ObsidianWall Verdict do? ObsidianWall Verdict is a deterministic engine that evaluates infrastructure plans against defined policies before they are deployed, providing an enforcement decision and an audit trail.

Will this make developers’ jobs obsolete? No. This tool aims to automate and improve the governance of infrastructure deployments, ensuring policies are met. It doesn’t replace the need for developers to build and manage systems.

How does this differ from traditional policy-as-code tools? Unlike tools that might rely on general-purpose programming languages with potentially insecure evaluation methods like eval(), ObsidianWall Verdict uses a strictly limited, deterministic expression grammar for enhanced security and auditability.

Sam O'Brien
Written by

Programming language and ecosystem reporter. Tracks releases, package managers, and developer community shifts.

Frequently asked questions

What does ObsidianWall Verdict do?
ObsidianWall Verdict is a deterministic engine that evaluates infrastructure plans against defined policies *before* they are deployed, providing an enforcement decision and an audit trail.
Will this make developers' jobs obsolete?
No. This tool aims to automate and improve the governance of infrastructure deployments, ensuring policies are met. It doesn't replace the need for developers to build and manage systems.
How does this differ from traditional policy-as-code tools?
Unlike tools that might rely on general-purpose programming languages with potentially insecure evaluation methods like `eval()`, ObsidianWall Verdict uses a strictly limited, deterministic expression grammar for enhanced security and auditability.

Worth sharing?

Get the best Developer Tools stories of the week in your inbox — no noise, no spam.

Originally reported by dev.to

Stay in the loop

The week's most important stories from DevTools Feed, delivered once a week.