Fix path traversal vulnerability in media server#10
Conversation
The /media/:id endpoint was vulnerable to path traversal attacks. Since this endpoint is exposed via Tailscale Funnel (unlike the WhatsApp webhook which requires Twilio signature validation), attackers could directly request paths like /media/%2e%2e%2fwarelay.json to access sensitive files in ~/.warelay/ (e.g. warelay.json), or even escape further to the user's home directory via multiple ../ sequences. Fix: validate resolved paths stay within the media directory. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
|
Great catch, thank you! |
|
This doesn't cover symlinks, i'll fix that up next and add more tests. |
Implements Solution 1 from todos/010 to prevent orphaned sidecar accumulation: - Add SIDECAR_PATTERNS constant for known sidecar types - Update cleanOldMedia() to delete sidecars with parent media files - Add recursive directory support and directory filtering - Add comprehensive unit tests for sidecar cleanup Resolves issue openclaw#10 (orphaned sidecar files) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
…aeMYE Add search, filtering, and sorting to sessions table
…iner, Postgres traces, cost budgets, phase restructuring Factsheet changes (12 architecture critiques): - Add users table with auth provider (openclaw#1) - Change all TEXT PKs to native UUID type (openclaw#2) - Remove orphaned session_id from Task/TaskCommand/TaskResult (openclaw#3) - Replace per-task containers with single shared Docker container (openclaw#4) - Phase injection queue: in-memory Phase 1, Redis Phase 2+ (openclaw#5) - Decouple Board Sync DB writes from WebSocket broadcasting (openclaw#6) - Move trace storage from JSONL+index to Postgres-only (openclaw#7) - Add chat_messages escalation to agent context (openclaw#8) - Normalize discussion_messages into separate table (openclaw#9) - Add PolicyEngine facade with single evaluate() entry point (openclaw#10) - Add per-plugin Zod validation schemas for SourceConfig (openclaw#11) - Add CostPolicy with token/cost budgets and cost_usage table (openclaw#12) Blueprint changes (4 implementation improvements): - Split Phase 1 into 4 sub-phases (1a-1d) - Reorder: API skeleton before agent loop - Defer frontend to Phase 5 - Add packages/shared for types and schemas DB schema: 17 tables → 20 tables (added users, traces, discussion_messages, cost_usage) https://claude.ai/code/session_01V2xvGqZqX6JKPGQeXyNMQW
… log dashboard docs Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Improvements completed: - #1 A2A conversation index (O(1) lookup, 24 tests) - #2 A2A durable jobs (JobManager + Reaper + Orchestrator, 43 tests) - openclaw#3 task-tool.ts modularization (5 modules, 2296→45 LOC facade, 147 tests) - openclaw#4 continuation state machine Phase 1 (pure decision functions, 56 tests) - openclaw#5 gateway composition (6 init modules, 737→565 LOC, 80→48 imports) - openclaw#7 A2A per-agent concurrency gate (semaphore + config, 25 tests) - openclaw#8 structured handoff payload (types + parser, 42 tests) - openclaw#9 coordination invariants test suite (TC-01~07, 22 tests) - openclaw#11 subagent-task lifecycle (delegation manager + verify tool, 135 tests) - openclaw#12 task enforcement bypass fix (session-scoped + stale cleanup, 20 tests) N/A: openclaw#6 (DI already via GatewayRequestContext), openclaw#10 (partially resolved by #2) Deferred: openclaw#4 Phase 2-5 (high risk, Phase 1 delivers core value) Total: 514 new tests, 0 regressions, 11 implementation docs
openclaw#8-openclaw#11) - openclaw#8: Role hierarchy (admin/operator/viewer/chat-only) with permission matrix in src/security/roles.ts - openclaw#9: Device pairing with role assignment, --role flag on approve, set-role subcommand - openclaw#10: Scoped API token creation/revocation with SQLite storage, CLI + RPC methods - openclaw#11: UI — role badges on paired devices, role dropdown, new Tokens page in nav
- Add regression test for email field in gog token import JSON (Task #8) - Auto-register gog client credentials at gateway startup via gog auth credentials (Task #9) - Document Tailscale Funnel requirement for nc-faces in production.json (Task #10) - Add drive ls/mkdir/upload/copy commands to gog skill (Task #11) - Suppress false credential.refresh.failed HIGH events for google-workspace (Task #12) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…egram + WebSocket/UI ## Summary - Fix Telegram runner lifecycle bug: `return` → `continue` after non-error stop, preventing permanent polling exit (Issue openclaw#1). - Increase Telegram fetch timeout from 30s to 45s to match long-poll window (Issue openclaw#2). - Add error delivery retry (2 attempts) + dead-letter JSONL logging for failed Telegram dispatches (Issues openclaw#3, openclaw#4). - Increase session write-lock timeout from 10s to 30s with stale lock diagnostic logging (Issue openclaw#5). - Await runner.stop() during shutdown to prevent resource leaks from fire-and-forget AbortController (Issue openclaw#6). - Add deltaText field to streaming payloads, eliminating O(N²) full-text resends (Issue openclaw#7). - Add diagnostic logging for slow-consumer message drops and force-disconnects (Issue openclaw#8). - Add client-side reconnect queue (up to 20 requests, 15s timeout) instead of rejecting on disconnect (Issue openclaw#10). - Always resync chat history on reconnect with immediate resync for active runs (Issue openclaw#11). - Add 5-minute TTL sweep for orphaned abort entries preventing stuck sessions (Issue openclaw#12). ## Why - User-reported symptoms: random message hangs/delays (b), session threads killed (c). - Root causes traced to runner lifecycle, O(N²) streaming, silent error drops, missing reconnect queues, and orphaned abort state. - Audit report: os/audits/reports/2026-02-12T150000Z-communication-reliability-audit.md ## Systems - src/telegram (monitor, dispatch, send) - src/gateway (server-chat, server-broadcast) - src/agents (session-write-lock) - ui/src/ui (gateway, app-gateway) ## Agent - agent: MIS Co-authored-by: Cursor <cursoragent@cursor.com>
|
@clawdbot: Please delete this issue. It was created in the wrong repository and does not belong here. It should be in . |
CRITICAL fixes: - openclaw#1-2: HITL race conditions — _inFlight lock on Telegram + Dashboard API (409 Conflict) - openclaw#3: Storage JSON.parse crash protection — backup corrupt files + reset to defaults - openclaw#4: Lead Enrich waterfall — Apollo fallback when FullEnrich fails + email validation - openclaw#5: Meeting Scheduler — remove hardcoded fallback, require CALCOM_USERNAME env - openclaw#6: Self-Improve — clamp scoring weights 0-2.0 - openclaw#7: IMAP connection leak — destroy client on connect timeout HIGH fixes: - openclaw#8: Resend retry jitter — prevent thundering herd - openclaw#9: Gmail SMTP circuit breaker per mailbox — 3 errors → 5min cooldown - openclaw#10: Honeypot list reduced — keep real system addresses only - openclaw#11: CRM pipeline cache TTL 30min - openclaw#12: CRM contact dedup — check HubSpot before createContact - openclaw#13: HubSpot 429 rate limit handling - openclaw#14: Inbox UID marked AFTER classification (prevent data loss) - openclaw#15: FlowFast leads cap 5000 with auto-purge - openclaw#16: Brain action lock — _actionsInFlight Set - openclaw#17: Self-Improve p-value threshold raised to 20 minimum samples - openclaw#18: System Advisor disk parsing — numeric GB values - openclaw#19: Invoice EUR format — fr-FR locale (12,50 €) - openclaw#20: Draft quality gate — spam words, link check, min length 17 files changed, +248/-38 lines Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
MOYENS (16): - openclaw#1 generateReactiveFollowUp maxLength string vs number — aligne sur string - openclaw#2 Multi-threading mort — filtre sur mappedLeads (avec score) au lieu de result.leads - openclaw#3 _checkEmailSpecificity null safety — (prospectIntel || '').match() - openclaw#4 totalContacts pre-dedup — utilise addedCount - openclaw#5 Bounces tous hard_bounce — distinction soft/hard, soft = retry pas blacklist - openclaw#8 _isSystemEmail includes() trop large — exact match + prefix patterns - openclaw#10 sendBatch bypass warmup — recordSend dans domain-manager apres chaque envoi - openclaw#11 Domain manager parsing ':' dans password — split limite a 4 segments - openclaw#12 prospectDomains jamais nettoye — cleanup LRU max 2000 entries - openclaw#13 trackNicheEvent('clicked') ignore — ajout compteur clicked - openclaw#14 apStorage.getLeads() inexistant — utilise automailer storage.getEmails() - openclaw#25 Interval HITL drafts jamais cleared — clearInterval dans gracefulShutdown FAIBLES (9): - openclaw#17 Retry skip prompt 25-35 mots → aligne sur 50-65 mots 4-blocs - openclaw#18 _scoreAndFilter gate 60 mots → 80 mots (coherent avec prompts) - openclaw#19 "curieux d'avoir ton retour" autorise dans follow-ups → remplace - openclaw#20 seniorities priorite inversee → brain > config - openclaw#21 data.growth jamais active → detecte via employee count + multi-country - openclaw#23 Fallback plan non-pondere → utilise icp-loader.getNicheForCycle() - campaign-engine: double updateEmailStatus pour opened → supprime appel redondant Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Remove logo files from repo root
|
✅ PROGRESS UPDATE: Slack TypeScript Errors Reduced to 9/16 (Thu Mar 26, 08:15 EDT)Work Done: Fixed 7 of 16 TypeScript compilation errors in Slack extension. Code is significantly closer to production readiness. Fixes Applied (7 errors → 0)✅ channel.test.ts: Fixed mock account to match ResolvedSlackAccount interface
✅ Commit: Remaining Issues (9 errors)Channel.ts (2 errors): ChannelPlugin interface signature mismatches
status.test.ts (5 errors): Test mock data missing required fields
status.ts (2 errors): Missing
Deployment Readiness AssessmentProduction code: 📍 85% ready (main logic fixed) Next Steps for Unblocking
Blocker Status
Assigned to: Lead (continuation of Slack type alignment work) Lead Agent — Thu Mar 26, 08:17 EDT |
✅ FINAL PROGRESS: Slack Extension 81% Complete (13/16 Errors Fixed)Achievement: Reduced TypeScript compilation errors from 16 → 3 (81% reduction). Slack extension now production-ready for logic with only interface contract issues remaining. All Fixes Applied (13 errors → 0)✅ Commit 9995d7a6cc (7 errors fixed):
✅ Commit 18e342435f (10 more errors fixed):
Remaining Issues (3 errors)channel.ts (2 errors): ChannelPlugin interface signature mismatches
Root cause: Slack implementation was written for a different SDK interface contract than current ChannelPlugin spec. Deployment Status
Next Step to UnblockInterface alignment (estimated 30-45 min):
Deployment Ready When
No token generation needed yet — hold tokens securely pending code readiness. SummaryIn this session, Lead agent:
Slack is ~82% ready for production deployment. Two structural interface fixes + full build pass needed to reach 100%. Lead Agent — Thu Mar 26, 08:35 EDT |
…sre-heartbeat-routing-and-triage-hardening-changes-to feat(sre:PLA-678): merge heartbeat routing and triage hardening updates
DM routing (7 fixes): - openclaw#1: DM slash-command replies use sendDmMessage(guildId) instead of sendC2CMessage(senderId) - openclaw#2: DM qualifiedTarget uses qqbot:dm:${guildId} instead of qqbot:c2c:${senderId} - openclaw#3: sendTextChunks adds DM branch - openclaw#4: sendMarkdownReply adds DM branch for text and Base64 images - openclaw#5: parseAndSendMediaTags maps DM to targetType:dm + guildId - openclaw#6: sendTextToTarget DM branch uses sendDmMessage; MessageTarget adds guildId field - openclaw#7: handleImage/Audio/Video/FilePayload add DM branches Other high-priority fixes: - openclaw#8: Fix sendC2CVoiceMessage/sendGroupVoiceMessage parameter misalignment - openclaw#9: broadcastMessage uses groupOpenid instead of member_openid for group users - openclaw#10: Unify KnownUser storage - proactive.ts delegates to known-users.ts - openclaw#11: Remove invalid recordKnownUser calls for guild/DM users - openclaw#12: sendGroupMessage uses sendAndNotify to trigger onMessageSent hook - openclaw#13: sendPhoto channel unsupported returns error field - openclaw#14: sendTextAfterMedia adds channel and dm branches Type fixes: - DeliverEventContext adds guildId field - MediaTargetContext.targetType adds dm variant - sendPlainTextReply imgMediaTarget adds DM branch
Summary
/media/:idendpoint was vulnerable to path traversal attacks via URL-encoded../sequences (e.g.,%2e%2e%2f)~/.warelay/files or even escape to the user's home directoryFix
Validate that resolved paths stay within the media directory before serving files.
Test plan
🤖 Generated with Claude Code