Telegram/Discord: honor outbound mediaMaxMb uploads#38065
Conversation
🔒 Aisle Security AnalysisWe found 1 potential security issue(s) in this PR:
1. 🔵 Discord outbound media cap bypass via non-finite mediaMaxMb (Infinity) leading to unbounded downloads
Description
Vulnerable code: const mediaMaxBytes =
typeof accountInfo.config.mediaMaxMb === "number"
? accountInfo.config.mediaMaxMb * 1024 * 1024
: 8 * 1024 * 1024;Enforcement that becomes ineffective with
RecommendationValidate and clamp media caps to finite safe bounds before converting to bytes, and/or enforce this at config schema level. Schema hardening (recommended): // example: require finite, positive, and a sane upper bound
mediaMaxMb: z.number().finite().positive().max(500).optional();Runtime hardening (defense-in-depth): const mb = accountInfo.config.mediaMaxMb;
const mediaMaxBytes =
Number.isFinite(mb) && mb > 0
? Math.min(mb, 500) * 1024 * 1024
: 8 * 1024 * 1024;Also consider validating inside
Analyzed PR: #38065 at commit Last updated on: 2026-03-06T16:42:07Z |
Greptile SummaryThis PR fixes outbound media upload caps for both Telegram and Discord: Telegram's
Confidence Score: 4/5
|
* main: Mattermost: harden interaction callback binding (openclaw#38057) WhatsApp: honor outbound mediaMaxMb (openclaw#38097) openai-image-gen: validate --background and --style options (openclaw#36762) Docs: align BlueBubbles media cap wording Telegram/Discord: honor outbound mediaMaxMb uploads (openclaw#38065) CI: run changed-scope on main pushes Skills/nano-banana-pro: clarify MEDIA token comment (openclaw#38063) nano-banana-pro: respect explicit --resolution when editing images (openclaw#36880) CI: drop unused install-smoke bootstrap fix(nano-banana-pro): remove space after MEDIA: token in generate_image.py (openclaw#18706) docs: context engine docs(config): list the context engine plugin slot docs(plugins): add context-engine manifest kind example docs(plugins): document context engine slots and registration docs(protocol): document slash-delimited schema lookup plugin ids docs(tools): document slash-delimited config schema lookup paths fix(session): tighten direct-session webchat routing matching (openclaw#37867) feature(context): extend plugin system to support custom context management (openclaw#22201) Gateway: allow slash-delimited schema lookup paths
* Telegram: default media cap to 100MB * Telegram: honor outbound mediaMaxMb * Discord: add shared media upload cap * Discord: pass mediaMaxMb to outbound sends * Telegram: cover outbound media cap sends * Discord: cover media upload cap config * Docs: update Telegram media cap guide * Docs: update Telegram config reference * Changelog: note media upload cap fix * Docs: note Discord upload cap behavior
* Telegram: default media cap to 100MB * Telegram: honor outbound mediaMaxMb * Discord: add shared media upload cap * Discord: pass mediaMaxMb to outbound sends * Telegram: cover outbound media cap sends * Discord: cover media upload cap config * Docs: update Telegram media cap guide * Docs: update Telegram config reference * Changelog: note media upload cap fix * Docs: note Discord upload cap behavior
* Telegram: default media cap to 100MB * Telegram: honor outbound mediaMaxMb * Discord: add shared media upload cap * Discord: pass mediaMaxMb to outbound sends * Telegram: cover outbound media cap sends * Discord: cover media upload cap config * Docs: update Telegram media cap guide * Docs: update Telegram config reference * Changelog: note media upload cap fix * Docs: note Discord upload cap behavior
* Telegram: default media cap to 100MB * Telegram: honor outbound mediaMaxMb * Discord: add shared media upload cap * Discord: pass mediaMaxMb to outbound sends * Telegram: cover outbound media cap sends * Discord: cover media upload cap config * Docs: update Telegram media cap guide * Docs: update Telegram config reference * Changelog: note media upload cap fix * Docs: note Discord upload cap behavior
* Telegram: default media cap to 100MB * Telegram: honor outbound mediaMaxMb * Discord: add shared media upload cap * Discord: pass mediaMaxMb to outbound sends * Telegram: cover outbound media cap sends * Discord: cover media upload cap config * Docs: update Telegram media cap guide * Docs: update Telegram config reference * Changelog: note media upload cap fix * Docs: note Discord upload cap behavior
* Telegram: default media cap to 100MB * Telegram: honor outbound mediaMaxMb * Discord: add shared media upload cap * Discord: pass mediaMaxMb to outbound sends * Telegram: cover outbound media cap sends * Discord: cover media upload cap config * Docs: update Telegram media cap guide * Docs: update Telegram config reference * Changelog: note media upload cap fix * Docs: note Discord upload cap behavior (cherry picked from commit 9c1786b)
* Telegram: default media cap to 100MB * Telegram: honor outbound mediaMaxMb * Discord: add shared media upload cap * Discord: pass mediaMaxMb to outbound sends * Telegram: cover outbound media cap sends * Discord: cover media upload cap config * Docs: update Telegram media cap guide * Docs: update Telegram config reference * Changelog: note media upload cap fix * Docs: note Discord upload cap behavior (cherry picked from commit 9c1786b)
Summary
channels.telegram.mediaMaxMb, so some uploads still fell back to MIME-based limits from the shared media pipeline, including16MBaudio/video caps.channels.telegram.mediaMaxMbwith a default of100MB; Discord outbound uploads now also honorchannels.discord.mediaMaxMb; docs, tests, and changelog were updated.Change Type (select all)
Scope (select all touched areas)
Linked Issue/PR
None.
User-visible / Behavior Changes
channels.telegram.mediaMaxMbnow applies to outbound Telegram uploads, not just inbound media handling.100MBfor media cap when unset.channels.discord.mediaMaxMbnow applies consistently to outbound Discord uploads too.Security Impact (required)
Yes/No): NoYes/No): NoYes/No): NoYes/No): NoYes/No): NoYes, explain risk + mitigation:Repro + Verification
Environment
channels.telegram.mediaMaxMb,channels.discord.mediaMaxMbSteps
loadWebMediacap used for upload.Expected
channels.telegram.mediaMaxMb, defaulting to100MBwhen unset.channels.discord.mediaMaxMb, defaulting to8MBwhen unset.Actual
16MBfor some media kinds.channels.discord.mediaMaxMband fall back to shared defaults.Evidence
Passing verification:
Human Verification (required)
What you personally verified (not just CI), and how:
Compatibility / Migration
Yes/No): YesYes/No): NoYes/No): NoFailure Recovery (if this breaks)
channels.telegram.mediaMaxMbor revert this branch.src/telegram/send.ts,src/telegram/bot.ts,src/discord/send.shared.ts,src/discord/send.outbound.tsRisks and Mitigations
100MBcould allow larger local/remote media reads than before when operators relied on the implicit fallback.channels.telegram.mediaMaxMbremains configurable and now applies consistently to both inbound and outbound paths.AI-assisted: yes.
Testing: fully tested for the targeted unit coverage above.