Files
jobtrackingapp/docs/audits/evidence/dependency-evidence.md
T

2.6 KiB

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.