claude-flow-novice
Version:
Claude Flow Novice - Advanced orchestration platform for multi-agent AI workflows with CFN Loop architecture Includes Local RuVector Accelerator and all CFN skills for complete functionality.
290 lines (239 loc) • 14.8 kB
Plain Text
================================================================================
RUVECTOR - ISOLATION VULNERABILITY MATRIX
================================================================================
Query Method Status Risk WHERE Clause Parameter
════════════════════════════════════════════════════════════════════════════════
QueryV2::search() VULNERABLE HIGH NONE NO project
QueryV2::search_similar_entities() VULNERABLE HIGH NONE NO project
StoreV2::find_entities_by_name() VULNERABLE HIGH NONE NO project
StoreV2::find_entities_by_kind() VULNERABLE HIGH NONE NO project
StoreV2::find_entities_in_file() RISKY MEDIUM YES (path) NO validation
StoreV2::search_entities() VULNERABLE HIGH NONE NO project
StoreV2::find_entities_using_type() VULNERABLE HIGH NONE NO project
StoreV2::find_references_to_entity()VULNERABLE HIGH NONE NO project
StoreV2::find_references_from_entity()VULNERABLE HIGH NONE NO project
QueryCommand::execute() RISKY MEDIUM OPTIONAL CLIENT-SIDE
VULNERABILITY BREAKDOWN
═════════════════════════════════════════════════════════════════════════════════
UNFILTERED (8 METHODS) - Return results from ALL projects:
──────────────────────────────────────────────────────────
├─ QueryV2::search()
│ └─ Impact: Semantic search across all projects
│ └─ Leaks: 783,891 potential results from any project
│
├─ QueryV2::search_similar_entities()
│ └─ Impact: Maps similar code across projects
│ └─ Leaks: Architecture, patterns, variable names
│
├─ StoreV2::find_entities_by_name()
│ └─ Impact: Gets all matching function/class names
│ └─ Leaks: Function signatures from all projects
│
├─ StoreV2::find_entities_by_kind()
│ └─ Impact: Enumerates all classes/functions/structs
│ └─ Leaks: Complete type hierarchy from all projects
│
├─ StoreV2::search_entities()
│ └─ Impact: Fulltext search across all projects
│ └─ Leaks: Code matching any term
│
├─ StoreV2::find_entities_using_type()
│ └─ Impact: Gets all usages of a type globally
│ └─ Leaks: Type dependencies across projects
│
├─ StoreV2::find_references_to_entity()
│ └─ Impact: Maps ALL references to an entity globally
│ └─ Leaks: Call chains across projects
│
└─ StoreV2::find_references_from_entity()
└─ Impact: Maps ALL calls from an entity globally
└─ Leaks: API consumers from all projects
RISKY (2 METHODS) - Insufficient filtering:
────────────────────────────────────────────
├─ StoreV2::find_entities_in_file()
│ ├─ Has WHERE clause: YES (file_path = ?)
│ ├─ Issue: No path validation
│ │ - Directory traversal: ../../project-a/...
│ │ - Symlink attacks: link to other project
│ │ - No canonicalization
│ └─ Risk: Can query ANY file path
│
└─ QueryCommand::execute()
├─ Has filtering: YES (Optional)
├─ Issue: Client-side only
│ - If file_filter not specified: NO filtering
│ - Substring match: "project-a" matches "NOT-project-a"
│ - Happens after DB fetch (wasteful)
│ - Easy to bypass
└─ Risk: Query filter optional and inadequate
ATTACK PATHS
═════════════════════════════════════════════════════════════════════════════════
ATTACK 1: Direct Semantic Search
────────────────────────────────
Attacker: Project B developer
Method: query.search("authentication", 10, 0.5)
Result: Returns auth code from Project A
Status: EXPLOITABLE NOW
Effort: Zero (basic API knowledge)
ATTACK 2: Entity Enumeration by Type
─────────────────────────────────────
Attacker: Project B developer
Method: for kind in EntityKind { find_entities_by_kind(kind, 500) }
Result: Maps all 500 classes from Project A
Status: EXPLOITABLE NOW
Effort: Simple loop (20 lines of code)
ATTACK 3: Common Function Discovery
────────────────────────────────────
Attacker: Project B developer
Method: find_entities_by_name("authenticate"), find_entities_by_name("decrypt"), etc.
Result: Extracts security functions from Project A
Status: EXPLOITABLE NOW
Effort: Guess 20 common names, get 200+ functions
ATTACK 4: Entity ID Brute Force
────────────────────────────────
Attacker: Project B developer
Method: for id in 1..1_000_000_000 { search_similar_entities(id, 10, 0.5) }
Result: Maps entire codebase structure of Project A
Status: EXPLOITABLE NOW (but slow)
Effort: Brute force script
ATTACK 5: Directory Traversal
──────────────────────────────
Attacker: Project B developer
Method: find_entities_in_file("/home/user/project-a/src/auth.rs")
Result: Direct access to any file
Status: EXPLOITABLE NOW
Effort: Guess project paths (standard naming patterns)
ATTACK 6: Batch Query Injection
────────────────────────────────
Attacker: Create batch file with cross-project queries
Method: BatchQueryCommand reads from attacker-controlled file
Result: Unfiltered results written to output file
Status: EXPLOITABLE NOW
Effort: Simple text file
IMPACT ANALYSIS
═════════════════════════════════════════════════════════════════════════════════
Data Exposed Per Attack:
Search: Up to 10-100 results per query
Find by kind: Up to 500 classes/functions per type
Find by name: Up to 100 functions per common name
Entity enumeration: UP TO 783,891 TOTAL ENTITIES
Directory traversal: Complete file contents
Frequency:
Can be automated
No detection mechanism
No rate limiting
No audit trail
Accumulation:
Single attacker can extract: 100% of Project A's code
Time required: Hours to days depending on method
Detection:
Query logs: No logging implemented
Behavioral: Search patterns same as legitimate use
Result: UNDETECTABLE
SEVERITY TIMELINE
═════════════════════════════════════════════════════════════════════════════════
Vulnerability Age: Since centralized DB implemented
Affected Projects: ALL using ~/.local/share/ruvector/index_v2.db
Entities at Risk: 783,891+
Date Discovered: 2025-12-11
Fix Complexity: Moderate (schema + 10 API updates)
Estimated Fix Time: 1-2 developer weeks
Current Status: EXPLOITABLE IN PRODUCTION
FIX COMPLEXITY ASSESSMENT
═════════════════════════════════════════════════════════════════════════════════
CRITICAL FIXES (Required for basic isolation):
┌────────────────────────────────────────┬──────────┬─────────────┐
│ Task │ Effort │ Impact │
├────────────────────────────────────────┼──────────┼─────────────┤
│ Add project_root column │ 2 hours │ HIGH │
│ Fix QueryV2::search() │ 1 hour │ CRITICAL │
│ Fix QueryV2::search_similar_entities() │ 1 hour │ CRITICAL │
│ Fix 6 StoreV2 methods │ 2 hours │ CRITICAL │
│ Add path validation │ 2 hours │ HIGH │
│ Update CLI to pass project context │ 1 hour │ HIGH │
│ Create test suite │ 3 hours │ HIGH │
├────────────────────────────────────────┼──────────┼─────────────┤
│ SUBTOTAL │10 hours │ PRODUCTION │
└────────────────────────────────────────┴──────────┴─────────────┘
HIGH PRIORITY FIXES (Important for robustness):
┌────────────────────────────────────────┬──────────┬─────────────┐
│ Task │ Effort │ Impact │
├────────────────────────────────────────┼──────────┼─────────────┤
│ Add audit logging │ 2 hours │ MEDIUM │
│ Add FK constraints (same-project refs) │ 2 hours │ MEDIUM │
│ Create composite indexes │ 1 hour │ MEDIUM │
│ Documentation updates │ 2 hours │ LOW │
├────────────────────────────────────────┼──────────┼─────────────┤
│ SUBTOTAL │ 7 hours │ HARDENING │
└────────────────────────────────────────┴──────────┴─────────────┘
TOTAL EFFORT TO SAFE STATE: 17 hours (~2 developer days)
SUCCESS CRITERIA FOR FIX
═════════════════════════════════════════════════════════════════════════════════
Test Coverage Required:
[✓] test_cross_project_search_isolation
[✓] test_cross_project_find_by_kind_isolation
[✓] test_cross_project_find_by_name_isolation
[✓] test_directory_traversal_blocked
[✓] test_symlink_detection
[✓] test_batch_query_respects_project
Pass Rate Required:
Unit tests: 95% minimum
Integration tests: 90% minimum
Security tests: 100% (zero tolerance)
Code Review:
[✓] All 10 query methods have project_root parameter
[✓] All queries have WHERE project_root = ? clause
[✓] All file path inputs validated and canonicalized
[✓] CLI passes project context to query layer
[✓] No hardcoded paths in queries
[✓] Documentation updated with isolation assumptions
DEPLOYMENT RESTRICTIONS (UNTIL FIX)
═════════════════════════════════════════════════════════════════════════════════
DO NOT USE:
✗ Production environments
✗ Multi-project setups
✗ Competitive projects
✗ Sensitive code repositories
✗ Regulated data (HIPAA, PCI-DSS, GDPR, SOX)
✗ Financial/payment systems
✗ Healthcare/medical systems
✗ Customer data
SAFE USES ONLY:
✓ Single-project development
✓ Public codebases
✓ Internal company code (with trust)
✓ Research/academic
✓ Learning purposes
ISOLATION GUARANTEE SCORECARD
═════════════════════════════════════════════════════════════════════════════════
Current After Fix
────────────────────
Database-level filtering 0% 100%
WHERE clause coverage 10% 100%
Project parameter usage 0% 100%
Path validation 0% 100%
Test isolation coverage 0% 100%
Overall Isolation Grade: F A
Risk Level: CRITICAL SAFE
DOCUMENTATION REFERENCES
═════════════════════════════════════════════════════════════════════════════════
Full Audit Report:
Location: /mnt/c/Users/masha/Documents/claude-flow-novice/docs/RUVECTOR_ISOLATION_AUDIT.md
Size: 835 lines
Details: Complete analysis with code samples, risks, and fixes
Quick Reference:
Location: /mnt/c/Users/masha/Documents/claude-flow-novice/docs/RUVECTOR_QUICK_REFERENCE.md
Size: 287 lines
Details: Summary, attack vectors, fix overview
Executive Summary:
Location: /mnt/c/Users/masha/Documents/claude-flow-novice/docs/RUVECTOR_ISOLATION_SUMMARY.txt
Size: Full breakdown of all findings
Source Code Files (Need Fixes):
- .claude/skills/cfn-local-ruvector-accelerator/src/query_v2.rs (lines 42, 136)
- .claude/skills/cfn-local-ruvector-accelerator/src/store_v2.rs (lines 143, 158, 173, 187, 235, 249, 285, 321)
- .claude/skills/cfn-local-ruvector-accelerator/src/cli/query.rs (lines 63-91)
- .claude/skills/cfn-local-ruvector-accelerator/src/schema_v2.rs (lines 214-286)
- .claude/skills/cfn-local-ruvector-accelerator/src/main.rs (lines 34-35)
Database Location:
~/.local/share/ruvector/index_v2.db
================================================================================