(self)
| 90 | |
| 91 | def to_dict(self) -> dict: |
| 92 | return { |
| 93 | "target": self.target, |
| 94 | "mode": self.mode, |
| 95 | "operator": self.operator, |
| 96 | "engagement_id": self.engagement_id, |
| 97 | "session_id": self.session_id, |
| 98 | "started_at": self.started_at, |
| 99 | "completed_at": self.completed_at, |
| 100 | "risk_score": self.risk_score, |
| 101 | "risk_color": self.risk_color, |
| 102 | "summary": { |
| 103 | "hosts": self.total_hosts, |
| 104 | "services": self.total_services, |
| 105 | "cves": self.total_cves, |
| 106 | "confirmed_exploitable": self.confirmed_exploitable, |
| 107 | "already_exploited": self.already_exploited, |
| 108 | "remediations_generated": self.remediations_generated, |
| 109 | "remediations_applied": self.remediations_applied, |
| 110 | "verified_closed": self.verified_closed, |
| 111 | }, |
| 112 | "findings": [ |
| 113 | { |
| 114 | "ip": f.ip, |
| 115 | "port": f.port, |
| 116 | "service": f.service, |
| 117 | "version": f.version, |
| 118 | "cve_id": f.cve_id, |
| 119 | "cvss_score": f.cvss_score, |
| 120 | "exploit_status": f.exploit_status, |
| 121 | "attack_tags": f.attack_tags, |
| 122 | "already_exploited": f.already_exploited, |
| 123 | "hunt_evidence": f.hunt_evidence, |
| 124 | "remediation_safe": f.remediation.safe if f.remediation else None, |
| 125 | "remediation_explanation": f.remediation.explanation if f.remediation else None, |
| 126 | "harden_applied": bool(f.harden_result and f.harden_result.success), |
| 127 | "verified_closed": f.verified_closed, |
| 128 | } |
| 129 | for f in self.findings |
| 130 | ], |
| 131 | "errors": self.errors, |
| 132 | } |
| 133 | |
| 134 | |
| 135 | # ── Orchestrator ─────────────────────────────────────────────────────────────── |
| 136 |
no outgoing calls
no test coverage detected