Metastatic.Analysis.Security.Result
(Metastatic v0.10.4)
View Source
Result structure for security vulnerability detection.
Contains information about detected security vulnerabilities, their severity, and remediation recommendations.
Fields
:has_vulnerabilities?- Boolean indicating if vulnerabilities were found:vulnerabilities- List of detected vulnerability details:summary- Human-readable summary of findings:total_vulnerabilities- Count of detected vulnerabilities:by_severity- Map of counts by severity:by_category- Map of counts by vulnerability category
Vulnerability Categories
:injection- SQL injection, command injection, XSS:unsafe_deserialization- pickle.loads, eval, exec:hardcoded_secret- Passwords, API keys in code:weak_crypto- MD5, SHA1, weak random:path_traversal- Unchecked file paths:insecure_protocol- HTTP instead of HTTPS
Examples
iex> result = Metastatic.Analysis.Security.Result.new([])
iex> result.has_vulnerabilities?
false
iex> vulns = [%{category: :injection, severity: :critical, description: "test"}]
iex> result = Metastatic.Analysis.Security.Result.new(vulns)
iex> result.has_vulnerabilities?
true
Summary
Functions
Creates a new result from a list of vulnerabilities.
Creates a result with no vulnerabilities.
Converts result to JSON-compatible map.
Types
@type category() ::
:injection
| :unsafe_deserialization
| :hardcoded_secret
| :weak_crypto
| :path_traversal
| :insecure_protocol
@type severity() :: :critical | :high | :medium | :low
@type t() :: %Metastatic.Analysis.Security.Result{ by_category: %{required(category()) => non_neg_integer()}, by_severity: %{required(severity()) => non_neg_integer()}, has_vulnerabilities?: boolean(), summary: String.t(), total_vulnerabilities: non_neg_integer(), vulnerabilities: [vulnerability()] }
Functions
@spec new([vulnerability()]) :: t()
Creates a new result from a list of vulnerabilities.
Examples
iex> Metastatic.Analysis.Security.Result.new([])
%Metastatic.Analysis.Security.Result{has_vulnerabilities?: false, summary: "No security vulnerabilities detected"}
iex> vulns = [%{category: :injection, severity: :critical, description: "test", recommendation: "fix", cwe: nil, context: nil}]
iex> result = Metastatic.Analysis.Security.Result.new(vulns)
iex> result.has_vulnerabilities?
true
@spec no_vulnerabilities() :: t()
Creates a result with no vulnerabilities.
Examples
iex> result = Metastatic.Analysis.Security.Result.no_vulnerabilities()
iex> result.has_vulnerabilities?
false
Converts result to JSON-compatible map.
Examples
iex> result = Metastatic.Analysis.Security.Result.new([])
iex> map = Metastatic.Analysis.Security.Result.to_map(result)
iex> is_map(map)
true