pub struct Finding {Show 15 fields
pub id: Uuid,
pub scanner: String,
pub target: String,
pub severity: Severity,
pub title: String,
pub detail: String,
pub kind: FindingKind,
pub evidence: Vec<Evidence>,
pub tags: Vec<String>,
pub timestamp: DateTime<Utc>,
pub cve_ids: Vec<String>,
pub references: Vec<String>,
pub confidence: Option<f64>,
pub exploit_hint: Option<String>,
pub matched_values: Vec<String>,
}Expand description
A single security finding produced by any Santh tool.
This is the universal output format. Whether the finding comes from
Gossan (discovery), Karyx (routing), Calyx (templates), Sear (SAST),
jsdet (JS malware), or a binding (sqlmap-rs), it produces a Finding.
Fields§
§id: UuidUnique identifier for this finding instance.
scanner: StringWhich tool/scanner produced this finding.
target: StringThe target that was scanned (URL, file path, domain, IP, etc.).
severity: SeverityFinding severity.
title: StringShort human-readable title.
detail: StringDetailed description of the finding.
kind: FindingKindClassification of the finding.
evidence: Vec<Evidence>Typed evidence proving the finding.
Free-form tags for categorization and filtering.
timestamp: DateTime<Utc>When the finding was produced.
cve_ids: Vec<String>CVE identifiers associated with this finding.
references: Vec<String>Reference URLs (advisories, documentation, etc.).
confidence: Option<f64>Statistical confidence score (0.0 to 1.0).
exploit_hint: Option<String>Ready-to-run command demonstrating exploitability.
matched_values: Vec<String>Specific values that triggered the finding (matched strings, payloads, etc.).
Implementations§
Source§impl Finding
impl Finding
Sourcepub fn builder(
scanner: impl Into<String>,
target: impl Into<String>,
severity: Severity,
) -> FindingBuilder
pub fn builder( scanner: impl Into<String>, target: impl Into<String>, severity: Severity, ) -> FindingBuilder
Start building a finding with the three required fields.
Examples found in repository?
More examples
3fn main() {
4 let finding = Finding::builder("basic-scanner", "https://example.com", Severity::High)
5 .title("Potential command injection")
6 .detail("Untrusted input reaches shell execution")
7 .tag("rce")
8 .evidence(secfinding::Evidence::http_status(500).unwrap())
9 .build()
10 .unwrap();
11
12 println!("{finding}");
13
14 let json = serde_json::to_string_pretty(&finding).unwrap();
15 println!("{json}");
16}Trait Implementations§
Source§impl<'de> Deserialize<'de> for Finding
impl<'de> Deserialize<'de> for Finding
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl Ord for Finding
impl Ord for Finding
Source§impl PartialOrd for Finding
impl PartialOrd for Finding
Source§impl Reportable for Finding
Blanket: secfinding’s own Finding implements Reportable.
impl Reportable for Finding
Blanket: secfinding’s own Finding implements Reportable.
Source§fn confidence(&self) -> Option<f64>
fn confidence(&self) -> Option<f64>
Source§fn exploit_hint(&self) -> Option<&str>
fn exploit_hint(&self) -> Option<&str>
PoC command.Source§fn sarif_level(&self) -> &str
fn sarif_level(&self) -> &str
impl Eq for Finding
impl StructuralPartialEq for Finding
Auto Trait Implementations§
impl Freeze for Finding
impl RefUnwindSafe for Finding
impl Send for Finding
impl Sync for Finding
impl Unpin for Finding
impl UnsafeUnpin for Finding
impl UnwindSafe for Finding
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Comparable<K> for Q
impl<Q, K> Comparable<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.