This release includes 2 security fixes for security teams reviewing exposed deployments.
Affected surfaces
Summary
AI summaryUpdates Internal consolidation, New and consolidated subpaths, and https://www.npmjs.com/package/@mulmoclaude/core/v/1.2.0 across a mixed release.
Full changelog
Highlights
First release since 1.0.1. The workspace had moved to 1.2.0 without a matching publish, so this release carries a large backlog — the deduplication campaign, several prototype-pollution guards, and new browser-safe subpaths.
Security
-
SSRF deny-list single-sourced (#2459). The feeds HTTP client had its own CIDR table, which had drifted from the mastodon bridge's copy and was missing four ranges (
192.0.0.0/24,198.18.0.0/15,224.0.0.0/4,240.0.0.0/4) plus the hostname blocklist. It now imports@mulmoclaude/common/ssrf, whose table is the union of both, and gains two bypass fixes that were present in every copy: IPv4-mapped IPv6 in hex form ([::ffff:127.0.0.1], which WHATWGURLserializes as::ffff:7f00:1) is now caught, and the IPv6 check is mask-based rather than string-prefix, which had under-blockedfe81::–febf::insidefe80::/10. -
Prototype-chain lookup guards (#2318, #2319, #2322, #2323, #2324). Record field pointers,
wherelookups, handler dispatch, and danglingref/embedresolution could read through the prototype chain, so a key likeconstructoror__proto__silently returned a function or object instead of missing. Each lookup is now guarded. -
resolveWithinRootsingle-sourced (#2461). The realpath-based path-containment check — previously a faithful copy carried bymulmoscript-pluginbecause a plugin may not import host code — now lives on the server-only@mulmoclaude/core/filessubpath, with tests covering..escapes, real symlink escapes, and nonexistent paths.
New and consolidated subpaths
@mulmoclaude/core/artifacts(#2405) — shared, browser-safe artifact path builders (slugifyArtifact,buildArtifactRelPath,yearMonthUtc), replacing copies in the chart / html / mulmoscript plugins and, later, the host'syearMonthUtc(#2460).@mulmoclaude/core/plugin-vue(#2404, #2436) —useFileWatch(shared by the html and markdown plugin views, since a plugin cannot import another plugin),useMarkdownDoc,useClipboardCopy, and the purenextFileVersion/fileWatchChannelrules. #2489 surfacednextFileVersionon the barrel and extracteduseFileVersion, so the host composable stops re-implementing the monotonic-mtime rule.@mulmoclaude/core/plugin-vue/i18n(#2462) —createPluginI18n(messages, localeSource), owning thecreateI18nconstruction, the detachedeffectScope, and the retry-safe lazy locale sync that the accounting and collection plugins had each written out. Deliberately its own subpath so importers of the mainplugin-vuebarrel do not have to resolvevue-i18n.@mulmoclaude/core/files(#2399) — onewriteFileAtomic, replacing three copies whoseopts.modehandling anduniqueTmpdefaults had diverged.@mulmoclaude/core/fetch(#2398) — onefetchWithTimeout, consolidating three implementations.@mulmoclaude/core/translation/clientgainsloadTranslated(#2460), the peek-then-fetch batch loader the host and collection plugin had each written.
Internal consolidation
- Host-adapter slot factory (#2401) shared by the collection / feeds / google domains, and in #2486 their logger interfaces became aliases of the canonical
StructuredLoggerin@mulmoclaude/common— eleven structurally identical declarations across the repo now resolve to two shared types, with every public name and structure preserved. - Schema-walk preload unification (#2406) —
uniqueRefTargets/uniqueEmbedTargets/uniqueBacklinkSourceswere hand-mirrored between server enrichment and the client linked-cache fetch, which must preload the same set or one drifts. - Wiki frontmatter (#2410) now reuses
@mulmoclaude/markdown-utils, andescapeHtmlcomes from@mulmoclaude/common(#2483). createSerialLock()adopted fromgui-chat-protocol1.2.0 (#2490).
Dependencies
Requires @mulmoclaude/common@^1.1.0 and @mulmoclaude/markdown-utils@^1.3.0, both published today.
📦 npm: @mulmoclaude/[email protected]
What's Changed
- fix(spreadsheet): VLOOKUP / HLOOKUP index bounds (#2360) by @isamu in https://github.com/receptron/mulmoclaude/pull/2506
- test(manageSkills): guard external-link click wiring on markdown bodies (#2493) by @isamu in https://github.com/receptron/mulmoclaude/pull/2512
Full Changelog: https://github.com/receptron/mulmoclaude/compare/@mulmoclaude/[email protected]...@mulmoclaude/[email protected]
Security Fixes
- SSRF deny‑list single‑sourced in @mulmoclaude/common/ssrf, adding missing CIDR ranges (192.0.0.0/24, 198.18.0.0/15, 224.0.0.0/4, 240.0.0.0/4) and fixing IPv4‑mapped IPv6 bypass
- Prototype‑chain lookup guards added to record field pointers, `where` lookups, handler dispatch, and dangling ref/embed resolution
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
About MulmoClaude
All releases →Related context
Related tools
Beta — feedback welcome: [email protected]