# Dependency and supply-chain evidence Captured: 2026-08-02 ## Advisory checks - NuGet: no known vulnerable direct or transitive package was reported. - npm: two affected package entries (`react-router` and `react-router-dom`) cover four moderate advisories. One narrow redirect issue is fixed in 6.30.4; the remaining audit-suggested resolution is React Router 7.18.2, a breaking major upgrade. No upgrade was attempted. - Python: `pip-audit` returned 119 records across six installed packages; after deduplicating repeated aliases, the affected counts were `transformers` 21, `torch` 22, `pillow` 17, `pypdf` 35, `python-multipart` 6, and transitive `starlette` 7. Reachability matters: - `pypdf` directly parses authenticated user PDF uploads and multiple advisories describe infinite loops, excessive CPU, or memory exhaustion from crafted PDFs. - Pillow directly opens authenticated image uploads; advisories include decompression bombs and memory-corruption cases. Extension routing is not a content-signature check. - `python-multipart`/Starlette parse the sidecar upload before the endpoint's eight-megabyte post-read check; several advisories are request-parsing denial of service. - Many `torch`/`transformers` advisories concern model or checkpoint loading. The application loads a fixed configured model, not a user-supplied model, so those records are not all treated as directly exploitable. Existing mitigations: authenticated backend upload path, private backend-only AI network, required production service token, eight-megabyte application limit, accepted-extension list, and no host-published sidecar port. Residual risk: containers have no resource limits and the parser handles untrusted bytes in-process. ## Reproducibility and provenance - npm has `package-lock.json` and uses `npm ci`. - NuGet has no lockfile; the repository has no `global.json`, so local builds selected SDK 10 while the project targets .NET 9. - Python top-level requirements are exact pins, but transitive dependencies are not hash-locked. - Docker base images use mutable tags rather than digests. - Gitea Actions use mutable major tags for checkout/setup-node, an unpinned remote `dotnet-install.sh`, and a tagged SSH action rather than immutable commit SHAs. - The AI image upgrades pip/setuptools/wheel during build and downloads the configured Hugging Face model at runtime unless already cached. - No SBOM generation, package licence gate, container CVE scan, or signed-provenance check is configured. `dotnet list ... --deprecated` marked xUnit 2.9.2 and its transitive xUnit 2 packages as legacy. This is maintenance information, not a current security defect.