Skip to content

logly/mureo

v0.10.28 Security

This release includes 9 security fixes for security teams reviewing exposed deployments.

✓ No known CVEs patched
Read the diff → Tool health → What is this tool? →
This release patches 9 known CVEs

Topics

advertising agentic-ai ai-agents claude-code cli codex
+11 more
cursor facebook-ads gemini-cli google-ads marketing marketing-automation mcp meta-ads model-context-protocol python search-console

Affected surfaces

auth rce_ssrf deps

ReleasePort's take

Moderate signal
editorial:auto 9d

The v0.10.28 release patches critical injection, SSRF, and guardrail flaws across multiple Google Ads surfaces.

Why it matters: Fixes GAQL injection (severity 95), removes CSV formula injection (90), eliminates landing‑page screenshot SSRF (88), moves Meta OAuth secrets to POST body (85), adds locked read‑modify‑write protection for credentials files (80) and bounds image decompression (65).

Summary

AI summary

Full-codebase security review fixes multiple injection, SSRF, and guardrail issues.

Changes in this release

Security Critical

Fixes GAQL injection in google_ads_ad_groups.update and missing ID validation on targeting updates.

Fixes GAQL injection in google_ads_ad_groups.update and missing ID validation on targeting updates.

Source: llm_adapter@2026-07-18

Confidence: high

Security Critical

Removes CSV formula injection vulnerability in Google Ads BYOD export.

Removes CSV formula injection vulnerability in Google Ads BYOD export.

Source: llm_adapter@2026-07-18

Confidence: high

Security High

Eliminates SSRF vulnerabilities in landing-page screenshot tool and lp_analyzer.

Eliminates SSRF vulnerabilities in landing-page screenshot tool and lp_analyzer.

Source: llm_adapter@2026-07-18

Confidence: high

Security High

Moves Meta OAuth secrets from query string to POST body.

Moves Meta OAuth secrets from query string to POST body.

Source: llm_adapter@2026-07-18

Confidence: high

Security High

Adds locked read‑modify‑write protection for credentials.json, STRATEGY.md, and Claude settings file.

Adds locked read‑modify‑write protection for credentials.json, STRATEGY.md, and Claude settings file.

Source: llm_adapter@2026-07-18

Confidence: high

Security High

Closes credential‑guard symlink‑evasion gap.

Closes credential‑guard symlink‑evasion gap.

Source: llm_adapter@2026-07-18

Confidence: high

Security High

Prevents BRAND_KIT logo path sandbox escape.

Prevents BRAND_KIT logo path sandbox escape.

Source: llm_adapter@2026-07-18

Confidence: high

Security Medium

Adds image‑header dimension validation to bound decompression.

Adds image‑header dimension validation to bound decompression.

Source: llm_adapter@2026-07-18

Confidence: high

Security Medium

Fixes zero‑budget path that bypassed increase‑pct guardrail.

Fixes zero‑budget path that bypassed increase‑pct guardrail.

Source: llm_adapter@2026-07-18

Confidence: high

Feature Low

Plugins can ship native slash skills via `mureo.native_skills`.

Plugins can ship native slash skills via `mureo.native_skills`.

Source: granite4.1:30b@2026-07-18-audit

Confidence: low

Feature Low

`mureo_analytics_run` executes a plugin's `AnalyticsModule`.

`mureo_analytics_run` executes a plugin's `AnalyticsModule`.

Source: granite4.1:30b@2026-07-18-audit

Confidence: low

Feature Low

/onboard offers to seed the STRATEGY.md Guardrails section.

/onboard offers to seed the STRATEGY.md Guardrails section.

Source: granite4.1:30b@2026-07-18-audit

Confidence: low

Bugfix Medium

Gates GA4 credential wizard under multi‑account backend, returning HTTP 403 and removing UI elements.

Gates GA4 credential wizard under multi‑account backend, returning HTTP 403 and removing UI elements.

Source: llm_adapter@2026-07-18

Confidence: low

Bugfix Low

Configure host + host_paths are captured as one atomic snapshot.

Configure host + host_paths are captured as one atomic snapshot.

Source: granite4.1:30b@2026-07-18-audit

Confidence: low

Refactor Low

Live-client analytics `account_id` is scoped through the allow‑list and canonicalized.

Live-client analytics `account_id` is scoped through the allow‑list and canonicalized.

Source: granite4.1:30b@2026-07-18-audit

Confidence: low

Full changelog

Added

  • Plugins can ship native slash skills via mureo.native_skills (#439). A
    new entry-point group lets a plugin deploy /<name> workflow skills into
    ~/.claude/skills and ~/.codex/skills alongside mureo's own bundle, so
    a platform-specific workflow the operator invokes directly can be
    distributed by a plugin. Distinct from mureo.skills (runtime context
    skills that are never copied to the host skill dirs). Deployment runs during
    setup (claude-code / codex), mureo configure, and mureo upgrade, and
    removal runs from clear-setup. Safety: built-in-first (a plugin can never
    shadow a core /slash), first-wins between plugins, per-skill fault
    isolation, and a recursive symlink-containment check so a plugin cannot
    exfiltrate a file from outside its package through copytree.
  • mureo_analytics_run executes a plugin's AnalyticsModule (#440). A new
    read-only MCP tool actually invokes a registered module's detect_anomalies
    / diagnose_performance / audit_creative / analyze_budget_efficiency and
    returns the structured result. Previously a plugin could advertise a
    capability via mureo_analytics_modules_list but had no way to run it — the
    analysis was dead code. Credential-lazy, read-only, and fault-isolated (a
    broken or non-serializable module returns a structured error status instead
    of crashing the workflow). The daily-check, rescue, and _mureo-shared
    skills now run advertised capabilities through it. No new plugin ABI.
  • /onboard proactively offers to set the STRATEGY.md ## Guardrails (#364).
    The onboarding flow now offers to seed the guardrail section so budget and
    blocked-operation limits are in place from the start.

Fixed

  • GA4 credential wizard is gated under a multi-account backend (#442). GA4
    auth is a single service account; under a multi-account backend that one SA
    would reach every account/property. The configure server now refuses a write
    whose effective section resolves to ga4 (HTTP 403), mirroring the Search
    Console multi-account fail-closed (#375), and the Setup UI removes GA4
    entirely (auth slot, selection checkbox, and provider-install instructions).
    Standalone OSS is unaffected.
  • Configure host + host_paths are captured as one atomic snapshot (#407).
    Closes a race where the detected host and its derived paths could be read
    from two different points in time.
  • Live-client analytics account_id is scoped through the #411 allow-list
    (#413, #435).
    The analytics live clients now resolve account_id through
    the tenant allow-list (fail-closed on a workspace-scope refusal), canonicalize
    a Meta account_id to its act_ form on the unscoped path, and thread the
    resolved id back to callers so cross-account exposure cannot slip through the
    analytics seam.

Security

  • Full-codebase security & correctness review fixes (#441). Fixes surfaced
    by an adversarial review across the codebase: a GAQL injection reachable via
    google_ads_ad_groups.update (unvalidated ad_group_id) and missing ID
    validation on location/schedule-targeting updates; CSV formula injection in
    the Google Ads BYOD export (a shared _csv_safe sanitizer now covers every
    adapter); SSRF via un-re-validated redirect hops in the landing-page
    screenshot tool and duplicated/incomplete SSRF guards in lp_analyzer; a
    blocked_operations guardrail whose documented examples named non-existent
    tools so it never fired; Meta OAuth secrets moved from the query string to the
    POST body; locked read-modify-write on credentials.json / STRATEGY.md /
    the Claude settings file; a credential-guard symlink-evasion gap; a
    BRAND_KIT logo path sandbox escape; image-header dimension validation to bound
    decompression; a zero-budget path that bypassed the increase-pct guardrail;
    and the coverage gate no longer excludes mureo/mcp/*. CI actions are now
    pinned to commit SHAs.

Security Fixes

  • GAQL injection in `google_ads_ad_groups.update` (unvalidated `ad_group_id`)
  • Missing ID validation on location/schedule-targeting updates
  • CSV formula injection in Google Ads BYOD export fixed with `_csv_safe` sanitizer
  • SSRF via un-re-validated redirect hops in landing-page screenshot tool and duplicated guards in `lp_analyzer`
  • Blocked‑operations guardrail examples corrected so it fires as intended
  • Meta OAuth secrets moved from query string to POST body
  • Credential-guard symlink-evasion gap closed
  • BRAND_KIT logo path sandbox escape mitigated
  • Image-header dimension validation added to bound decompression

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

Track logly/mureo

Get notified when new releases ship.

Sign up free

About logly/mureo

Framework for AI agents (Claude Code, Cursor, Codex, Gemini) to operate Google Ads, Meta Ads, and Search Console. Grounded in a local STRATEGY.md — not metric-chasing. Defense-in-depth security, local-first. Apache 2.0.

All releases →

Related context

Beta — feedback welcome: [email protected]