github Python re-analysis due

0x3e4/hecate

github

Hecate Cyber Defense - AI-powered vulnerability analysis

maintainer
0x3e4
license
MIT
first seen
2026-06-05
last seen
2026-09-04
releases · 30d
1
short id

Drift inferred · capture-to-capture

  1. HIGH code analysis flagged dynamic code execution in 0x3e4/hecate
  2. HIGH code analysis flagged dynamic code execution in 0x3e4/hecate
  3. HIGH code analysis flagged dynamic code execution in 0x3e4/hecate
capabilities 40 tools
transport streamable-http counts 40 tools · 0 res · 0 prompts permission surface via code analysis

tools

  • compare_scans
  • create_inventory_item
  • delete_inventory_item
  • find_findings_by_cve
  • get_capec
  • get_cwe
  • get_inventory_item
  • get_layer_analysis
  • get_sbom_components
  • get_sbom_facets
  • get_sca_scan
  • get_scan_findings
  • get_scan_findings_by_scan
  • get_scan_sbom
  • get_security_alerts
  • get_target_scan_history
  • get_vulnerability
  • get_vulnerability_stats
  • list_inventory_items
  • list_scan_targets
  • list_scans
  • list_target_groups
  • prepare_attack_path_analysis
  • prepare_scan_ai_analysis
  • prepare_scan_attack_chain_analysis
  • prepare_vulnerabilities_ai_batch_analysis
  • prepare_vulnerability_ai_analysis
  • refine_attack_path_analysis
  • save_attack_path_analysis
  • save_scan_ai_analysis
  • save_scan_attack_chain_analysis
  • save_vulnerabilities_ai_batch_analysis
  • save_vulnerability_ai_analysis
  • search_cpe
  • search_products
  • search_vendors
  • search_vulnerabilities
  • trigger_scan
  • trigger_sync
  • update_inventory_item
code evidence v1.5.1 · github-tarball
evidence-backed findings quoted directly from the published source artifact — not inferred

code files: 292

filesystem 18

  • fs 0x3e4-hecate-440e335/backend/app/api/v1/version.py :9 from pathlib import Path
  • fs 0x3e4-hecate-440e335/backend/app/services/ingestion/osv_client.py :135 with zf.open(name) as f:
  • fs 0x3e4-hecate-440e335/backend/app/services/scan_service.py :2379 of change. Only fail-open (return True) when we have neither a
  • fs 0x3e4-hecate-440e335/scanner/app/hecate_analyzer.py :9 from pathlib import Path
  • fs 0x3e4-hecate-440e335/scanner/app/main.py :6 import shutil
  • fs 0x3e4-hecate-440e335/scanner/app/malware_detector/cicd_analysis.py :12 from pathlib import Path
  • fs 0x3e4-hecate-440e335/scanner/app/malware_detector/hash_matching.py :7 from pathlib import Path
  • fs 0x3e4-hecate-440e335/scanner/app/malware_detector/install_hooks.py :7 from pathlib import Path
  • fs 0x3e4-hecate-440e335/scanner/app/malware_detector/persistence.py :14 from pathlib import Path
  • fs 0x3e4-hecate-440e335/scanner/app/malware_detector/pth_files.py :13 from pathlib import Path
  • fs 0x3e4-hecate-440e335/scanner/app/malware_detector/sandbox_evasion.py :12 from pathlib import Path
  • fs 0x3e4-hecate-440e335/scanner/app/malware_detector/suspicious_patterns.py :6 from pathlib import Path
  • fs 0x3e4-hecate-440e335/scanner/app/malware_detector/typosquatting.py :16 from pathlib import Path
  • fs 0x3e4-hecate-440e335/scanner/app/malware_detector/unicode_obfuscation.py :12 from pathlib import Path
  • fs 0x3e4-hecate-440e335/scanner/app/malware_detector/utils.py :7 from pathlib import Path
  • fs 0x3e4-hecate-440e335/scanner/app/malware_detector/worm_detection.py :13 from pathlib import Path
  • fs 0x3e4-hecate-440e335/scanner/app/scanners.py :11 import shutil
  • fs (weak) 0x3e4-hecate-440e335/scanner/tests/test_source_checkout.py :168 import shutil

network 29

  • net 0x3e4-hecate-440e335/backend/app/api/v1/status.py :4 import httpx
  • net 0x3e4-hecate-440e335/backend/app/api/v1/version.py :12 import httpx
  • net 0x3e4-hecate-440e335/backend/app/mcp/oauth.py :28 from urllib.parse import urlencode
  • net 0x3e4-hecate-440e335/backend/app/mcp/oauth_providers.py :12 from urllib.parse import urlencode
  • net 0x3e4-hecate-440e335/backend/app/services/ai_service.py :9 import httpx
  • net 0x3e4-hecate-440e335/backend/app/services/enrichment/endoflife_client.py :4 from urllib.parse import quote
  • net 0x3e4-hecate-440e335/backend/app/services/http/retry.py :7 import httpx
  • net 0x3e4-hecate-440e335/backend/app/services/http/ssl.py :7 """Return the ``verify`` value for :class:`httpx.AsyncClient`.
  • net 0x3e4-hecate-440e335/backend/app/services/ingestion/capec_client.py :6 import httpx
  • net 0x3e4-hecate-440e335/backend/app/services/ingestion/circl_client.py :8 import httpx
  • net 0x3e4-hecate-440e335/backend/app/services/ingestion/cisa_client.py :5 import httpx
  • net 0x3e4-hecate-440e335/backend/app/services/ingestion/cpe_client.py :9 import httpx
  • net 0x3e4-hecate-440e335/backend/app/services/ingestion/cwe_client.py :5 import httpx
  • net 0x3e4-hecate-440e335/backend/app/services/ingestion/deps_dev_client.py :17 from urllib.parse import quote
  • net 0x3e4-hecate-440e335/backend/app/services/ingestion/euvd_client.py :8 import httpx
  • net 0x3e4-hecate-440e335/backend/app/services/ingestion/ghsa_client.py :6 from urllib.parse import parse_qs, urlparse
  • net 0x3e4-hecate-440e335/backend/app/services/ingestion/nvd_client.py :7 import httpx
  • net 0x3e4-hecate-440e335/backend/app/services/ingestion/osv_client.py :11 import httpx
  • net 0x3e4-hecate-440e335/backend/app/services/ingestion/osv_pipeline.py :75 # one httpx.AsyncClient + one rate-limiter across all records.
  • net 0x3e4-hecate-440e335/backend/app/services/notification_service.py :8 import httpx
  • net 0x3e4-hecate-440e335/backend/app/services/saved_search_service.py :5 from urllib.parse import parse_qsl, urlencode
  • net 0x3e4-hecate-440e335/backend/app/services/scan_service.py :9 from urllib.parse import unquote, urlparse
  • net 0x3e4-hecate-440e335/backend/app/services/scan_target_validation.py :18 from urllib.parse import urlparse
  • net 0x3e4-hecate-440e335/backend/app/services/stats_service.py :6 from urllib.parse import urlparse
  • net 0x3e4-hecate-440e335/scanner/app/malware_detector/typosquatting.py :15 import urllib.request
  • net 0x3e4-hecate-440e335/scanner/app/provenance.py :25 from urllib.parse import quote
  • net 0x3e4-hecate-440e335/scanner/app/scanners.py :15 import urllib.request
  • net 0x3e4-hecate-440e335/scanner/app/target_validation.py :24 from urllib.parse import urlparse
  • net (weak) 0x3e4-hecate-440e335/scanner/tests/test_scanner_fixes.py :107 """Minimal async httpx.AsyncClient stand-in that records GET calls."""

database 18

  • db 0x3e4-hecate-440e335/backend/app/repositories/app_settings_repository.py :7 from pymongo import ReturnDocument
  • db 0x3e4-hecate-440e335/backend/app/repositories/asset_repository.py :7 from pymongo import ASCENDING, UpdateOne
  • db 0x3e4-hecate-440e335/backend/app/repositories/capec_repository.py :7 from pymongo.errors import PyMongoError
  • db 0x3e4-hecate-440e335/backend/app/repositories/cpe_repository.py :8 from pymongo import ASCENDING, DESCENDING
  • db 0x3e4-hecate-440e335/backend/app/repositories/cwe_repository.py :7 from pymongo.errors import PyMongoError
  • db 0x3e4-hecate-440e335/backend/app/repositories/inventory_repository.py :7 from pymongo import ASCENDING
  • db 0x3e4-hecate-440e335/backend/app/repositories/kev_repository.py :8 from pymongo.errors import PyMongoError
  • db 0x3e4-hecate-440e335/backend/app/repositories/license_policy_repository.py :7 from pymongo import ASCENDING
  • db 0x3e4-hecate-440e335/backend/app/repositories/malware_intel_repository.py :8 from pymongo import ASCENDING
  • db 0x3e4-hecate-440e335/backend/app/repositories/notification_rule_repository.py :7 from pymongo import ASCENDING, ReturnDocument
  • db 0x3e4-hecate-440e335/backend/app/repositories/saved_search_repository.py :9 from pymongo import ASCENDING, ReturnDocument
  • db 0x3e4-hecate-440e335/backend/app/repositories/scan_finding_repository.py :9 from pymongo.errors import PyMongoError
  • db 0x3e4-hecate-440e335/backend/app/repositories/scan_layer_repository.py :7 from pymongo.errors import PyMongoError
  • db 0x3e4-hecate-440e335/backend/app/repositories/scan_repository.py :9 from pymongo.errors import PyMongoError
  • db 0x3e4-hecate-440e335/backend/app/repositories/scan_sbom_repository.py :7 from pymongo.errors import PyMongoError
  • db 0x3e4-hecate-440e335/backend/app/repositories/scan_target_repository.py :8 from pymongo.errors import PyMongoError
  • db 0x3e4-hecate-440e335/backend/app/repositories/vulnerability_repository.py :12 from pymongo import ASCENDING, DESCENDING
  • db 0x3e4-hecate-440e335/backend/app/services/cpe_service.py :5 from pymongo import TEXT

tool registrations 40

  • search_vendors 0x3e4-hecate-440e335/backend/app/mcp/tools/assets.py :20
  • search_products 0x3e4-hecate-440e335/backend/app/mcp/tools/assets.py :65
  • search_cpe 0x3e4-hecate-440e335/backend/app/mcp/tools/cpe.py :20
  • get_cwe 0x3e4-hecate-440e335/backend/app/mcp/tools/cwe_capec.py :22
  • get_capec 0x3e4-hecate-440e335/backend/app/mcp/tools/cwe_capec.py :73
  • list_inventory_items 0x3e4-hecate-440e335/backend/app/mcp/tools/inventory.py :35
  • get_inventory_item 0x3e4-hecate-440e335/backend/app/mcp/tools/inventory.py :102
  • create_inventory_item 0x3e4-hecate-440e335/backend/app/mcp/tools/inventory.py :140
  • update_inventory_item 0x3e4-hecate-440e335/backend/app/mcp/tools/inventory.py :217
  • delete_inventory_item 0x3e4-hecate-440e335/backend/app/mcp/tools/inventory.py :306
  • get_scan_findings 0x3e4-hecate-440e335/backend/app/mcp/tools/scans.py :21
  • trigger_scan 0x3e4-hecate-440e335/backend/app/mcp/tools/scans.py :75
  • trigger_sync 0x3e4-hecate-440e335/backend/app/mcp/tools/scans.py :156
  • get_sca_scan 0x3e4-hecate-440e335/backend/app/mcp/tools/scans.py :227
  • prepare_scan_ai_analysis 0x3e4-hecate-440e335/backend/app/mcp/tools/scans.py :342
  • save_scan_ai_analysis 0x3e4-hecate-440e335/backend/app/mcp/tools/scans.py :413
  • get_scan_findings_by_scan 0x3e4-hecate-440e335/backend/app/mcp/tools/scans.py :497
  • get_security_alerts 0x3e4-hecate-440e335/backend/app/mcp/tools/scans.py :568
  • get_scan_sbom 0x3e4-hecate-440e335/backend/app/mcp/tools/scans.py :629
  • get_sbom_components 0x3e4-hecate-440e335/backend/app/mcp/tools/scans.py :681
  • get_sbom_facets 0x3e4-hecate-440e335/backend/app/mcp/tools/scans.py :737
  • get_target_scan_history 0x3e4-hecate-440e335/backend/app/mcp/tools/scans.py :792
  • compare_scans 0x3e4-hecate-440e335/backend/app/mcp/tools/scans.py :851
  • get_layer_analysis 0x3e4-hecate-440e335/backend/app/mcp/tools/scans.py :901
  • list_scan_targets 0x3e4-hecate-440e335/backend/app/mcp/tools/scans.py :945
  • list_target_groups 0x3e4-hecate-440e335/backend/app/mcp/tools/scans.py :996
  • list_scans 0x3e4-hecate-440e335/backend/app/mcp/tools/scans.py :1040
  • find_findings_by_cve 0x3e4-hecate-440e335/backend/app/mcp/tools/scans.py :1089
  • prepare_scan_attack_chain_analysis 0x3e4-hecate-440e335/backend/app/mcp/tools/scans.py :1147
  • save_scan_attack_chain_analysis 0x3e4-hecate-440e335/backend/app/mcp/tools/scans.py :1232
  • get_vulnerability_stats 0x3e4-hecate-440e335/backend/app/mcp/tools/stats.py :18
  • search_vulnerabilities 0x3e4-hecate-440e335/backend/app/mcp/tools/vulnerabilities.py :25
  • get_vulnerability 0x3e4-hecate-440e335/backend/app/mcp/tools/vulnerabilities.py :100
  • prepare_vulnerability_ai_analysis 0x3e4-hecate-440e335/backend/app/mcp/tools/vulnerabilities.py :149
  • save_vulnerability_ai_analysis 0x3e4-hecate-440e335/backend/app/mcp/tools/vulnerabilities.py :229
  • prepare_vulnerabilities_ai_batch_analysis 0x3e4-hecate-440e335/backend/app/mcp/tools/vulnerabilities.py :309
  • save_vulnerabilities_ai_batch_analysis 0x3e4-hecate-440e335/backend/app/mcp/tools/vulnerabilities.py :404
  • prepare_attack_path_analysis 0x3e4-hecate-440e335/backend/app/mcp/tools/vulnerabilities.py :505
  • save_attack_path_analysis 0x3e4-hecate-440e335/backend/app/mcp/tools/vulnerabilities.py :595
  • refine_attack_path_analysis 0x3e4-hecate-440e335/backend/app/mcp/tools/vulnerabilities.py :675

declared dependencies 18

  • mcp@{version =
  • fastapi@0.139.2
  • uvicorn@0.40.0
  • pydantic@^2.12
  • pydantic-settings@^2.11.0
  • motor@^3.7
  • opensearch-py@^3.0.0
  • httpx@^0.28.1
  • structlog@^25.5.0
  • python-dateutil@^2.9.0
  • apscheduler@^3.11.1
  • google-genai@^1.49.0
  • starlette@1.3.1
  • opensearch-protobufs@1.2.0
  • pytest@9.0.3
  • pytest-asyncio@^1.2.0
  • ruff@0.15.0
  • pytest-cov@^7.0.0