Senpy is in active development (currently 0.7.x). Security fixes are applied to the latest released minor version only.
| Version | Supported |
|---|---|
| 0.7.x | ✅ Active support |
| 0.6.x | |
| < 0.6 | ❌ Not supported |
Please DO NOT open public GitHub issues for security vulnerabilities.
Instead, report privately via one of these channels:
- Go to https://github.com/Xilleet/senpy/security/advisories/new
- Fill in the form:
- Title: short summary (e.g. "Path traversal in unrpyc decompiler")
- Description: what the vulnerability is, what component is affected
- Steps to reproduce: minimal PoC (code snippet, .rpy file, command line)
- Impact: what an attacker can achieve
- Severity: your assessment (low / medium / high / critical)
- Submit. The maintainer will be notified privately.
| Step | Target |
|---|---|
| Acknowledgment of receipt | 48 hours |
| Initial assessment (severity + scope) | 7 days |
| Fix or mitigation | 30 days (severity-dependent) |
| Public disclosure | After fix released, or 90 days from report (whichever is earlier) |
The maintainer is one person; please be patient. You will be credited in the advisory unless you request otherwise.
- The
senpy/Python package (CLI, LSP server, analyzer, formatter, plugins system). - The
senpy-vscode/VS Code extension. - The vendored
senpy/vendor/unrpyc/— but please also report upstream to https://github.com/CensoredUsername/unrpyc if the issue exists there. - The bundled
senpy.exePyInstaller binary distributed via GitHub Releases.
- Vulnerabilities in Ren'Py itself — report to https://github.com/renpy/renpy.
- Vulnerabilities in third-party plugins installed via
pip— report to the plugin author. Senpy's trust-on-first-use model (seeexamples/my_senpy_plugin/MY_SENPY_PLUGIN_README.md) is the primary mitigation; plugins run with full Senpy process privileges. - Social engineering, DoS via huge input files, or issues requiring physical access to the user's machine.
Senpy has several built-in defenses; please familiarize yourself before reporting:
SafeUnpicklerwith module blocklist (senpy/vendor/unrpyc/):.rpycfiles are pickle-based; Senpy's unpickler rejects dangerous modules (os,sys,subprocess,socket,shutil,pathlib,builtins,ctypes,multiprocessing,pickle,marshal) even if added to the safe-list by accident. Seetests/test_cache_security.py,tests/test_lsp_uri_security.py,tests/test_unrpyc_security.py,tests/test_vendored_unrpyc.py.UNRPYC_PINNED_SHA256(senpy/cli/unrpyc.py): downloaded unrpyc zip is verified against a pinned SHA256 hash. Prevents supply-chain attacks on the unrpyc download endpoint.- Plugin trust store (
~/.senpy/trusted_plugins.json): trust-on-first-use model. CI environments (non-TTY) auto-skip untrusted plugins (fail-safe). - HTML report CSP (
senpy/formats/html_report.py):Content-Security-Policy: default-src 'none'+ MermaidsecurityLevel: 'strict'— prevents XSS in generated reports. - LSP URI scheme validation + workspace containment (
senpy/lsp/server.py, 0.6.2):_uri_to_pathrejects non-file:URIs and (optionally) paths outside workspace root. execFileinstead ofexec(senpy-vscode/src/extension.ts, 0.6.2): VS Code extension uses array-argschild_process.execFile, preventing shell injection via workspace paths.os.walk(followlinks=False)(0.6.2): explicit symlink-loop protection in all filesystem walks.
If you write a Senpy plugin, follow these guidelines:
- Never
exec()oreval()user input. Ren'Py source files are untrusted input. - No
subprocess.run()from a plugin. If you need external tools, require them as separate dependencies and document the security model. - No network calls. Plugins should be deterministic and offline.
- No file writes outside the project directory. Use Senpy's
DiagnosticSinkAPI, not direct file I/O. - Pin your dependencies. A plugin is only as secure as its deps.
- We follow Coordinated Disclosure. The reporter and maintainer agree on a disclosure timeline before public release.
- CVE numbers can be requested via GitHub Security Advisories.
- Credit is given in the release notes and the advisory, unless the reporter requests anonymity.
- Security advisories: https://github.com/Xilleet/senpy/security/advisories
- General questions (non-sensitive): https://github.com/Xilleet/senpy/discussions