- Pydantic vừa public một honeypot tên Hack Monty: POST Python code vào /run/, thoát sandbox và đọc được /app/secret.txt hoặc biến môi trường SECRET — nhận $5,000.
- Đây là lời mời pentest công khai cho Monty, interpreter Python viết từ zero bằng Rust, khởi động dưới 1 microsecond, dùng cho code-mode của Pydantic AI.
TL;DR
Pydantic vừa mở một honeypot có tên Hack Monty: bạn POST Python code vào endpoint /run/, server chạy code đó bên trong Monty — sandbox Python của Pydantic viết bằng Rust. Thoát được sandbox và đọc được /app/secret.txt hoặc giá trị biến môi trường SECRET, Pydantic trả $5,000 USD. Đây vừa là bug bounty, vừa là màn PR rất tỉnh: Monty được thiết kế để chạy code do LLM sinh ra, khởi động dưới 1μs, và sắp thành engine cho code-mode trong Pydantic AI.
Có gì mới
Hack Monty là cách Pydantic nói: "Chúng tôi nghĩ Monty an toàn. Chứng minh ngược lại đi." Server chấp nhận bất kỳ Python source nào, parse và chạy qua Monty. Mỗi lần code trong sandbox cần ra ngoài (gọi function host, tra cứu tên, future...), Monty tạm dừng và trả về một JSON snapshot. Các lời gọi liên quan OS như datetime.now, date.today, os.environ, os.getenv được server resolve với môi trường giả nên không bao giờ tới client — đó cũng là lớp phòng thủ chính.
Toàn bộ request đi vào /run/ và /run/{snapshot_id}/ được log công khai qua Pydantic Logfire — bất kỳ ai cũng có thể join project để xem mọi header, IP, User-Agent, và code đã được chạy. Honeypot đúng nghĩa, không phải bug bounty kín.
Vì sao đáng chú ý
Chạy code do LLM sinh ra một cách an toàn là bài toán đang nóng nhất trong agent tooling. Docker cold-start ~195ms và có container escape. Pyodide (WASM) mất ~2.8 giây để khởi động và không đủ bảo mật cho server-side. Sandboxing service như E2B, Modal, Daytona tính phí theo execution và cần network round-trip ~1 giây. Monty tiếp cận ngược lại: thay vì khóa dần một environment đầy đủ, nó bắt đầu từ zero và chỉ cấp quyền qua external function mà developer tự viết.
Việc treo $5,000 công khai — kèm rule rõ ràng về những gì tính và không tính — là một tín hiệu rất mạnh cho cộng đồng security: Pydantic đủ tự tin với design, và sẵn sàng chi tiền để tìm lỗ hổng trước khi Monty đi vào Pydantic AI production.
Technical facts
- Ngôn ngữ: Rust. Bind sang Python qua PyO3, sang JS/TS qua npm
@pydantic/monty. - Kiến trúc: bytecode VM viết từ zero, dùng parser của Ruff để chuyển Python source thành bytecode format riêng. Không phải CPython-with-restrictions, cũng không phải Python-to-WASM.
- Startup: dưới 1 microsecond từ code tới kết quả. Benchmark cụ thể: 4.5μs không type-check, 4.8ms có type-check.
- Package size: ~4.5MB tải về; chỉ tốn thêm ~5MB RAM khi embed vào CPython.
- Snapshot state: vài KB single-digit — so với CPython (không serialize được) và micro-VM (gigabytes).
- Runtime performance: 5× nhanh hơn đến 5× chậm hơn CPython tùy workload.
- Version hiện tại: v0.0.16 (release 2026-04-19). 6.9k stars trên GitHub, license MIT.
- Kèm sẵn:
tytype-checker trong cùng binary; resource limits cho memory, allocations, stack depth, execution time.
Monty vs các sandbox khác
| Tech | Start latency | Security | Snapshot |
|---|---|---|---|
| Monty | 0.004–0.06 ms | strict | easy (KB) |
| Docker | 195 ms | good (có container escape) | intermediate |
| Pyodide (WASM) | 2800 ms | poor (server-side) | hard |
| Sandbox services (E2B/Modal/Daytona) | ~1033 ms | strict (paid, external dep) | intermediate |
YOLO exec() | 0.1–30 ms | non-existent | hard |
Trade-off của Monty: language completeness bị hy sinh — chưa support class, match statement, generator, context manager, và không bao giờ support thư viện third-party. Đổi lại: microsecond startup, KB snapshot, zero cloud dependency, chạy được ở bất kỳ nơi nào Rust compile được (edge, embedded, trong xe, trên tàu vũ trụ — ví dụ thật từ Pydantic).
Use cases — Code Mode cho LLM agent
Monty là engine mà Pydantic AI sẽ dùng cho Code Mode. Trong tool-calling truyền thống, mỗi lần LLM cần gọi function là một round-trip mới: kết quả đầy đủ được đẩy về context window, model đọc, quyết định bước tiếp theo. Context phồng lên, token phí cao, parallel gần như không có.
Với Code Mode, LLM viết một Python script duy nhất gọi các tool như function thường, dùng loop / conditional / async parallel / data transform, rồi chỉ trả về output cuối cần cho bước tiếp. Cloudflare đã đặt tên "CodeMode", Anthropic gọi là "Programmatic Tool Calling", Hugging Face có Smol Agents. Giờ Pydantic chuẩn hóa engine.
Limitations & pricing
Monty vẫn là experimental theo README — chưa production-ready. Không hỗ trợ:
- Class definitions (đang làm)
- Match statement, context manager (đang làm)
- Generator
- Phần lớn stdlib (hiện chỉ có
sys,os,typing,asyncio,pathlib;re,datetime,json,dataclassescoming soon) - Thư viện third-party — explicit non-goal
Bounty có caveat quan trọng: chỉ trả tiền cho người ở quốc gia mà GitHub Sponsors hỗ trợ và bank Mercury chuyển được. Không trả cho: crash / panic / stack overflow / infinite memory, CPython compat bugs, DoS, hay hack platform hosting (Render). Submit PR cố ý nhét vuln sẽ bị block và report — đây là hard rule.
What's next
Code Mode integration trong Pydantic AI đang ở PR #4153. Vercel đã thể hiện quan tâm — bashkit của họ hiện đã support Monty, và đội JS/TS của Vercel sẽ adopt khi JavaScript API của Monty hoàn thiện. Roadmap gần: class, match, stdlib shim cho requests / polars / duckdb / playwright.
Còn cái $5,000? Trang bounty sẽ update ngay khi có người thắng. Đặt cược đây là thử thách kinh điển cho red-team LLM community trong vài tuần tới.
Nguồn: hackmonty.com, pydantic/monty, pydantic.dev, simonwillison.net.
