Currently supported versions for security updates:
| Version | Support Status | EOL Date |
|---|---|---|
1.0.x (Phase 1 PoC) |
Active Development |
TBD (Month 6) |
0.1.x |
Superseded by 1.0.0 |
2026-02-21 |
In Scope: - GraphQL API injection attacks - ArangoDB query injection (AQL) - Authentication/authorization bypasses (Phase 2+) - XSS in web interface - CSRF in state-changing operations - Sensitive data exposure (interview subjects, confidential evidence) - Dependency vulnerabilities
Out of Scope (Current Phase): - DDoS attacks (no production deployment yet) - Physical security of infrastructure - Social engineering of users - Client-side attacks on user browsers (beyond standard web security)
10+ Dimensions of Security (RSR Framework):
-
Type Safety: Elixir compile-time checks, Ecto schemas, GraphQL type system
-
Memory Safety: BEAM VM memory isolation, no manual memory management
-
Input Validation: Ecto changesets, GraphQL schema validation, AQL parameterization
-
Authentication: phx.gen.auth with BCrypt password hashing, magic link login
-
Authorization: Session-based auth with CSRF protection (RBAC planned Phase 2)
-
Data Protection: EU GDPR compliance, anonymized interview subjects
-
Transport Security: HTTPS/TLS in production (Phase 2)
-
Audit Logging: All mutations logged with user attribution
-
Dependency Scanning: Automated via CI/CD (see Justfile
security-scan) -
IPFS Provenance: (Phase 2) Tamper-evident evidence storage with hash verification
This project handles sensitive investigative journalism data:
-
Anonymization: Interview subjects can be anonymized in database
-
Right to Erasure: Evidence marked as
deleted(soft delete) with audit trail -
Data Minimization: Only essential metadata collected
-
Encryption: Database-level encryption in production (ArangoDB Enterprise)
-
Data Sovereignty: EU hosting (Hetzner Cloud)
DO NOT open public GitHub issues for security vulnerabilities.
Preferred Methods (in order):
-
Email: security@evidencegraph.org (PGP key below)
-
GitHub Security Advisory: https://github.com/Hyperpolymath/bofig/security/advisories/new
-
GitLab Confidential Issue: (if hosted on GitLab)
Please provide:
-
Description: Detailed explanation of the vulnerability
-
Impact: What an attacker could do (CVSS score if calculated)
-
Reproduction: Step-by-step instructions to reproduce
-
Environment: Version, OS, configuration
-
Proposed Fix: If you have suggestions (optional)
-
Disclosure Timeline: When you plan to publish (if at all)
We commit to:
-
24 hours: Initial acknowledgment of report
-
7 days: Preliminary assessment (severity, affected versions)
-
30 days: Fix deployed or detailed remediation plan
-
90 days: Public disclosure (coordinated with reporter)
| Severity | Response Time | Example |
|---|---|---|
Critical |
24 hours |
Remote code execution, authentication bypass |
High |
7 days |
SQL/AQL injection, XSS, privilege escalation |
Medium |
30 days |
CSRF, information disclosure |
Low |
90 days |
Minor information leaks, rate limiting issues |
Current Status: No formal bug bounty (Phase 1 PoC)
Phase 2+: Considering partnership with: - HackerOne / Bugcrowd - EU-specific platforms (YesWeHack)
Acknowledgments: Security researchers will be credited in: - CHANGELOG.md - .well-known/humans.txt - Security Hall of Fame (if program established)
-
No Rate Limiting: API can be abused
-
Mitigation: Reverse proxy with rate limits (Nginx config provided)
-
Fix: Phase 2 (Phoenix rate limiting plug)
-
-
No RBAC: All authenticated users have equal access
-
Mitigation: Authentication required for all routes
-
Fix: Phase 2 (role-based access control)
-
-
Security Headers: Basic headers via Phoenix, full CSP pending
-
Mitigation: Nginx adds HSTS, X-Frame-Options in production
-
Fix: Phase 2 (comprehensive CSP policy)
-
-
Authentication: Implemented via phx.gen.auth (bcrypt, sessions, CSRF)
-
Dependency Scanning: Automated via
mix deps.auditin CI and Justfile -
Input Validation: Ecto changesets on all user input, parameterized AQL queries
We follow: - OWASP Top 10 prevention guidelines - Elixir Security Working Group recommendations - Phoenix Security Guide - ArangoDB Security Best Practices
We avoid: - String.to_existing_atom/1 on user input (atom
exhaustion) - Code.eval_string/1 on untrusted input - Storing
plaintext secrets (use environment variables) - SQL injection (we use
ArangoDB with parameterized queries)
# Dependency vulnerability scan
mix deps.audit
# Static analysis
mix credo --strict
# Code quality
mix dialyzer
# Security-focused linting
just security-scan # (see Justfile)GraphQL API Fuzzing:
# Test injection attacks
echo '{ claims(investigationId: "inv\"; DROP TABLE claims;--") { id } }' | \
http POST :4000/api/graphql query=@-AQL Injection Testing:
# Should be safe due to parameterized queries
EvidenceGraph.Claims.search_claims("'; DROP COLLECTION claims;--")Subscribe to security announcements:
-
GitHub Watch: Enable “Custom” notifications → “Security alerts”
-
RSS Feed: https://github.com/Hyperpolymath/bofig/security/advisories.atom
-
Mailing List: security-announce@evidencegraph.org (low-traffic)
Critical Dependencies: - Phoenix 1.7.x (web framework) - Absinthe 1.7.x (GraphQL) - Arangox 0.5.x (database driver) - Ecto 3.11.x (schemas/validation)
Audit Process: 1. Weekly mix deps.audit check 2. Automated GitHub
Dependabot alerts 3. Manual review of security advisories 4. Test suite
run before all updates
Hetzner Cloud (EU): - Firewall: Ports 80/443 only, no SSH from public internet - SSH: Key-based auth only, fail2ban active - Nginx: Reverse proxy with rate limiting, ModSecurity WAF - SSL: Let’s Encrypt with HSTS, TLS 1.3 only
ArangoDB Oasis: - Managed service, automatic security patches - Network isolation (VPC peering) - Encryption at rest + in transit - Daily backups with 30-day retention
-
Detection: Automated alerts, user reports, security scans
-
Containment: Isolate affected systems, revoke credentials
-
Eradication: Apply patches, remove malicious code
-
Recovery: Restore from backups, verify integrity
-
Lessons Learned: Post-mortem, update security measures
-
Internal: Maintainers via encrypted channel (Signal/Matrix)
-
Users: Security advisory published within 24 hours of fix
-
Public: CVE assignment for critical issues, blog post with details
-
EU GDPR: Article 25 (Privacy by Design), Article 32 (Security)
-
ISO 27001: Information security management (future certification)
-
OWASP ASVS: Application Security Verification Standard Level 2
-
CWE Top 25: Common Weakness Enumeration prevention
-
Lead: @Hyperpolymath (GitHub)
-
Email: security@evidencegraph.org
-
PGP Key: [To be published]
-
Response Hours: Mon-Fri 9am-5pm UTC (best-effort, volunteer project)
We thank the following security researchers:
(None yet - Hall of Fame will be added as reports are received)
-
OWASP Top 10: https://owasp.org/www-project-top-ten/
-
Elixir Security: https://elixir-lang.org/blog/2021/10/13/security-working-group/
-
Phoenix Security Guide: https://hexdocs.pm/phoenix/security.html
-
ArangoDB Security: https://www.arangodb.com/docs/stable/security.html
Last Updated: 2026-02-21 Policy Version: 1.1 (v1.0.0 Release) Next Review: 2026-03-21 (monthly during Phase 1)
This security policy is maintained in accordance with RSR (Rhodium Standard Repository) framework requirements and RFC 9116 (security.txt).