Skip to content

docs: scan #101 — mljar/mercury (1 real, reported privately via PVR) - #141

Merged
elfrost merged 1 commit into
mainfrom
daily/2026-09-11-mljar-mercury
Sep 11, 2026
Merged

docs: scan #101 — mljar/mercury (1 real, reported privately via PVR)#141
elfrost merged 1 commit into
mainfrom
daily/2026-09-11-mljar-mercury

Conversation

@elfrost

@elfrost elfrost commented Sep 11, 2026

Copy link
Copy Markdown
Owner

Scan #101 of the AI PatchLab public series.

Target: mljar/mercury — turn a Jupyter notebook into a public web app (4.4k★, Apache-2.0), commit b02bca0.

Result: 140 raw findings, 1 real (Medium), reported privately.

The finding (class only — detail withheld)

An intra-repo guard differential. Mercury's standalone default disables the Jupyter token (it is meant to be published publicly) and ships an execution firewall that blocks the dangerous authenticated endpoints so anonymous visitors can only do safe things. Two sibling handlers list notebooks from the same configured directory; one trusts a caller-supplied path to choose which directory, the other ignores it. In the token-less default the trusting one is reachable without authentication.

Impact is bounded and verified: escapes the configured directory to enumerate notebooks elsewhere on the host + read their title/description metadata + a directory-existence oracle — but not file content (the read/render path goes through Jupyter's contents manager, which rejects .. traversal → 404). Reproduced live against the shipped mercury 3.2.11 with positive and negative controls.

Channel

PVR enabled + no SECURITY.md → filed privately (GHSA-8hq5-94w5-f4ff, triage). A working unauthenticated request against the product's advertised safety boundary; a public issue would be a live-deployment recipe. Post-only, detail withheld.

Curation notes

  • The single Critical (Astro AVIF RCE) and most of the High/Medium are npm advisories in docs/ + yarn.lock — the documentation website, not the shipped Python wheel. SCA reachability-blindness on artifact-vs-repo.
  • Semgrep clean: 14 results, 2 errors, 375 scanned, 0 skipped.
  • FPs: SHA-1 config-cache key (_safe_str-sanitized, non-crypto); Jinja autoescape on operator config.
  • Credited defenses: execution policy resolves cell source server-side by id (never runs client code), contents manager confines traversal, firewall blocks terminals/contents/shutdown/files/Lab.

Files

  • docs/scans/mljar-mercury.md (new)
  • docs/index.md (row + counts 100→101)
  • docs/scan-log.md (bullet + count)

🤖 Generated with Claude Code

…tely via PVR)

Unauthenticated notebook enumeration outside the configured directory:
NotebooksAPIHandler honors a caller-controlled ?dir= that its sibling
RootIndexHandler ignores; in the default anonymous-firewall mode it is
reachable without auth. Bounded to .ipynb enumeration + title/description
metadata + a directory-existence oracle (no file content — the read path
confines .. traversal). Reproduced against shipped mercury 3.2.11.

PVR enabled + no SECURITY.md -> filed privately (GHSA-8hq5-94w5-f4ff, triage);
post-only with detail withheld (class only).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@elfrost
elfrost merged commit 768e8ed into main Sep 11, 2026
2 checks passed
@elfrost
elfrost deleted the daily/2026-09-11-mljar-mercury branch September 11, 2026 13:25
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.

1 participant