docs(acp): document resumeSessionId for session resume#42280
docs(acp): document resumeSessionId for session resume#42280onutc merged 2 commits intoopenclaw:mainfrom
Conversation
Greptile SummaryThis is a docs-only PR that adds the Key observations:
Confidence Score: 4/5
Last reviewed commit: 8932dab |
🔒 Aisle Security AnalysisWe found 1 potential security issue(s) in this PR:
1. 🟠 Broken access control/IDOR: ACP session resumption via resumeSessionId without authorization binding
DescriptionThe ACP spawn tool accepts a caller-supplied There is no authorization check that the supplied
Additionally, ACP "agent session id" values are rendered into thread intro/details messages, increasing the chance that these IDs leak to other participants and effectively become bearer tokens for resumption:
Vulnerable code (accepting and forwarding const resumeSessionId = readStringParam(params, "resumeSessionId");
...
const result = await spawnAcpDirect({
...
resumeSessionId,
...
});Sink in the ACPX runtime (resume without any auth binding): const resumeSessionId = asTrimmedString(input.resumeSessionId);
const ensureSubcommand = resumeSessionId
? ["sessions", "new", "--name", sessionName, "--resume-session", resumeSessionId]
: ["sessions", "ensure", "--name", sessionName];Example leakage surface (session identifier rendered to user-visible text): if (agentSessionId) {
lines.push(`agent session id: ${agentSessionId}`);
}RecommendationBind resumption to an authenticated/authorized principal; do not treat Concrete options:
Illustrative enforcement sketch: // Pseudocode inside spawnAcpDirect or acpManager.initializeSession wrapper
if (params.resumeSessionId) {
const owner = await resumeRegistry.lookupOwner(params.resumeSessionId);
if (!owner || owner.accountId !== ctx.agentAccountId) {
return { status: "forbidden", error: "Not authorized to resume this session." };
}
}Analyzed PR: #42280 at commit Last updated on: 2026-03-10T16:17:43Z |
|
Merged without landpr because it's a simple doc change |
* docs(acp): document resumeSessionId for session resume * docs: clarify ACP resumeSessionId thread/mode behavior (openclaw#42280) (thanks @pejmanjohn) --------- Co-authored-by: Onur <[email protected]>
* docs(acp): document resumeSessionId for session resume * docs: clarify ACP resumeSessionId thread/mode behavior (openclaw#42280) (thanks @pejmanjohn) --------- Co-authored-by: Onur <[email protected]>
* docs(acp): document resumeSessionId for session resume * docs: clarify ACP resumeSessionId thread/mode behavior (openclaw#42280) (thanks @pejmanjohn) --------- Co-authored-by: Onur <[email protected]>
* docs(acp): document resumeSessionId for session resume * docs: clarify ACP resumeSessionId thread/mode behavior (openclaw#42280) (thanks @pejmanjohn) --------- Co-authored-by: Onur <[email protected]>
* docs(acp): document resumeSessionId for session resume * docs: clarify ACP resumeSessionId thread/mode behavior (openclaw#42280) (thanks @pejmanjohn) --------- Co-authored-by: Onur <[email protected]>
* docs(acp): document resumeSessionId for session resume * docs: clarify ACP resumeSessionId thread/mode behavior (openclaw#42280) (thanks @pejmanjohn) --------- Co-authored-by: Onur <[email protected]>
* docs(acp): document resumeSessionId for session resume * docs: clarify ACP resumeSessionId thread/mode behavior (openclaw#42280) (thanks @pejmanjohn) --------- Co-authored-by: Onur <[email protected]>
* docs(acp): document resumeSessionId for session resume * docs: clarify ACP resumeSessionId thread/mode behavior (openclaw#42280) (thanks @pejmanjohn) --------- Co-authored-by: Onur <[email protected]>
* docs(acp): document resumeSessionId for session resume * docs: clarify ACP resumeSessionId thread/mode behavior (openclaw#42280) (thanks @pejmanjohn) --------- Co-authored-by: Onur <[email protected]>
Summary
resumeSessionIdparameter (landed in feat(acp): add resumeSessionId to sessions_spawn for ACP session resume #41847) has no documentation, so users may not discover it.resumeSessionIdto thesessions_spawninterface details list and a new "Resume an existing session" subsection with example, use cases, and notes.sessions_spawnparameter addition.Change Type (select all)
Scope (select all touched areas)
Linked Issue/PR
User-visible / Behavior Changes
None — docs only.
Security Impact (required)
Repro + Verification
Environment
Steps
resumeSessionIdis not documented.Expected
Actual
Evidence
Diff is 26 lines of markdown — visual review in the PR files tab.
Human Verification (required)
Review Conversations
Compatibility / Migration
Failure Recovery (if this breaks)
Risks and Mitigations
None — docs-only change.
🤖 AI-assisted (Ada drafted the docs section, Pej reviewed and iterated on content before opening)