Security Policy
Supported Versions
Section titled “Supported Versions”GraphForge is pre-v1.0. The API is still maturing, and only the latest release receives security updates. If you discover a vulnerability, please update to the latest version first.
| Version | Supported |
|---|---|
| Latest (0.3.x) | :white_check_mark: |
| Older releases | :x: |
We will begin supporting multiple versions once a stable v1.0 API is reached.
Reporting a Vulnerability
Section titled “Reporting a Vulnerability”We take the security of GraphForge seriously. If you discover a security vulnerability, please follow these steps:
1. Do Not Open a Public Issue
Section titled “1. Do Not Open a Public Issue”Please do not report security vulnerabilities through public GitHub issues.
2. Report Privately
Section titled “2. Report Privately”Use GitHub’s private vulnerability reporting:
- Go to the Security tab
- Click “Report a vulnerability”
- Fill out the form with details
3. Include These Details
Section titled “3. Include These Details”Please include as much information as possible:
- Type of vulnerability (e.g., SQL injection, XSS, privilege escalation)
- Full paths of affected source files
- Location of affected code (tag/branch/commit or direct URL)
- Step-by-step instructions to reproduce the issue
- Proof-of-concept or exploit code (if possible)
- Impact of the vulnerability
- Suggested fix (if you have one)
4. What to Expect
Section titled “4. What to Expect”- Acknowledgment: We’ll acknowledge your report within 48 hours
- Assessment: We’ll assess the vulnerability and determine severity
- Timeline: We’ll provide an estimated timeline for a fix
- Updates: We’ll keep you informed of progress
- Credit: We’ll credit you in the security advisory (unless you prefer to remain anonymous)
Security Update Process
Section titled “Security Update Process”- Vulnerability confirmed: We verify the issue and assess severity
- Fix developed: A patch is developed and tested
- Advisory drafted: Security advisory prepared (GitHub Security Advisories)
- Release: Patched version released with security notes
- Disclosure: Public disclosure after users have time to update (typically 7 days)
Security Best Practices for Users
Section titled “Security Best Practices for Users”When using GraphForge:
Input Validation
Section titled “Input Validation”Always validate and sanitize user input before passing to Cypher queries:
from graphforge import GraphForge
db = GraphForge()
# ❌ DON'T: Direct user input in queries (injection risk)user_input = request.form['name']db.execute(f"MATCH (n:Person {{name: '{user_input}'}}) RETURN n")
# ✅ DO: Use parameterized queries or validate inputdb.execute("MATCH (n:Person) WHERE n.name = $name RETURN n", {"name": user_input})File Permissions
Section titled “File Permissions”Protect your database files:
# Set restrictive permissions on database fileschmod 600 mydata.dbAtomic Writes
Section titled “Atomic Writes”Every execute() write publishes atomically. When graph and knowledge mutations
must share one committed generation, validate and submit one
publish_composite_transaction() request, or stage supported mutation families
through begin_transaction() / commit() / rollback() on a
GraphTransaction handle. Administrative families classified as rejected cannot
join an explicit transaction.
Dependency Security
Section titled “Dependency Security”Keep dependencies updated:
# Check for vulnerabilitiespip install safetysafety check
# Update dependenciesuv sync --upgradeKnown Security Considerations
Section titled “Known Security Considerations”1. SQLite Backend
Section titled “1. SQLite Backend”GraphForge uses SQLite for persistence:
- File-based: Database files should have appropriate permissions
- No network security: SQLite doesn’t have built-in network security
- Single-user: Not designed for concurrent multi-user access
2. Query Execution
Section titled “2. Query Execution”- No query timeout: Long-running queries can cause DoS
- No resource limits: No built-in limits on memory/CPU usage
- No access control: No user authentication/authorization system
3. Serialization
Section titled “3. Serialization”- MessagePack: Uses msgpack for serialization (ensure trusted data only)
Security-Related Configuration
Section titled “Security-Related Configuration”Bandit (Security Linting)
Section titled “Bandit (Security Linting)”Security scanning is configured in CI:
# Run security checks locallybandit -c pyproject.toml -r crates/graphforge-bindings-py/pythonDependency Scanning
Section titled “Dependency Scanning”Automated dependency updates via Dependabot:
# Manual security auditpip install safetysafety checkDisclosure Policy
Section titled “Disclosure Policy”- Coordinated disclosure: We follow responsible disclosure practices
- Public disclosure timeline: 90 days from initial report or when patch is released
- CVE assignment: We’ll request CVEs for significant vulnerabilities
- Security advisories: Published on GitHub Security Advisories
Attribution
Section titled “Attribution”We believe in recognizing security researchers who help improve GraphForge. With your permission, we’ll:
- Credit you in security advisories
- Mention you in release notes
Additional Resources
Section titled “Additional Resources”Last Updated: 2026-05-06
Thank you for helping keep GraphForge secure!