Skip to content

docs(security): scope zero-egress claim and add MDS072 SSRF caveat - #771

Draft
jeduden wants to merge 4 commits into
mainfrom
claude/youthful-knuth-3kndc4
Draft

docs(security): scope zero-egress claim and add MDS072 SSRF caveat#771
jeduden wants to merge 4 commits into
mainfrom
claude/youthful-knuth-3kndc4

Conversation

@jeduden

@jeduden jeduden commented Jul 25, 2026

Copy link
Copy Markdown
Owner

Summary

Closes plan/2607242011 (security-hardening-batch-2026-07-24, finding S003 from the 2026-07-24 post-audit diff review).

MDS072 external-link-check makes outbound HTTP calls when enabled, but docs/reference/telemetry.md claimed unconditional zero egress and mdsmith check . would run in air-gapped CI with no exceptions. This PR corrects both claims and adds SSRF documentation.

docs/reference/telemetry.md:

  • Qualify the intro claim and the air-gapped CI sentence to "in the default configuration"
  • Add a note in the "What runs offline" section that external-link-check is the one opt-in exception
  • Add a new "Opt-in network access: MDS072 external-link-check" section naming MDS072, explaining its HEAD/GET probe behaviour, and documenting the SSRF risk along with the links.external-skip mitigation

internal/rules/MDS072-external-link-check/README.md:

  • Add a ## Security section documenting the SSRF risk (attacker-controlled URLs, redirect following to internal hosts) and the links.external-skip mitigation

Test plan

  • mdsmith fix passes on all changed docs files (0 unfixed)
  • mdsmith check . passes on the full workspace (567 files, 0 failures)
  • Plan acceptance criteria all checked off

Generated by Claude Code

Closes plan/2607242011 (security-hardening-batch-2026-07-24, S003).

docs/reference/telemetry.md: qualify the "zero outbound network calls"
and air-gapped CI claims to the default configuration. Add an
"Opt-in network access" section naming MDS072 external-link-check as
the one opt-in exception, explaining its HEAD/GET probe behaviour, and
documenting the SSRF risk along with the links.external-skip mitigation.

internal/rules/MDS072-external-link-check/README.md: add a Security
section documenting the SSRF risk — attacker-controlled URLs from
document content, redirect following, internal host reachability — and
the links.external-skip mitigation.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XBKmFebGPtNYQSFZdy9Ffb
@codecov

codecov Bot commented Jul 25, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 98.71%. Comparing base (2ab4b29) to head (5f9c77e).

Additional details and impacted files
Components Coverage Δ
Go 98.70% <ø> (ø)
TypeScript 99.54% <ø> (ø)

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

claude added 3 commits July 25, 2026 22:16
…SSRF list; mark plan done

Round 1 review findings:
- telemetry.md: qualify "mdsmith lsp ... No network" with same opt-in note as
  mdsmith check; qualify "never calls an external service at runtime" in the
  Claude Code plugin section to "in the default configuration"; qualify the
  "How to verify" closing claim to "In the default configuration"
- MDS072 README Security section: add "link-local addresses" to the SSRF host
  list (was present in telemetry.md but missing here)
- PLAN.md: regenerate catalog to reflect plan 2607242011 status ✅

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XBKmFebGPtNYQSFZdy9Ffb
Qualify "running it makes no network calls" in the install-time
section to say "In the default configuration, running it makes no
outbound network calls." — consistent with the runtime section
wording introduced in the previous commit.

Remove the [mds072-readme] reference link definition (and its two
usages) that pointed to ../../internal/rules/MDS072-external-link-
check/README.md. That path does not exist in the website content
tree, causing MDS027 failures in the "Build and lint website content
tree" CI job. The rule name is already self-documenting in context.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XBKmFebGPtNYQSFZdy9Ffb
Two review fixes:

1. `mdsmith fix` also runs enabled rules (including MDS072 when
   opt-in) as part of its pre/post check pass, so the "What runs
   offline" bullet was wrong to say "No network from mdsmith itself"
   without qualification. Align it with the check and lsp bullets:
   "No network by default. (Same opt-in exception as mdsmith check.)"

2. The SSRF paragraph in the new MDS072 section omitted redirect-
   following as a threat vector. `links.external-skip` on the initial
   URL does not block a redirect to an internal host (Go's default
   http.Client follows up to 10 redirects). Add a sentence covering
   this so the mitigation guidance is accurate.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XBKmFebGPtNYQSFZdy9Ffb
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.

2 participants