Repository navigation
feat: clarify and bound Telegram capability approvals - #89
Merged
Merged
Conversation
Require public authority descriptions, clarify capability-level approval scope, and bound prompt admission. Cover request binding, capacity and rate recovery, and ungated routes during approval-worker failure. Update operator/security docs and patch dependencies required by the advisory gate. Refs #1; live Telegram and deployed-host verification remain pending.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Telegram approval prompts now include a required operator-written authority description and explicitly cover one use of a configured capability. Admit at most 10 prompts per rolling minute, retaining the existing 32-pending limit and fail-closed behavior.
Motivation and scope
Advance #1's lightweight KeePass-backed Allow once / Deny flow. Validate descriptions, test concurrent-request binding and capacity/rate failures, and prove that an unavailable approval worker leaves ungated routes working. Apply the patches required by the current advisory gate: rustls 0.23.46, ctutils 0.4.4, rustls-webpki 0.103.16, Tokio 1.53.3, and webpki-root-certs 1.0.10. The rustls and Tokio patches overlap #84 and #86; reconcile those PRs after this change reaches main.
Issue #1 remains open: real Telegram delivery and deployed HTTPS/network isolation have not been verified. Session grants, reusable rules, and semantic resource/request-body approval are outside this change.
The vertical workload fixture also refreshes its Alpine CA package pin to
20261020-r0; the previous pinned package is no longer available in the configured repository. The container check verifies this fixture build.Security impact
Documentation
Verification
mise run check(sequential, lower priority; bounded Rust workers)mise run e2e(connected two-password KDBX/admin/Telegram-worker/proxy/API flow and isolated Chrome virtual-passkey UI)git diff --checkHERMES_SOURCEis absent.Risk and rollback
approval_descriptionsentry (nonblank printable ASCII, at most 240 bytes). Missing or invalid entries reject configuration. Approval is capability-level; it does not review individual resources or request bodies. A workload can exhaust the per-process prompt budget and temporarily deny gated requests; restart resets the in-memory budget.This PR targets protected
main. Deployment is separate; issue #1 remains open for live verification.