InstallHub
Security Scanning
Every package that passes through InstallHub — whether imported directly or installed from the marketplace — is subject to mandatory security scanning. Scanning is non-optional and cannot be bypassed, even by administrators.
Why Mandatory Scanning?
InstallHub packages contain executable workflow logic, AI agent configurations, and business rules. A malicious or compromised package could exfiltrate data, corrupt tenant state, or introduce injection vulnerabilities into running processes. Scanning provides a defense-in-depth layer that operates independently of the package publisher's intentions.
When Scanning Runs
| Context | When | Blocks On FAIL? | Status |
|---|---|---|---|
| Direct import (Phase 2) | Before installation begins | Yes — import aborted and rolled back | Implemented |
| Dry-run import | During dry-run pipeline | Reported in dry-run result | Implemented |
| Marketplace submission | Before listing the package | Yes — rejected, not listed | Phase 3 Pending |
| Marketplace install | Before installation begins (re-scan of cached package) | Yes — install aborted | Phase 3 Pending |
Checks Performed
Expression
Injection
Injection
→
SQL
Injection
Injection
→
Dependency
CVE
CVE
→
Content
Policy
Policy
→
Credential
Exposure
Exposure
IPackageSecurityScanner Interface
public interface IPackageSecurityScanner
{
Task<ScanReport> ScanAsync(
PackageBundle bundle,
ScanContext context,
CancellationToken cancellationToken = default);
}
public record ScanReport
{
public ScanResult OverallResult { get; init; } // Pass, Warn, Fail
public IReadOnlyList<ScanFinding> Findings { get; init; }
public DateTimeOffset ScannedAt { get; init; }
public long DurationMs { get; init; }
}
public record ScanFinding
{
public string Check { get; init; }
public Severity Severity { get; init; } // Critical, High, Medium, Low
public string ArtifactType { get; init; }
public string ArtifactName { get; init; }
public string Field { get; init; }
public string Value { get; init; }
public string Rule { get; init; }
public string Message { get; init; }
}
public enum ScanResult { Pass, Warn, Fail }
Result Summary
| Result | Overall Meaning | Import Action | Marketplace Action |
|---|---|---|---|
| PASS | Zero findings across all checks | Proceeds normally | Listed with green badge |
| WARN | One or more medium/low findings, no critical/high | Proceeds with warning in audit log | Listed with yellow badge; human review recommended |
| FAIL | One or more critical or high findings | Blocked — import aborted, package not installed | Rejected — not listed |