| Version | Supported |
|---|---|
| 3.x (main) | ✅ Actively maintained |
| 2.x | |
| < 2.0 | ❌ Unsupported |
Please do NOT open a public GitHub issue for security vulnerabilities.
Report security issues privately via GitHub's private vulnerability reporting:
- Go to the Security tab of this repository
- Click "Report a vulnerability"
- Fill in the template with as much detail as possible
We will acknowledge your report within 48 hours and provide a timeline for a fix.
- Affected component (API, auth, file upload, etc.)
- Description of the vulnerability and potential impact
- Steps to reproduce
- Suggested fix (if you have one)
- All write endpoints (
POST /upload-doc,DELETE /documents/{id}, query endpoints) require theX-API-Keyheader - Default demo key
demo-rag-2026— must be changed before production deployment - Set via
API_KEYenvironment variable
- Query endpoints: 30 requests/minute per IP
- Upload endpoints: 20 requests/hour per IP
- Implemented via slowapi
- Queries limited to 2000 characters
- File uploads validated by extension + PDF magic bytes
- File size limited to configurable
MAX_FILE_SIZE_MB(default 20MB) - Filenames sanitised with
os.path.basename()to prevent directory traversal
- Restricted to
ALLOWED_ORIGINSenvironment variable (no wildcard*in production) - Default:
http://localhost:5173,http://localhost:3000
- Registry writes use atomic
os.replace()to prevent corruption under concurrent access - In-memory VectorStore cache protected by
threading.Lock()
- Dependencies scanned weekly by Safety via CI
- Bandit SAST runs on every push
- CodeQL Advanced Security scans Python and JavaScript
The following are by design for the hackathon/demo context, but must be addressed before production deployment:
| Limitation | Risk | Remediation |
|---|---|---|
| Single shared API key | Medium | Migrate to JWT per-user auth |
| SQLite observability DB | Low | Migrate to PostgreSQL for multi-process safety |
| Local FAISS file storage | Medium | Migrate to cloud vector store (Pinecone, pgvector) |
| No input sanitization beyond length | Low | Add semantic content filtering |
Once a vulnerability is confirmed and fixed, we will:
- Release a patched version
- Add a note to CHANGELOG.md
- Credit the reporter in the release notes (if they consent)
We aim for a 90-day disclosure timeline from report to public disclosure.