iTerm2 công bố bản cập nhật bảo mật nghiêm trọng
(iterm2.com)- iTerm2 3.5.11 là bản phát hành được build vào ngày 2/1/2025; khuyến nghị cập nhật ngay do có bản vá bảo mật nghiêm trọng liên quan đến tích hợp SSH
- Phạm vi ảnh hưởng gồm người dùng các phiên bản 3.5.6~3.5.10 có dùng tính năng tích hợp SSH và tất cả phiên bản beta sau 3.5.6
- Khi lỗi xảy ra, dữ liệu nhập và xuất sẽ được ghi vào /tmp/framer.txt trên host từ xa, và người dùng khác trên cùng host từ xa có thể đọc được tệp này
- Điều kiện xảy ra là sử dụng
it2sshhoặc trong profile, Command là"SSH"và"SSH Integration"được chọn; đồng thời trong đường dẫn tìm kiếm mặc định của host từ xa phải có Python 3.7 trở lên - Người dùng cần nâng cấp lên 3.5.11, sau đó xóa
/tmp/framer.txttrên các host từ xa bị ảnh hưởng
Phạm vi ảnh hưởng và điều kiện phát sinh
- iTerm2 3.5.11 là bản phát hành có chứa bản vá bảo mật nghiêm trọng và được khuyến nghị cập nhật ngay
- Các phiên bản có thể bị ảnh hưởng là những phiên bản sau khi sử dụng tính năng tích hợp SSH
- 3.5.6
- 3.5.7
- 3.5.8
- 3.5.9
- 3.5.10
- Tất cả phiên bản beta sau 3.5.6
- Lỗi khiến tính năng tích hợp SSH ghi dữ liệu nhập và xuất vào
/tmp/framer.txttrên host từ xa- Tệp này có thể bị người dùng khác trên host từ xa đọc được
- Vấn đề xảy ra khi tất cả các điều kiện sau đều đúng
- Sử dụng lệnh
it2ssh - Hoặc trong
Settings > Profiles > General, menu bật lên Command được đặt là"SSH", và trong hộp thoại cài đặt SSH,"SSH Integration"được chọn- Các thiết lập
"Login Shell","Command","Custom Command"không nằm trong điều kiện này
- Các thiết lập
- Trên đường dẫn tìm kiếm mặc định của host từ xa có cài Python 3.7 trở lên
- Sử dụng lệnh
Cập nhật và xác minh
- Người dùng cần nâng cấp ngay lên iTerm2 3.5.11
- Trên các host từ xa bị ảnh hưởng, cần xóa tệp
/tmp/framer.txt - Mã ghi tệp log trong tích hợp SSH đã bị xóa và dự kiến sẽ không được phát hành công khai trở lại
- Giá trị SHA-256 của tệp zip như sau
655e32b4a9466104f1b0d8847e852515bc332bdf434801762e01b9625caa43e2
- Có thể dùng
https://keybase.io/verifyđể xác minh tệp zip
2 bình luận
Thật bất ngờ khi kiểm tra mới thấy phiên bản của mình là 3.4.3. Gần đây tôi cũng ít dùng terminal nên chẳng để ý gì, vì vậy việc cập nhật cũng không được thực hiện thường xuyên.
Ý kiến trên Hacker News
Trông giống một trường hợp gỡ lỗi bằng print() lọt vào production
https://github.com/gnachman/iTerm2/commit/63ec2bb0b95078a97a...
https://github.com/gnachman/iTerm2/blame/5db0f74bf647f6d53ea...
Commit tắt chế độ verbose là commit này, ngay trước khi toàn bộ log framer bị xóa: https://github.com/gnachman/iTerm2/commit/014ba7ec40fc790f65...
Commit bật chế độ VERBOSE là ở đây: https://github.com/gnachman/iTerm2/commit/5db0f74bf647f6d53e...
Có lẽ trong lúc triển khai hoặc gỡ lỗi, họ đã đổi thành
VERBOSE=1rồi quên đổi lạiVERBOSE=0trước khi commitconsole.infoBản thân việc gỡ lỗi bằng print là ổn và có lúc cần dùng, nhưng nên có cơ chế bảo vệ để không vô tình bỏ sót nó. Đây là một lỗi rất dễ mắc
Việc do lỗi trong tính năng
SSH integrationmà input và output bị ghi vào file/tmp/framer.txttrên host từ xa, và file đó có thể bị người dùng khác trên host từ xa đọc được, là khá nghiêm trọngNhững file như vậy cũng có thể còn sót lại trên các máy mà trước đây bạn từng SSH vào nhưng nay không còn quyền truy cập
it2ssh, hoặc trong Settings > Profiles > General, menu bật lên Command được đặt là"SSH"và"SSH Integration"được tích chọn."Login Shell","Command","Custom Command"không thuộc trường hợp nàyTuy nhiên, nếu bạn thuộc kiểu người dùng
sshlàm lệnh terminal mặc định thay vìbashhayzsh, rất có khả năng bạn cũng đang dùng nhiều tính năng khác thường trong các ứng dụng khác, nên cần chú ý không chỉ iTerm mà cả các bề mặt tấn công khácTôi đã dùng iTerm2 rất tốt cho công việc và cá nhân trong thời gian dài, và sẽ tiếp tục dùng cũng như dự định sẽ quyên góp lại như trước đây
Mỗi khi thấy câu kiểu “tôi vô cùng hối tiếc về sai lầm này và sẽ thực hiện các biện pháp để chuyện như vậy không xảy ra nữa”, tôi luôn hơi thở dài
Điều cốt lõi là biện pháp nào, nhưng tôi cũng không chắc phải làm gì để chuyện này không lặp lại. Có thể tạo một công cụ tự động chạy thử mọi tính năng, bắt các system call để kiểm tra xem có mở hay ghi file không, nhưng với ứng dụng GUI thì có vẻ quá khó đến mức có lẽ chẳng ai thử. Những biện pháp nhẹ hơn thì khó khiến tôi tin là chuyện này sẽ không xảy ra nữa
Thực tế thì có vẻ khó để lập trình viên làm tốt hơn thế nhiều, và nếu vậy thì đổ hết trách nhiệm lên một người là không công bằng
Tuy nhiên, tôi không nghĩ việc viết ngắn có nghĩa là họ không hiểu mức độ nghiêm trọng của sai lầm. Dù vậy, tôi vẫn kỳ vọng sau này sẽ có một bài blog chuyên sâu xử lý các chi tiết hậu kỳ kiểu này
Không xin lỗi thì còn tệ hơn, không nói sẽ thực hiện biện pháp ngăn tái diễn cũng tệ hơn. Nếu ngay lúc này đã chuẩn bị sẵn mọi biện pháp thì lại kỳ lạ. Trước hết phải A) sửa lỗi, B) phát hành bản sửa, C) thông báo về lỗi và bản sửa, rồi D) làm postmortem; nếu trộn tất cả lại với nhau thì trông như một cách tiếp cận quy trình lộn xộn
Nếu tuyên bố có thể ngăn mọi bug hay mọi lần ghi file ngoài ý muốn thì cũng kỳ lạ. Chứng minh rằng chương trình tuyệt đối không bao giờ ghi file là điều bất khả thi
Điểm khởi đầu tốt là xóa logging SSH như thực tế họ đã làm, rồi điều tra cách tự động xác minh việc truy cập file. Phát triển trên macOS có nhiều công cụ đi trước rất xa so với công cụ chung của hệ sinh thái, nên có thể có những cách như tài liệu kỹ thuật từ thập niên 1990 cho phép chỉ định
NSArraycác đường dẫn được phép truy cập, hoặc tích hợp dtrace có sẵn trong Instruments. Chạy những thứ đó trong CI và đảm bảo test coverage thì gần như là điều tốt nhất có thể làmCó vẻ điểm tranh luận là liệu có đọc “sẽ thực hiện các biện pháp để chuyện như vậy không xảy ra nữa” thành “sẽ thực hiện biện pháp cho đến khi có thể bảo đảm tuyệt đối 100% mãi mãi không bao giờ xảy ra nữa” hay không. Nói với những người trẻ và dễ bị ảnh hưởng: bài blog này rất tốt, và gần như không còn gì để làm tốt hơn ở đây
Biện pháp có thể làm là lấy chuyện này làm bài học để cẩn thận hơn khi đi vào đường dẫn đó
console.log, và tôi cũng nghĩ mình sẽ chọn chính xác cách tiếp cận đóNgăn không cho trạng thái không hợp lệ tồn tại là một nguyên tắc khá hữu ích
Có lẽ phần lớn là sở thích cá nhân, nhưng vào năm 2025 liệu có lý do nào thật sự thuyết phục để dùng iTerm2 thay cho Terminal mặc định của macOS không?
Tôi được khuyên dùng rất nhiều, nhưng vẫn khá thận trọng vì lo về các vấn đề bảo mật và quyền riêng tư như lỗi SSH lần này
Một điểm nữa là nếu lỡ đóng nhầm tab hoặc cửa sổ, chỉ cần nhấn ⌘z trong vài giây thì cửa sổ sẽ hiện lại như thể chưa từng bị đóng
Và độ tương phản màu tối thiểu cũng rất tốt. Khi theme màu của terminal và theme màu của chương trình đang chạy kết hợp tệ đến mức không đọc được, iTerm có thể phát hiện và tự động ghi đè bằng màu có độ tương phản cao hơn
Tuy nhiên đó chỉ là các tính năng cốt lõi đối với tôi. iTerm là một con quái vật cồng kềnh với hàng nghìn tính năng, giống Word. Không phải ai cũng cần tất cả, nhưng cũng không có sự đồng thuận về việc tính năng nào là cần thiết
Tôi cũng tìm
terminaltrong nhiều ghi chú phát hành macOS nhưng không thấy gì. Có ai biết thông tin này được công bố ở đâu không? Hay là không được công bố?[1] https://developer.apple.com/documentation/macos-release-note...
[2] https://support.apple.com/en-us/120283
[3] https://support.apple.com/en-in/109035
[4] https://support.apple.com/en-us/106337
Tôi muốn khi SSH vào máy công ty thì đổi sang màu xanh dương, còn SSH vào máy ở nhà thì đổi sang màu tím. Tôi đã thử làm với terminal mặc định, nhưng có vấn đề gây nhầm lẫn tùy theo phiên kết thúc như thế nào, và mọi người khuyên rằng iTerm2 giải quyết được chuyện này. Ít nhất trong trường hợp của tôi thì đúng là đã giải quyết được
Tôi cũng nghe nhiều người nói https://ghostty.org/ tốt, nhưng chưa kịp kiểm tra
Nói thêm là tôi đã đọc nhầm câu hỏi thành “có lựa chọn thay thế nào”
Với tôi, chỉ riêng việc có thể dùng một chế độ toàn màn hình khác với toàn màn hình native của macOS cũng đã đáng giá. Dù có lẽ trên đời chỉ có khoảng bảy người coi điều này là quan trọng
Tôi rất đồng cảm với lập trình viên đang phát triển iTerm với số tiền tương đối ít. Anh ấy đã nhận nhiều chỉ trích hơn mức cần thiết vì tích hợp AI rồi
Đồng thời hiện giờ tôi rất lo không biết mình có nên tiếp tục dùng iTerm hay không
Khi truy cập môi trường HPC, có thể tôi chỉ có quyền truy cập trong thời gian ngắn, phải tự dọn dữ liệu sau khi dùng, và kỳ vọng sẽ không có rò rỉ dữ liệu. Nếu trong một năm qua tôi dùng tích hợp SSH của iTerm khi xử lý dữ liệu nghiên cứu cá nhân thì đã rất rắc rối. Có lẽ tôi đã phải gửi một email ngượng ngùng cho quản trị viên nhờ kiểm tra xem có log không, có phải của tôi không, rồi sau đó phải công khai rằng dữ liệu đã bị rò rỉ
Tôi cũng dùng một số tính năng nâng cao, nhưng giờ tự hỏi liệu có nên dùng gì vượt quá chức năng cơ bản nữa không. Nếu vậy thì có lẽ tôi nên dùng terminal khác. Tôi vẫn chưa tìm được terminal đa nền tảng nào, kể cả Ghostty, có cảm giác native trên MacOS như iTerm
Nó giống như bỏ cả chiếc xe chỉ vì lốp bị thủng một lần. Xét các ưu điểm và tính năng đang có, iTerm có thể vẫn là lựa chọn tốt nhất
Nếu cá nhân phải tự xác minh bảo mật của toàn bộ hệ thống và mọi phần mềm mình dùng, thì tổ chức đó không có bảo mật
Một quản trị viên hệ thống có năng lực và hiểu biết về bảo mật có thể dễ dàng cấu hình để các tệp được tạo khi truy cập qua SSH không mặc định có quyền cho mọi người đọc. Họ cũng có thể đặt các cơ chế khóa khác để cách ly hoàn toàn tệp người dùng, và thậm chí vô hiệu hóa hẳn các thư mục có thể ghi toàn cục như
/tmp/Nếu ai đó trách bạn vì đã dùng phần mềm có lỗ hổng bảo mật, bạn nên hỏi ngược lại tại sao hệ thống của họ lại dễ bị tổn thương về bảo mật như vậy
Vài năm trước tôi đã báo cáo vấn đề iTerm2 làm rò rỉ lịch sử tìm kiếm nhạy cảm vào tệp cấu hình, và vấn đề đó được sửa nhanh chóng
Nhưng đến giờ vẫn có thể tìm thấy những người vô tình làm rò rỉ lịch sử tìm kiếm trong các kho dotfiles công khai
[1]: https://gitlab.com/gnachman/iterm2/-/issues/8491
[2]: https://github.com/search?q=NoSyncSearchHistory+path%3A*.pli...
Đề xuất “đơn giản là đừng dùng iTerm2” thì hơi khó hiểu
Vấn đề kiểu này có thể xảy ra ở bất kỳ dự án nào, và đổi công cụ cũng không mang lại sự bảo vệ có ý nghĩa. Ngược lại, sau những sự cố như thế này, thực hành bảo mật thường còn được siết chặt hơn. Nó giống câu chuyện đùa cũ về việc có sa thải kỹ sư mắc lỗi hay không, khi người quản lý đáp: “Sao lại sa thải? Người đó vừa học được một bài học không thể quên mà”
Nhìn vào lịch sử của iTerm2, có vẻ không thường xuyên có các vấn đề bảo mật nghiêm trọng, và cũng không có vẻ sẽ lặp lại cùng sai lầm. Nếu lặp lại thì khi đó đánh giá lại cũng chưa muộn
Ứng dụng Terminal của macOS đơn giản hơn và ít cập nhật hơn, nên có thể trông như rủi ro thấp hơn. Nhưng vì là mã nguồn đóng nên không thể kiểm toán, và bản thân điều đó cũng có rủi ro. Rốt cuộc công cụ nào cũng có đánh đổi, và nên chọn dựa trên sự cân bằng giữa tính năng cần thiết và rủi ro tiềm ẩn
Nhiều người xem cả hai điều này là niềm tin hợp lý. Đây là một góc nhìn tinh tế hơn nhiều so với câu “dự án nào cũng có thể có bug”. Cách nhìn trắng đen như vậy không giúp ích nhiều cho việc đánh giá rủi ro
iTerm2 ngày càng quá phức tạp và cồng kềnh, và có vẻ cũng có quá nhiều vấn đề bảo mật
Đã lâu rồi tôi không tìm terminal emulator mới trên macOS, nhưng có vẻ giờ là lúc nên làm vậy
GNU Screen cũng có vẻ đã chững lại, nên có lẽ cũng phải làm việc đã trì hoãn là chuyển sang tmux
Cá nhân tôi không cảm thấy iTerm2 thuộc bên nào trong hai mô tả đó
Tôi vẫn chưa thấy terminal nào khác cung cấp mức hỗ trợ tmux tương đương
Terminal còn thiếu gì đến mức dùng ứng dụng khác sẽ cải thiện việc sử dụng hằng ngày?
Zellij là terminal multiplexer viết bằng Rust nên đáng để xem qua. Đặc biệt điểm có thể dễ dàng khám phá các key binding là rất hay. Nó gần với dạng TUI mà tôi từng mong muốn
Cái này chỉ áp dụng cho phần tích hợp SSH, chứ không phải trường hợp chỉ chạy
"ssh"trong iTerm đúng không?Trên các host tôi kết nối bằng ssh thông thường, tôi không tìm thấy file
/tmp/framer.txtĐiều kiện sau nhiều khả năng cũng đúng với các bản phân phối doanh nghiệp nói chung. Ví dụ RHEL 9 cài sẵn Python 3.9 theo mặc định