Skip to main content

WASM-powered, sandboxed version of `exec()` for running dynamic code.

Project description

wasm_exec

Wasm-powered, sandboxed implementation of exec() for safely running dynamic Python code

lint test License: MIT

Install

pip install wasm_exec

Usage

from wasm_exec import WasmExecutor

wasm = WasmExecutor()
code = "print('Hello World!')"
print(wasm.exec(code).text)

>> Hello World!

How does this work?

  • Arbitrary Python code is passed to the wasm_exec function
  • A separate Wasm-based Python interpreter is setup via wasmtime in a chroot jail
  • The arbitrary code is executed safely inside your isolated interpreter

Why?

There are number of use-cases emerging that require arbitrary code execution, often code that is generate by LLMs (Large Language Models) like ChatGPT. This can enable some really cool functionality - like generative BI or website generation - but also introduce a massive security flaw if implemented via eval() or exec(). This is because arbitrary code can be executed using these methods. In a worst case scenario, exec'ing arbitrary code could enable some to rm -rf / your entire server!

This repo intends to provide a secure method of executing arbitrary Python code to empower LLM-based code generation. This was originally intended to be a direct PR to Langchain but given that the problems with exec() extend to the entire Python ecosystem, it was decided that it would be better as a standalone package.

Prove it.

I understand any claims of being able to securely execute arbitrary code strings (rightfully) raises some eyebrows. Because of that, I've included a set of security-focused tests that attempt to use some common escape patterns to attempt to escape the jailed Wasm Python interpreter, including running the rm -rf / test on my own personal desktop.

I strongly welcome any attempts to break the interpreter containment and/or security improvements to the code!

Implementation Notes

  • I do not claim the jailed Wasm Python interpreter as my original idea. This was inspired by Simon Willison's Blog on this topic and the linked code provided by Tim Bart
  • The Wasm Python runtime is redistributed from VMWare Wasm Labs' offering of a Python Wasm runtime
  • Shout0out to Langchain as a source for Github workflows
  • Because it is a separate interpreter, there are currently some limitations on imports. I am working to test and document these limitations.

Contributing

Contributions VERY welcome! See here.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

wasm_exec-0.1.9.tar.gz (9.8 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

wasm_exec-0.1.9-py3-none-any.whl (9.9 MB view details)

Uploaded Python 3

File details

Details for the file wasm_exec-0.1.9.tar.gz.

File metadata

  • Download URL: wasm_exec-0.1.9.tar.gz
  • Upload date:
  • Size: 9.8 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.6.1 CPython/3.10.12 Linux/6.2.0-1018-azure

File hashes

Hashes for wasm_exec-0.1.9.tar.gz
Algorithm Hash digest
SHA256 5221aee65b1ca310a681003654f1c20ff67ea20dc55bec9e2f28420d8898671d
MD5 f46d51db0c19c5bee68b2961eb163689
BLAKE2b-256 b2fe965223988cfdb00922d7b5a1e25e221c3971346cd2417f82a67be08da18a

See more details on using hashes here.

File details

Details for the file wasm_exec-0.1.9-py3-none-any.whl.

File metadata

  • Download URL: wasm_exec-0.1.9-py3-none-any.whl
  • Upload date:
  • Size: 9.9 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.6.1 CPython/3.10.12 Linux/6.2.0-1018-azure

File hashes

Hashes for wasm_exec-0.1.9-py3-none-any.whl
Algorithm Hash digest
SHA256 9526a1d93b8007b8f5fd7c50458f9f834cdbd390044d37bd1dabe10ea0daa1c8
MD5 ef197300da479fc3d5aad39a7dc82d6c
BLAKE2b-256 6baaa57373ee24079dfa94f52a6ccec49133a8f5eed81641aa2b4ddb62214d61

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page