Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

:bug: eventing: unauthenticated PUT /transcript rewrites what an agent resumes from, and correlation ids are listable

Đang mở
#887 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 8 ngày

Chưa có ai nhận issue này.

Đánh giá

Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức phù hợp với người mới
42/100
Loại issue
Lỗi
Độ rõ ràng
Khá rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
python

Hướng nghiên cứu

Start in eventing/handlers.py and trace authentication for the transcript and group routes, then read eventrunner/transcript.py, eventrunner/runner.py, and store.py. Review the related paths in ghauth.py, skills/eventbridge/eventbridge-cli.py, main.py, and kafka_out.py, along with tests/test_ghauth.py; run the relevant tests and verify the exposed transcript, correlation-id, login, and signing behaviors are covered.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

kind/bug

Summary

Sign-in guards only the two routes that start work. POST /v0/agents and POST /v0/groups call
auth.resolve; every other route is open. Two consequences are worth separating from the general
"only starting work is authenticated" limit, because together they let an unauthenticated caller
rewrite what an agent resumes from.

Found while documenting the controls for rossoctl/rossoctl#2609. References are to eventing/ at
d9677ddd.

1. PUT /v0/agents/{id}/transcript needs no credential, and feeds claude --resume

The transcript is the session checkpoint EventRunner resumes from. On a cold pod a mode=continue
turn downloads it from EventBridge and passes it to claude --resume
(eventrunner/transcript.py:181-196, eventrunner/runner.py:238,256,301).

PUT is unauthenticated, so anyone who can name a conversation can replace the history the agent
continues with. Request signing does not help: it covers the prompt, not the resume state.

Observed against Handlers with sign-in fully configured (client id and approved list):

PUT  without credential -> 200 OK
POST /v0/agents without credential -> 401 Unauthorized
GET  without credential -> 200 OK  b'{"type":"user","message":{"role":"user","content":"forged history"}}\n'

2. Correlation ids are listable without signing in

GET /v0/groups returns the 100 most recent groups (store.py:273, no query parameter raises it —
handlers.py:206), and GET /v0/groups/{id}/status lists every member's correlation id. Both are
open. So "an attacker would have to guess the id" understates the exposure for any conversation that
belongs to a group.

Confirmed: all_groups() returns 100 when 105 groups exist.

Related

  • ghauth._post_form raises HTTPError on any GitHub 4xx (ghauth.py:57), so the friendly message
    at :74-80 is unreachable and device_flow_disabled surfaces as a traceback ending in
    HTTP Error 400: Bad Request. cmd_login catches only RuntimeError
    (skills/eventbridge/eventbridge-cli.py:514-518). tests/test_ghauth.py:265-267 patches
    _post_form, so the test never sees the status. Reproduced by patching urlopen to raise a 400.
  • Startup does not check that EB_SIGNING_KID is present in EB_VERIFY_KEYSET_PATH
    (__main__.py:68 checks only that it is set), so EventBridge can start and then flag its own group
    events. Combined with the fact that group events are signed only when EB_SIGNING_KEY_PATH gives a
    seed (kafka_out.py:102), a half-configured deployment fails closed on genuine traffic.

Impact

All of the above are documented as limits in rossoctl/rossoctl#2609, so the docs are accurate. The
transcript write is the one I would prioritise: it is an unauthenticated write that changes agent
behaviour, rather than only a read or a notification artefact.

Ngôn ngữ chính
Python
Star
11
Fork
42
Merge trung bình
4 ngày 4 giờ
Pull request đã merge (30 ngày)
39

Chuẩn bị môi trường

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của rossoctl/examples

Tất cả issue của rossoctl/examples

Issue tương tự

Thêm issue về Python

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.