Upstream Release Integrity¶
Where these rules come from and what a finding means: Rule Nature.
These rules ask what the upstream this recipe trusts is actually shipping. Temporal already reports that an update arrived; this page asks what arrived.
The split is enforced by what TrustSight is allowed to read. Upstream
Manifests reads the declared repository tree. Here, the
build automation of a foreign repository is exactly what A2 forbids a local
read of, so U007 and U008 do not fetch: they are indicator rules, matched
against a publisher's signed upstream_repo set over
IOC Federation. U009 is the one local surface, a weight-0 ledger
entry for a workflow committed beside the recipe, and U010 is a local read of
the source=() array for transports the public cannot inspect.
A federation miss is uninformative and never lowers a score. An
upstream_repo match carries no points and is alerted at maximum priority, the
same as any other indicator; see Indicator.
See the rule system reference for the field table, the severity weights and the reserved identifier ranges.
Rules on this page¶
| Rule | Name | Severity |
|---|---|---|
| U007 | CI Exfil Shape | MEDIUM |
| U008 | Git-History Credential Sweep | MEDIUM |
| U009 | New CI Surface Committed | LOW |
| U010 | Unauditable Upstream | MEDIUM |
U007: CI Exfil Shape¶
- Target: declared upstream repository (federation-fed)
- Severity: MEDIUM
-
Category:
upstream-ci -
Condition: A signed federation finding reports that the repository this recipe declares as its upstream (
url=) gained a workflow matching the GhostAction exfil shape: a${{ secrets.reference paired with an outbound transfer to an IP literal or an unknown host.
The workflow content lives upstream, where A2 forbids a local read, so the
shape arrives over the signed upstream_repo federation channel and is never
fetched. A pkgver bump in the same diff is reported as context - the update
is about to distribute whatever the upstream now builds - but is not required.
A miss is uninformative, as with every indicator.
U008: Git-History Credential Sweep¶
- Target: declared upstream repository (federation-fed)
- Severity: MEDIUM
-
Category:
upstream-ci -
Condition: The same federation channel, the history-sweep shape: a workflow that materializes full history (
fetch-depth: 0) and greps the commit history for credential patterns.
Independent of U007's exfil clause, so a repo reported for one shape does not
imply the other. The workflow content is upstream and unreadable locally (A2);
the signed upstream_repo entry is the only source.
U009: New CI Surface Committed¶
- Target: committed .github/workflows/* files
- Severity: LOW (weight 0)
-
Category:
upstream-ci -
Condition: The diff adds a file under
.github/workflows/(*.ymlor*.yaml) to the package repository.
A new automation surface in the AUR repository. Rare (most AUR repositories
carry no CI), so it is emitted as ci_surface_gained at weight 0 and never
scored: it is a corroboration feed for U007/U008 and for IOC hits, not a claim
on its own. AUR repositories are not where a package builds, but a workflow
committed beside the recipe is a surface worth naming.
U010: Unauditable Upstream¶
- Target: declared source=() transport and access mode
- Severity: MEDIUM
-
Category:
source -
Condition: A gained
source=()entry the public cannot inspect, in one of these shapes: embedded credentials in the authority (scheme://user:token@host/...); a private access transport (git+ssh://,ssh://, scp-stylegit@host:path); a private-network or local literal (localhost, RFC 1918, loopback,file://).
A malicious package wants payload nobody checks, and an authenticated or private-network upstream guarantees exactly that for every reviewer who is not the maintainer. Legitimate intranet and corporate AUR packages exist, which is why the verdict is a review-queue entry and the severity sits at MEDIUM.
A credential-bearing public web URL is C020's finding, and
a public IP-literal host is C023's; U010 stands down on
both and keeps the transports they cannot see. When the recipe also carries no
validpgpkeys, no third party can see the source and no signature vouches for
it, so the finding is amplified to the top of the band.
Measured on the 3,739-diff benign corpus, U010 fires on none: the transports it reads are deliberate choices, not background churn.