Result of a single exploit check or attempt.
| 24 | |
| 25 | logger = get_logger("exploit_engine.runner") |
| 26 | |
| 27 | |
| 28 | @dataclass |
| 29 | class ExploitResult: |
| 30 | """Result of a single exploit check or attempt.""" |
| 31 | cve_id: str |
| 32 | target: str |
| 33 | port: int |
| 34 | module_path: str |
| 35 | status: str # CONFIRMED | NOT_EXPLOITABLE | UNKNOWN | NO_MODULE | BLOCKED | ERROR |
| 36 | check_output: str = "" |
| 37 | session_opened: bool = False # True only if live exploitation AND shell obtained |
| 38 | error: str = "" |
| 39 | timestamp: str = field(default_factory=lambda: datetime.now(timezone.utc).isoformat()) |
| 40 | attack_tags: list[dict] = field(default_factory=list) |
| 41 | |
| 42 | @property |
| 43 | def confirmed(self) -> bool: |
| 44 | return self.status == "CONFIRMED" |
no outgoing calls
no test coverage detected