This release includes 1 security fix for security teams reviewing exposed deployments.
Topics
+11 more
Affected surfaces
Summary
AI summaryFixed ad‑account dropdown truncation by paginating all accounts and added host pinning plus token redaction defenses.
Changes in this release
| Type | Severity | Summary | CVE |
|---|---|---|---|
| Security | High |
Adds host pinning to `paging.next` URLs for Meta ad‑account pagination Adds host pinning to `paging.next` URLs for Meta ad‑account pagination Source: llm_adapter@2026-06-09 Confidence: high |
— |
| Security | High |
Redacts access token from exception messages during pagination failures Redacts access token from exception messages during pagination failures Source: llm_adapter@2026-06-09 Confidence: high |
— |
| Bugfix | Medium |
Fixes truncation of Meta ad‑account dropdown at 25 entries Fixes truncation of Meta ad‑account dropdown at 25 entries Source: llm_adapter@2026-06-09 Confidence: high |
— |
Full changelog
Fixed — mureo configure Meta ad-account dropdown now lists every account under a Business Manager (#181)
The configure UI's Meta ad-account picker silently truncated to the
first 25 accounts under any Business Manager because
list_meta_ad_accounts in mureo/meta_ads/accounts.py called
GET /me/adaccounts once and returned the first page verbatim.
Operators with mid-sized BM portfolios (26+ accounts) could not select
the account they actually wanted to connect — it never appeared in the
dropdown.
This release walks paging.next until exhausted (with limit=100 on
the first request to minimise round-trips) and concatenates every page
in cursor order. A 50-page hard cap stops a buggy Graph response from
spinning the configure UI forever; the cap path logs a warning so the
gap is visible to operators.
Two defence-in-depth additions land alongside the pagination fix:
- Host pinning on
paging.next. Refuse to follow any URL whose
host is notgraph.facebook.comor whose scheme is nothttps.
From page 2 onward the access token lives inside the cursor URL
itself, so a tampered response (broken TLS pinning, proxy mis-route)
could otherwise exfiltrate it. - Token redaction in
RuntimeError. Scrub the access token out
of the wrapped exception message and break the exception chain with
raise ... from None, sohttpx.HTTPStatusError(whose__str__
embeds the full request URL) cannot leak the token into operator
logs or UI error surfaces on a mid-walk failure.
No public surface change — list_meta_ad_accounts(access_token) -> list[dict[str, Any]] is unchanged. Operators see the fix
immediately after upgrading to 0.9.26 the next time they run
mureo configure.
Security Fixes
- Token redaction: access token scrubbed from exception traces; host pinning prevents following non-https://graph.facebook.com paging URLs.
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 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.
Related context
Related tools
Beta — feedback welcome: [email protected]