Bỏ qua để vào nội dung chính
Aider chạy lệnh shell không cần xác nhận khi stdin đóng

Aider chạy lệnh shell không cần xác nhận khi stdin đóng

Bởi Lucas Fischer
09 thg 11, 20263 phút đọc

Lỗi trong confirm_ask() khiến Aider tới v0.86.2 coi stdin đóng là "yes". Mọi lần chạy non-interactive đều mất bước xác nhận lệnh shell do model đề xuất.

Nếu bạn chạy Aider trong CI, trong script, hoặc bất kỳ chỗ nào không phải terminal tương tác, hãy kiểm tra hôm nay chứ đừng đợi bản vá. Một lỗi vừa được báo cáo cho thấy bước xác nhận trước khi chạy lệnh shell có thể bị bỏ qua hoàn toàn — không cần cờ -y, không cần ai gõ gì cả.

Lỗi nằm ở đâu

Theo GitHub issue được nộp ngày 2026-11-06, nhắm vào aider-chat tới phiên bản v0.86.2: hàm confirm_ask() trong aider/io.py bắt EOFError — lỗi phát sinh khi stdin bị đóng, bị redirect từ input rỗng, hoặc session đã kết thúc — và xử lý nó như thể người dùng đã chấp nhận đáp án mặc định của prompt, tức là "y".

Điều này xảy ra ngay cả khi caller truyền explicit_yes_required=True, đúng cái cờ mà cổng kiểm soát lệnh shell của Aider đặt ra để bắt buộc phải có câu trả lời thật. Và handle_shell_commands() trong aider/coders/base_coder.py — hàm đứng giữa lệnh do model đề xuất và shell của bạn — không bao giờ ghi đè mặc định đó thành "n".

PoC tái hiện lỗi

Người báo cáo trỏ Aider tới một local server tương thích OpenAI, server này luôn trả về một block bash chạy touch /tmp/aider-poc-marker.

  • Pipe vào các câu trả lời n rõ ràng: lệnh bị chặn đúng như thiết kế — cơ chế xác nhận hoạt động bình thường.
  • Chạy đúng lệnh đó nhưng với stdin đóng: Aider in ra [Yes], thực thi touch /tmp/aider-poc-marker && echo ran, rồi exit 0 — không một ký tự nào được gõ vào.

Cũng theo nguồn, chính đường mặc-định-thành-yes này còn chi phối các prompt khác của Aider: sửa file nằm ngoài phiên chat, và tạo file mới.

Điều nguồn tin nói rõ là chưa có

Đây không phải báo cáo về một vụ khai thác thực tế. Chưa ai chứng minh được trường hợp một file bị đầu độc hay một trang web được fetch về đã khiến model đề xuất lệnh phá hoại qua đường này trong môi trường production. Nguồn mô tả đây là lỗ hổng đã được chứng minh ở chính cơ chế xác nhận, không phải một vụ xâm nhập đã xác nhận.

PR vá lỗi #5957 đã mở nhưng chưa được merge, và tại thời điểm bài gốc đăng, issue chưa có xác nhận từ maintainer. Tác giả chấm mức độ nghiêm trọng 8/10 (cao): phạm vi rộng vì mọi lần chạy non-interactive đều bị ảnh hưởng, khắc phục được hoàn toàn khi có bản vá, chưa thành khai thác thực tế, và tác động trực tiếp còn hạn chế nếu thiếu mắt xích thứ hai.

Vì sao vẫn phải xử lý ngay

Chuỗi khai thác cần thêm một thành phần mà Aider không kiểm soát được: một thứ gì đó khiến model đề xuất lệnh nguy hiểm ngay từ đầu — file repo bị dựng sẵn, trang web bị scrape về, hay README của một dependency đã bị chiếm. Nhưng lỗi này gỡ mất đúng cái bước lẽ ra phải chặn tình huống đó lại.

Việc cần làm: rà lại mọi chỗ gọi Aider ngoài terminal tương tác — job CI, script tự động, lệnh có input được pipe vào — và xác định xem chúng có đang chạy mà không đặt --yes-always hay không. Trong lúc PR #5957 chưa merge, hãy coi mọi lần chạy non-interactive là đang chạy không có cổng xác nhận.

Không spam, hủy đăng ký bất kỳ lúc nào.

Bài viết liên quan