Skip to content

fix(zetesis): harden indexer search (SSRF, redaction, body cap) + quick-xml advisories - #488

Merged
forkwright merged 1 commit into
mainfrom
fix/zetesis-indexer-search
Jul 2, 2026
Merged

fix(zetesis): harden indexer search (SSRF, redaction, body cap) + quick-xml advisories#488
forkwright merged 1 commit into
mainfrom
fix/zetesis-indexer-search

Conversation

@forkwright

Copy link
Copy Markdown
Owner

Closes #429, #430, #431, #432, #433, #434, #459, #460, #467.

Changes

Security advisories (published 2026-07-02)

Also resolves RUSTSEC-2026-0194 (quick-xml quadratic-attribute DoS) and RUSTSEC-2026-0195 (NsReader namespace-allocation DoS), which broke main's Security workflow overnight. The direct indexer-XML parser is bumped to quick-xml 0.41 (fixed); the remaining 0.37.5 is transitively pinned by feed-rs and librqbit-upnp (no upstream 0.41 yet) and is ignored with a review-by: 2026-10-01, derived across deny.toml / .cargo/audit.toml / osv-scanner.toml via kanon audit derive-ignores.

Verification

kanon gate --full green (fmt, check, advisory-parity, cargo-deny, clippy workspace, nextest, kanon lint).

…cap, tx)

- #429: a cancelled HTTP fetch returns a distinct Cancelled error instead
  of ParseResponse, no longer degrading every in-flight indexer.
- #430: fetch_xml enforces a configurable max_response_body_bytes cap
  (default 16 MiB) on attacker-controlled bodies.
- #431: RateLimited honors Retry-After so back-off engages.
- #432: upsert_indexer_categories runs its DELETE + INSERTs in one transaction.
- #433: indexer API keys are redacted from logged URLs.
- #434: torrent download URLs are SSRF-validated — http(s) only, host
  DNS-resolved and every resolved address rejected if private/loopback/
  link-local/CGNAT; fail-closed on resolution failure.
- #459: NewznabClient/TorznabClient HTTP status + auth-failure paths tested.
- #460: zetesis repo.rs gains an in-memory-sqlite test module.
- #467: archon wires the ByparrProxy Cloudflare bypass from config instead
  of hardwiring NoProxy.

Also resolves two quick-xml advisories published 2026-07-02 (RUSTSEC-2026-0194
quadratic-attribute DoS, RUSTSEC-2026-0195 NsReader namespace DoS): bump the
direct indexer-XML parser to quick-xml 0.41 and ignore the transitively-pinned
0.37 (feed-rs, librqbit-upnp) with review-by, derived across deny/audit/osv.

Closes #429
Closes #430
Closes #431
Closes #432
Closes #433
Closes #434
Closes #459
Closes #460
Closes #467

Gate-Passed: kanon 0.1.5 +stages:fmt,check,clippy,nextest,lint sha:fb78c8d064530f3d0387a4a12fc6cc9cfd1a89ba
@forkwright
forkwright merged commit 9b9ae1b into main Jul 2, 2026
11 checks passed
@forkwright
forkwright deleted the fix/zetesis-indexer-search branch July 2, 2026 14:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Cancelled HTTP fetch returns ParseResponse, degrading every in-flight indexer

1 participant