I2123 — Volající mimo loopback čte a nemění nic, co nemůže ověřit
Odmítnout každou schopnost, která něco mění, na požadavek z adresy, která není loopback, pokud vstupem schopnosti není podepsaná zpráva, kterou její handler ověřuje, na trasách HTTP i na MCP přes HTTP.
HOTOVO vlna 0 · p0 · profil implementation · bezpečné souběžně
Cíl
Odmítnout každou schopnost, která něco mění, na požadavek z adresy, která není loopback, pokud vstupem schopnosti není podepsaná zpráva, kterou její handler ověřuje, na trasách HTTP i na MCP přes HTTP.
Proč
Dne 2026-10-09 hub na 8791 a dva servery primárního checkoutu naslouchaly na každém rozhraní vlastníkova stroje a jedinou ochranou požadavku měnícího stav byla kontrola Origin, kterou program projde tím, že žádný neposílá. Libovolný host na LAN nebo tailnetu mohl přesunout záznam plánu, spustit libovolnou schopnost přes executions.start nebo odeslat nárok mesh, který uzel podepsal svým vlastním důvěryhodným klíčem a replikoval do každého runtime.
Aktuální stav
Vzdálený požadavek je připuštěn každou routou, jejíž kontrolou Origin prohlížeče projde; varování při bindu říká, že vzdálený hostitel může jen číst.
Cílový stav
ExecutionPolicy::admits_remote o tom rozhodne jednou z deklarovaného efektu a deklarovaného podepsaného vstupu; router i endpoint MCP odmítnou s forbidden/403 na každý požadavek; mesh.link.hello, mesh.link.sync a mesh.register zůstávají dosažitelné, protože ověřují svůj vstup.
Rozsah
- apps/majordomus-cli/src/capability/builtin/executions.rs
- apps/majordomus-cli/src/capability/builtin/mesh.rs
- apps/majordomus-cli/src/capability/builtin/mod.rs
- apps/majordomus-cli/src/capability/handler.rs
- apps/majordomus-cli/src/capability/model.rs
- apps/majordomus-cli/src/capability/registry.rs
- apps/majordomus-cli/src/http
- apps/majordomus-cli/src/mcp
- apps/majordomus-cli/src/execution/engine.rs
- apps/majordomus-cli/tests/remote_callers.rs
- test/cases/1086_a_remote_caller_cannot_write.sh
- docs/MCP.md
- docs/MESH.md
Závislosti
Žádné. Tento úkol je kořenem grafu.
Co na tom čeká
Kritéria přijetí
- Každá HTTP routa schopnosti, která nepřipouští vzdáleného volajícího, odpoví 403 forbidden na požadavek z ne-loopbackové adresy, ještě než se spustí její handler
- Vzdálená zpráva MCP volající nástroj, který něco mění, je odmítnuta s kódem chyby forbidden, a další zpráva téže relace z loopbacku odmítnuta není
- Skutečný server navázaný na 0.0.0.0 odmítne plan/transition, executions/start, mesh/claims, mesh/handovers/consume a peers/announce z adresy LAN tohoto stroje a stále odpoví na čtení
- Tři podepsané schopnosti mesh dosáhnou svých handlerů ze vzdálené adresy
- executions.start deklaruje repository_mutation, takže se lokálnímu klientovi řekne, že může zapisovat, dříve než přes ni spustí zapisovatele
Validace
- cargo test --test remote_callers
- MAJORDOMUS_BIN=<branch build> bash test/run.sh 1086_a_remote_caller_cannot_write
Požadované důkazy
- remote_callers_tests
- case_1022_red_on_0_18_0_green_on_branch
Důkazy
| pokrývá | typ | command | výsledek | u commitu |
|---|---|---|---|---|
| remote_callers_tests | ci | cargo test --locked --manifest-path apps/majordomus-cli/Cargo.toml --test remote_callers | test result: ok. 9 passed; 0 failed (every_route_that_changes_something_is_refused_to_another_host, an_mcp_session_is_judged_by_where_each_message_comes_from, a_signed_link_message_from_another_host_reaches_its_handler, the_entry_that_can_start_a_writer_is_announced_as_one, a_remote_caller_still_reads, ...); master validate run 38635619021, job rust (3) 116098148455, on c0e3585dc8 = origin/master | c0e3585 |
| case_1022_red_on_0_18_0_green_on_branch | test | MAJORDOMUS_BIN=<v0.18.0 aarch64-apple-darwin libexec/majordomus-cli | master c0e3585dc8 build> bash test/run.sh 1086_a_remote_caller_cannot_write (případ 1022 přečíslován na 1086 v 94ca56fe3f) | red on released v0.18.0 (SHA256SUMS verified): POST /api/v1/plan/transition from 192.168.100.96 answered 400 invalid_input, not 403 forbidden - the handler ran for a remote caller; green on master c0e3585dc8 (delivering commit 8d6e0c76e7): tests: 1 passed, 0 failed, 0 skipped. Run 2026-10-15 ~07:5xZ on this Mac; also ok in master validate 38635619021 suite-shard (3) job 116098148472 | c0e3585 |
Časová osa
- zahájeno
- 2026-10-15T07:50:49Z
- ověřeno
- —
- dokončeno
- 2026-10-15T07:51:01Z
Tato tři pole, důkazy výše a stav závislostí jsou vše, z čeho se stav skládá. Neexistuje žádné pole stavu, které by s nimi mohlo být v rozporu.
Kanonický záznam: .ai/repo/project/issues/I2123.yaml. Zpětně ho přečtete pomocí majordomus plan show I2123.