Đây hoàn toàn không phải là một rủi ro bảo mật, bởi vì bạn luôn chỉ có thể đặt các biến môi trường cho môi trường hiện tại của mình (ví dụ: phiên Bash hiện tại) và, bằng cách sử dụng export
lệnh, các môi trường con của nó (các kịch bản bạn khởi chạy, các chuỗi con, v.v.). Không thể leo thang một biến môi trường được tạo hoặc sửa đổi vào môi trường cha. Điều này bao gồm rằng người dùng thường xuyên không thể thực hiện các thay đổi trên toàn hệ thống.
Vì vậy, môi trường duy nhất sẽ bị ảnh hưởng nếu bạn chạy export LD_LIBRARY_PATH=...
là lớp vỏ hiện tại của bạn và bất kỳ lớp con nào của nó bạn có thể sinh ra sau này. Giả sử bạn thay đổi đường dẫn tra cứu để bao gồm các thư viện bị nhiễm ngay từ đầu, nghĩa là có mức độ ưu tiên cao nhất. Sau đó, bạn chạy một tệp thực thi tải một trong các lib bị nhiễm mà không hề biết. Chuyện gì xảy ra bây giờ?
Bạn có mã độc (từ thư viện bị nhiễm) chạy dưới tài khoản người dùng của riêng bạn với các đặc quyền không phải quản trị viên thông thường. Điều này nghe có vẻ tệ, nhưng thực ra ... vậy thì sao? Nó chạy với các đặc quyền người dùng thông thường, điều đó một lần nữa có nghĩa là nó không thể ảnh hưởng đến toàn bộ hệ thống. Nhân tiện, trực tiếp chạy một tệp thực thi có cùng mã độc sẽ dễ dàng hơn nhiều so với sửa đổi đường dẫn tra cứu thư viện và chờ một tệp thực thi bình thường tải nó.
Kết luận: Một người dùng thông thường chỉ có thể sửa đổi đường dẫn tra cứu thư viện của riêng họ, điều đó có nghĩa là họ cũng chỉ có thể tự tải các thư viện đó dưới tài khoản người dùng thông thường của họ với các đặc quyền không phải toàn hệ thống thông thường. Điều đó nói rằng, không có gì khác biệt cho dù họ buộc tải một thư viện bị nhiễm hoặc trực tiếp chạy một tệp thực thi bị nhiễm. Bạn hoàn toàn không thu được gì nếu biến môi trường đó không thể bị người dùng ghi đè.
PS: Ngoài ra còn có các tệp thực thi có cờ setuid hoặc setgid , có nghĩa là chúng sẽ không chạy với tư cách là người dùng / nhóm của người điều hành chúng, mà là của người sở hữu chúng. Ví dụ, sudo
tệp thực thi được sở hữu bởi root và có bộ cờ setuid , có nghĩa là nó luôn chạy dưới dạng root khi được thực thi. Vì lý do bảo mật, $LD_LIBRARY_PATH
biến bị bỏ qua bởi các tệp thực thi với một trong các cờ setuid / setgid được đặt để đảm bảo rằng người dùng thông thường không thể thực thi chạy với các đặc quyền gốc để tải các thư viện tùy ý.
(Cảm ơn @Rinzwind đã chỉ ra điều này!)