<h1 align="center">
<a href="https://prompts.chat">
Promptfoo takes security seriously. We appreciate responsible disclosure and will work with you to address valid issues.
Loading actions...
<a href="https://prompts.chat">
TypeScript and ESLint rules that MUST be followed when creating, modifying, or reviewing any file under apps/frontend/, including .ts, .tsx, .js, and .jsx files. Also apply when discussing frontend linting, type safety, or ESLint configuration.
risks
Promptfoo takes security seriously. We appreciate responsible disclosure and will work with you to address valid issues.
Promptfoo is a developer tool that runs in your environment with your user permissions. It is designed to be permissive by default.
Some features intentionally execute user-provided code (custom assertions, providers, transforms, plugins). This code execution is not sandboxed and should be treated the same way you would treat running a Node.js script locally.
Important: Treat Promptfoo configuration files and any referenced scripts as trusted code. Do not run Promptfoo against untrusted configs, prompt packs, or pull requests without isolation.
The local web server (promptfoo view) is a single-user development tool intended for use on your local machine. The web API executes evaluations with the same privileges as the CLI — inputs to the API (including provider configurations, transforms, and assertions) are treated as trusted code, equivalent to a local config file. The server is not designed to be exposed to untrusted networks or users.
The server includes CSRF protection that uses browser-provided Sec-Fetch-Site and Origin headers to reject cross-site mutating requests from untrusted origins (e.g., a malicious website attempting to call the local API). This mitigates cross-origin attacks from modern browsers but is not a complete defense in all deployment configurations — non-browser clients and requests without browser headers are allowed through to avoid breaking curl, scripts, and SDKs. Known localhost aliases (localhost, 127.0.0.1, [::1], local.promptfoo.app) are treated as equivalent origins.
Trusted inputs (treated as code):
promptfooconfig.yaml, etc.)Untrusted inputs (must remain data-only):
A vulnerability exists when untrusted inputs can trigger code execution, file access, or network access without explicit configuration.
If you run Promptfoo in higher-risk contexts (CI, shared machines, third-party configs):
PROMPTFOO_CSRF_ALLOWED_ORIGINS to a comma-separated list of trusted origins| Version | Supported |
|---|---|
| Latest published release | ✅ |
main branch | ✅ (best effort) |
| Older releases | ❌ |
Do not open a public GitHub issue for security reports.
Report privately via:
We will acknowledge your report within 1 business day.
For safe harbor provisions and full process details, see our Responsible Disclosure Policy.
In scope:
Out of scope:
Examples of out-of-scope reports:
process.env and posts it to a webhook" → Expected behavior; custom code runs with your permissionsIf unsure whether something is in scope, report it anyway.
Thank you for helping keep Promptfoo and its users safe.