Lỗi Linux SUDO cho phép chạy các lệnh dưới dạng root
Một lỗ hổng trong lệnh Linux sudo đã được phát hiện, có thể cho phép người dùng không có đặc quyền thực thi các lệnh dưới dạng root. Rất may, lỗ hổng này chỉ hoạt động trong những cấu hình không chuẩn và hầu hết các máy chủ Linux không bị ảnh hưởng.
Trước khi tìm hiểu về lỗ hổng, điều quan trọng là phải có một số thông tin cơ bản về cách hoạt động của lệnh sudo và cách nó được cấu hình.
Tìm hiểu về lệnh sudo
Khi thực thi các lệnh trên hệ điều hành Linux, người dùng không có đặc quyền có thể sử dụng lệnh sudo (super user do
) để thực thi lệnh dưới dạng root, miễn là họ đã được cấp phép hoặc biết mật khẩu của người dùng root.
Lệnh sudo cũng có thể được cấu hình để cho phép người dùng chạy các lệnh như một người dùng khác, bằng cách thêm những lệnh đặc biệt vào file cấu hình /etc/sudoers.
Ví dụ, các lệnh dưới đây cho phép người dùng “test” chạy các lệnh /usr/bin/vim và /usr/bin/id như bất kỳ người dùng nào ngoài root.
test ALL = (ALL, !root) /usr/bin/vim
test ALL = (ALL, !root) /usr/bin/id
Để user “test” thực thi một trong các lệnh trên, họ sẽ sử dụng lệnh sudo với tham số -u để chỉ định người dùng chạy lệnh. Ví dụ, lệnh sau sẽ khởi chạy VIM với tư cách là người dùng “bleeping-test”.
sudo -u bleeping-test vim
Khi tạo người dùng trong Linux, mỗi user được cung cấp một UID. Như được thấy dưới đây, người dùng “test” có UID là 1001 và “bleeping-test” có UID là 1002.
Người dùng có thể sử dụng các UID này thay vì tên user khi khởi chạy lệnh sudo. Ví dụ, lệnh bên dưới sẽ một lần nữa khởi chạy VIM dưới tư cách người dùng “bleeping-test” nhưng lần này bằng cách cung cấp UID của người dùng đó.
sudo -u#1002 vim
Lỗ hổng sudo
Nhà nghiên cứu bảo mật của Apple, Joe Vennix, đã phát hiện ra một lỗi cho phép người dùng khởi chạy lệnh sudo dưới quyền root bằng cách sử dụng UID -1 hoặc 4294967295 trong lệnh sudo.
Ví dụ, lệnh sau có thể sử dụng lỗi này để khởi chạy user /usr/bin/id dưới quyền root, mặc dù người dùng “test” đã bị từ chối thực hiện việc này trong file /etc/sudoers.
sudo -u#-1 id
Sử dụng lỗi này với lệnh /usr/bin/id để có quyền root được minh họa bên dưới.
Mặc dù lỗi này rất nghiêm trọng, nhưng điều quan trọng cần nhớ là nó chỉ có thể hoạt động nếu người dùng được cấp quyền truy cập vào lệnh thông qua file cấu hình sudoers. Nếu không (và hầu hết các bản phân phối Linux không làm như vậy theo mặc định), thì lỗi này sẽ không gây ra ảnh hưởng gì.
Tạo ra một cuộc tấn công
Để thực sự khai thác lỗ hổng này, người dùng cần phải có directive (chỉ thị) sudoer, được cấu hình cho một lệnh có thể khởi chạy các lệnh khác.
Trong ví dụ directive sudoers ở trên, ta có một lệnh như vậy: Lệnh VIM!
test ALL = (ALL, !root) /usr/bin/vim
Khi ở trong VIM, người dùng có thể khởi chạy một chương trình khác bằng cách sử dụng lệnh :!
. Ví dụ, nếu trong VIM, bạn có thể nhập !ls
để thực thi lệnh ls trong thư mục hiện tại.
Nếu sử dụng lệnh sudo -u#-1 vim
để khai thác lỗ hổng này, VIM sẽ được khởi chạy dưới dạng root. Sau đó, bạn có thể xác nhận điều này bằng cách thực thi lệnh !whoami
.
Bây giờ, VIM được khởi chạy dưới dạng root, bất kỳ lệnh nào được thực thi từ nó cũng được chạy dưới quyền root.
Điều này có thể dễ dàng được sử dụng để khởi chạy một shell root mà sau đó, có thể thực thi bất kỳ lệnh nào bạn muốn trên hệ thống bị xâm nhập. Cuộc tấn công này được minh họa trong hình dưới đây.
Mặc dù lỗi này rõ ràng là rất nghiêm trọng, nhưng nó chỉ có thể được sử dụng trong các cấu hình không chuẩn sẽ không ảnh hưởng đến đại đa số người dùng Linux.
Đối với những người sử dụng directive sudoers cho user, bạn nên nâng cấp lên sudo 1.8.28 trở lên càng sớm càng tốt.
Nguồn quantrimang.com