Loading report…
← nittim
[](https://nittim.com)Shippable once the listed conditions are addressed.You can make it live once the listed conditions are handled.Handle the listed conditions, then ship.
src/vulnerability_localization_benchmark/sandbox.pyvalidate_command() splits the command only on '|' and checks the first word of each pipe segment against ALLOWED_CMDS; DENIED_PATTERNS blocks $(, backticks, >, >>, &&, ||, and trailing & but NOT ';'. A command like 'cat foo; <arbitrary>' passes validation (first word 'cat' is allowed) yet the whole string is executed via `docker exec ... bash -c command` in exec_command().README.md('--permissive skips command validation (recommended — container is sandboxed)') and src/vulnerability_localization_benchmark/cli.py sets sb.PERMISSIVE=True; sandbox.py exec_command() skips validate_command() when PERMISSIVE.src/vulnerability_localization_benchmark/model_runners/vllm.pyvllm_qwen_3_5.py, and vllm_gemma_4.py contain almost identical generate()/init_conversation()/format_tool_response() logic differing only in default sampling params.29 of 35 files were audited. The denominator counts every file in the repository — images, generated output, vendored and build directories included. nittim reads source and configuration only, highest-value files first. Nothing here was cut short by a size or file-count limit — the gap is almost entirely non-code content, not skipped source.
Dependency manifests: 1 Python manifest read.
This is a research evaluation harness from Cisco Foundation AI (the Vulnerability Localization Benchmark) — a Python CLI that drives LLMs through Docker-sandboxed terminal exploration of vulnerable/patched open-source repository snapshots and scores their ability to localize vulnerable files. It is an offline batch benchmark, not a networked multi-tenant production service: there is no user authentication, no persisted user data, no public write API, and no PII processing. The scanner found zero hardcoded secrets and zero known-vulnerable dependencies. The codebase is clean, modular, and well-documented, with sensible sandbox hardening (network=none, resource limits, non-root agent user, ephemeral containers, command allowlisting). The most notable concrete defect is an incomplete command-validation allowlist in sandbox.py that can be bypassed with a semicolon-separated command, though this is heavily mitigated by the surrounding sandbox and by the fact that the recommended run mode disables validation entirely. Because the repository's declared purpose is to be a publicly published benchmark, its methodology and analytics are intentionally open — there is little defensible IP at stake. Overall the project is fit for its intended research/benchmarking purpose; the findings are operational and code-quality refinements rather than production blockers.
data/downloader_and_verifier.pydownloads each entry from https://github.com/{repo}/archive/{sha}.zip; .gitignore excludes data/ghsa-vulns/. DATASET_CARD.md notes 'Some source repositories may become unavailable over time (archived in deleted-repo-mirrors/)'.src/vulnerability_localization_benchmark/agent.pyon runner.generate() exception it logs and `break`s the loop; a failed generation mid-run yields submitted_nothing/empty submission that is then scored as a normal (zero) result rather than flagged as an infrastructure error.docs/code/repo_feature_extractor.pyuses multiple 'except: pass' / bare 'except:' blocks around zip reads, JSON parsing, and dependency counting.pyproject.tomlpins only lower bounds: vllm>=0.19, transformers>=5.0, torch>=2.0, openai>=2.0; no lockfile was resolvable per the dependency scan.cli.pyand agent.py use Python logging at INFO with per-entry log lines; there are no structured metrics, per-worker failure summaries persisted, or run-level manifest of skipped/failed entries beyond stdout.data/downloader_and_verifier.pyfully documents a non-obvious dataset-reconstruction recipe (GitHub-archive symlink resolution via Unix external attrs, multi-hop directory-symlink resolution, export-subst %h 2-char truncation, and content-based MD5 over lexicographically ordered path+bytes); README.md/DATASET_CARD.md describe the two-phase agentic protocol. Repo is PUBLIC.Weighted blend of 4 dimensions → ~79/100. Dimensions are weighted by importance (Security and Privacy weigh heaviest). Published figures are approximate; nittim's exact weighting and precise scoring are proprietary, while the verdict is computed on exact internal values.4 categories combine into ~79/100. Some categories count for more than others (Security and Privacy count the most). The published numbers are approximate; nittim's exact math is kept private, while the verdict itself is worked out from the exact internal numbers.Weighted blend of 4 dimensions → ~79/100 (Security and Privacy weigh heaviest). Published figures are approximate; nittim's exact weighting is proprietary. The verdict runs on exact internal values.
IP Protection is an independent IP-defensibility lens and is excluded from this blend.IP Protection (checking whether your ideas are exposed) is judged separately and isn’t
part of this combined number.IP Protection is judged separately, excluded from this blend.
Scores are a judgement, not a measurement: a re-audit of the same commit can land a few
points either side of this figure. The evidence underneath it is deterministic — the same
commit always yields the same committed-secret and vulnerable-dependency findings.Scores are a judgment call, not an exact measurement: checking the same saved snapshot of
your code twice can land a few points either side of this number. The evidence underneath
it is not — the same snapshot always turns up the same passwords-in-code and known-security-bug
findings.Scores are a judgment, not a measurement — a re-audit can land a few points either side. The evidence underneath is deterministic: the same commit always yields the same secret and vulnerable-dependency findings.
Each score is the model's overall assessment of the dimensions it covers, across everything it reviewed — not a tally of the findings in this report. Findings are the subset worth acting on, so a score can sit above or below what the listed findings alone would suggest.Each score is the AI's overall judgment of everything it reviewed in that category — not a
count of the problems listed in this report. The listed problems are the ones worth acting
on, so a score can sit above or below what they alone would suggest.Each score is the model's overall assessment across everything it reviewed — not a tally of this report's findings. A score can sit above or below what the findings alone suggest.
Verdict rationale — Why this verdict — Verdict rationale — For its actual scope — an offline, single-operator research benchmark harness with no user data, no auth surface, and no public write endpoints — this repository is well-built: clean modular code, sensible Docker sandboxing (network=none, resource caps, non-root, ephemeral containers), no committed secrets, and no known-vulnerable dependencies. It is suitable for its intended use with modest hardening. The conditions are: tighten the command-validation allowlist so it cannot be bypassed with ';'/newline separators (and reconsider making --permissive non-default), pin dependencies/provide a lockfile and an authoritative vendored dataset mirror for reproducibility, and add CI plus distinct handling of infra-vs-model failures in results. None of these are production blockers for a research artifact. IP-protection and AI-authorship scores are reported independently and did not influence this verdict — the public disclosure of methodology is the benchmark's intended purpose, not a leak that raises production risk.