mirror of
https://github.com/safedep/pmg.git
synced 2026-08-03 07:24:09 +02:00
* feat: authenticated Malysis analyzer with tenant exclusion support When SafeDep Cloud credentials are available (keychain or environment), PMG now uses an authenticated malware analysis query against api.safedep.io instead of the unauthenticated community endpoint (community-api.safedep.io). The API key and tenant ID are supplied via the gRPC connection. The authenticated response may carry a tenant-specific malicious package exclusion. This is honored as an opt-in trust signal: a flagged package is downgraded to allow only when a concrete exclusion (non-empty ID) is present for the exact package version queried. Exclusions are never honored for community queries and never weaken the verdict for packages that were not flagged. Allowed-by-exclusion packages are surfaced as a warning so the trust decision is never silent. Changes are additive; non-authenticated usage is unchanged. Credential resolution is extracted into internal/cloudauth and reused by both the analyzer factory and the existing cloud sync client. * fix: surface tenant exclusions in proxy mode; clarify comments - Warn when proxy interceptor allows a flagged package due to a tenant exclusion, matching the guard flow so the trust decision is not silent. - Remove stray doc comment above warnIfExcluded. - Clarify that a verified-malware verdict can be downgraded by an exclusion in applyExclusion. --------- Co-authored-by: Claude <noreply@anthropic.com>
62 lines
1.3 KiB
Go
62 lines
1.3 KiB
Go
package analyzer
|
|
|
|
import (
|
|
"context"
|
|
|
|
packagev1 "buf.build/gen/go/safedep/api/protocolbuffers/go/safedep/messages/package/v1"
|
|
)
|
|
|
|
// A base interface for all analyzers
|
|
type Analyzer interface {
|
|
Name() string
|
|
}
|
|
|
|
type Action int
|
|
|
|
const (
|
|
ActionUnknown Action = iota
|
|
ActionAllow
|
|
ActionConfirm
|
|
ActionBlock
|
|
)
|
|
|
|
type PackageVersionAnalysisResult struct {
|
|
PackageVersion *packagev1.PackageVersion
|
|
|
|
// Analyser specific analysis ID
|
|
AnalysisID string
|
|
|
|
// Reference URL for the analysis
|
|
ReferenceURL string
|
|
|
|
// The action to take as recommended by the analyzer
|
|
Action Action
|
|
|
|
// Summary of the analysis
|
|
Summary string
|
|
|
|
// Whether the package is flagged as malware by inference
|
|
IsMalware bool
|
|
|
|
// Whether the malware verdict has been verified (confirmed by a human or verification system)
|
|
IsVerified bool
|
|
|
|
// Whether a tenant-specific exclusion caused this package to be trusted
|
|
// despite a malware verdict. Only set by authenticated analyzers.
|
|
IsExcluded bool
|
|
|
|
// The tenant-specific exclusion that trusted this package, when IsExcluded is true
|
|
ExclusionID string
|
|
ExclusionReason string
|
|
|
|
// Analyzer specific data
|
|
Data any
|
|
}
|
|
|
|
// Contract for implementing package version specific analyzers
|
|
type PackageVersionAnalyzer interface {
|
|
Analyzer
|
|
|
|
Analyze(ctx context.Context, packageVersion *packagev1.PackageVersion) (*PackageVersionAnalysisResult, error)
|
|
}
|