ChienChung's picture
Upload 11 files
c73ca9d verified
#!/usr/bin/env python3
import sys
import os
from cve_validator import validate_cve_id
from api_client import fetch_cve_simple
from storage import save_cve_analysis, load_cve_analysis
def analyze_cve(cve_id, use_cache=True):
"""Analyze CVE with caching support"""
# Check if already analyzed
if use_cache:
cached = load_cve_analysis(cve_id)
if cached:
print(f"Loading from cache: {cve_id}")
return cached
print(f"Analyzing {cve_id}...")
# Fetch CVE data
cve_data = fetch_cve_simple(cve_id)
if not cve_data:
print(f"Unable to fetch data for {cve_id}")
return None
# Display basic information
cve = cve_data['cve']
print(f" {cve['id']}")
print(f"Published: {cve['published']}")
print(f"Description: {cve['descriptions'][0]['value'][:200]}...")
# Get CVSS score
if 'metrics' in cve and 'cvssMetricV31' in cve['metrics']:
cvss = cve['metrics']['cvssMetricV31'][0]['cvssData']
print(f"CVSS Score: {cvss['baseScore']}")
print(f"Severity: {cvss['baseSeverity']}")
# Try to generate AI summary
ai_summary = None
if os.getenv('OPENAI_API_KEY'):
print("\n Generating AI summary...")
try:
from llm_summarizer import summarize_cve
ai_summary = summarize_cve(cve_data)
print(ai_summary)
except Exception as e:
print(f"AI summary failed: {e}")
else:
print("\n OPENAI_API_KEY not set, skipping AI summary")
# Save analysis results
analysis = {
'cve_id': cve_id,
'cve_data': cve_data,
'ai_summary': ai_summary
}
save_cve_analysis(cve_id, cve_data, ai_summary)
# Show similar CVEs if available
try:
from vector_storage import vector_storage
similar_cves = vector_storage.find_similar_cves(cve_id, 3)
if similar_cves:
print(f"\n Similar CVEs:")
for similar in similar_cves:
print(f" • {similar['cve_id']} (similarity: {similar['similarity']}) - {similar['description'][:50]}...")
except:
pass
return analysis
def main():
if len(sys.argv) < 2:
print("Usage:")
print("python main.py CVE-YYYY-NNNN # Analyze CVE")
print("python main.py CVE-YYYY-NNNN --force # Force re-analysis")
sys.exit(1)
cve_id = sys.argv[1]
force = '--force' in sys.argv
# Validate CVE ID
if not validate_cve_id(cve_id):
print(f"Invalid CVE ID: {cve_id}")
sys.exit(1)
# Analyze CVE
result = analyze_cve(cve_id, use_cache=not force)
if result:
print(f"\n Analysis completed: {cve_id}")
else:
print(f"\n Analysis failed: {cve_id}")
sys.exit(1)
if __name__ == "__main__":
main()