Tại sao chroot (2) không có sẵn cho người dùng không có đặc quyền?


7

Tại sao chroot(2)không có sẵn cho người dùng không có đặc quyền?

Tôi không hiểu câu trả lời hiện có trên Internet. Ví dụ: cái này https://lists.freebsd.org/pipermail/freebsd-security/2003-April/000123.html .

Sẽ sudothực sự hoạt động nếu /etc/sudoers/etckhông được sở hữu bởi root? Một người dùng không có đặc quyền không thể tạo các nhị phân setuid thuộc sở hữu gốc trong chroot, phải không?

Chính xác làm thế nào một người dùng không có đặc quyền có thể phá hủy môi trường chroot?

Tôi chỉ có thể nghĩ về một cái gì đó như thế

ln /mnt/backup/XYZ/etc/sudoers $CHROOT/etc/sudoers
ln /usr/bin/sudo $CHROOT/usr/bin/sudo

trong đó XYZbiểu thị một số trường hợp sao lưu nơi quản trị viên thực sự làm hỏng và cho phép người dùng của tôi một cái gì đó nguy hiểm. Nhưng điều này thật đặc biệt. Có cách nào đơn giản hơn để khai thác chroot(2)nếu nó có sẵn cho người dùng không có đặc quyền?

Câu trả lời:


4

Một người dùng bình thường không thể tạo nhị phân setuid, nhưng không có gì ngăn anh ta tạo liên kết cứng đến nhị phân setuid hiện có. Vì vậy, nếu anh ta có quyền ghi vào một thư mục trên cùng một hệ thống tập tin /usr/bin, anh ta có thể đặt tù trong thư mục này, tạo một liên kết cứng đến suhoặc sudotrong đó, và đặt một tùy chỉnh /etc/passwd/etc/sudoersvào tù.

Có lẽ điều đó sẽ không hiệu quả sudo, vì nó có thể kiểm tra cái đó /etc/sudoersthuộc sở hữu của root. Nhưng tôi sẽ đặt cược sukhông kiểm tra quyền sở hữu /etc/passwd.


Đây không còn là vấn đề trong Linux 3.6 trở lên, trong đó việc tạo liên kết cứng yêu cầu người dùng sở hữu tệp hiện có hoặc có quyền truy cập đọc / ghi vào nó. Xem lore.kernel.org/patchwork/patch/315952 .
Friedrich

4

Theo Brad Spengler trên https://forums.grsecurity.net/viewtopic.php?f=7&t=2522 , có một cách tầm thường để leo thang lên uid 0 bằng cách sử dụng CAP_SYS_CHROOT(khả năng sử dụng chroot(2):

CAP_SYS_CHROOT: chung chung đặc quyền thông qua cửa hậu của bạn


Đây không còn là vấn đề trong Linux 3.6 trở lên, trong đó việc tạo liên kết cứng yêu cầu người dùng sở hữu tệp hiện có hoặc có quyền truy cập đọc / ghi vào nó. Xem lore.kernel.org/patchwork/patch/315952 .
Friedrich

1

chroot(2)không thay đổi thư mục làm việc, vì vậy sau cuộc gọi .có thể ở bên ngoài cây gốc /. Sau đó, bạn có thể chạy bất kỳ nhị phân setuid nào từ bên trong chroot bằng cách sử dụng một đường dẫn tương đối. Có lẽ có nhiều cách để khai thác điều này. Ví dụ: bằng cách sửa đổi /etc/ld.so.preloadbên trong thư mục chroot của bạn, bạn có thể thực thi mã tùy ý với quyền root. Bạn có thể xem một ví dụ .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.