-
27/04/2017
-
30
-
76 bài viết
Phân tích lỗ hổng CVE-2021-41773 trong Apache HTTP Server
Tháng 10/2021, Apache công bố bản vá cho hai lỗ hổng nghiêm trọng đang bị khai thác trên thực tế. Các lỗ hổng này nằm trong nền tảng Apache HTTP Server được dùng khá phổ biến tại Việt Nam và trên thế giới.
Ở phần này mình chỉ trung vào phần phân tích CVE. Hãy cùng mình phân tích chi tiết về lỗ hổng này nhé.
Tổng Quan:
Apache HTTP Server 2.4.49 dễ bị khai thác bởi các lỗ hỗng Path traversal và RCE (thực thi mã từ xa) có mã định danh CVE-2021-41773. Khai thác lỗ hỗng này cho phép tin tặc xem được bất kỳ tệp tin đang tồn tại trên server, từ đó thực thi trực tiếp các lệnh tùy ý thông qua thư viện /bin/sh. Mặc dù đã có bản vá nhưng giải pháp mà Apache đưa ra lại chưa xử lý chưa triệt để lỗ hổng và tin tặc vẫn sử dụng cách thức tương tự để bypass dễ dàng.
Thông tin cơ bản CVE:
Phân tích lỗ hổng chi tiết
Nguyên nhân:
Từ code của các phiên bản thì ta thấy đoạn code chuẩn hóa url như sau:
Nguyên nhân dẫn đến lỗ hổng là nhà phát triển đã thêm một số thay đổi trong mã nguồn chuẩn hóa đường dẫn (loại bỏ các phần không mong muốn hoặc nguy hiểm trong URL) nhưng web server không thể phát hiện ra các ký tự được truyền qua URL dưới dạng "dot-dot-slash" (../). Chức năng chuẩn hóa đường dẫn trong ứng dụng chịu trách nhiệm giải mã các giá trị được mã hóa ở URL từ URI để ngăn chặn việc lợi dụng lỗ hỗng Path traversal. Chức năng này đã dễ dàng bị vượt qua khi kẻ tấn công mã hóa thành "%2e" ở dấu chấm thứ 2, từ đó kẻ tấn công có thể chuyển ../ thành .%2e/ để thực hiện việc tấn công.
Ngoài ra, thì Để khai thác thành công lỗ hổng này bên cạnh việc kiểm tra Path traversal thì Apache Http Server cần phải được cấu hình directory directive cho toàn bộ hệ thống là Require all grandted hoặc là nó không có trong file cấu hình.
Cấu hình tồn tại lỗ hổng:
Hoặc là:
Chú ý:
Theo cấu hình mắc định của toàn bộ file hệ thống, directory directive của Apache Http Server là “Require all denied”, thì sẽ không bị tấn công bởi lỗ hỗng này.
Tiếp đó, để có thể tấn công remote code execution thì module mod_cgi phải được bật trên cấu hình của web server. Từ đó kẻ tấn công có thể thêm để thực hiện việc thực thi mã từ xa thông qua lỗ hỗng Path traversal bằng cách gọi bất kỳ thư viện nào trên server với http POST request.
Để kích hoạt module mod_cgi: bạn cần config:
Chú ý:
Cũng như directory directive, mặc định thì module mod_cgi sẽ được tắt trong cấu hình ban đầu nên việc thực thi code là không thể.
Vậy thì Apache đã vá nó như thế nào nhỉ?
Ở đây bản vá trên version 2.4.50:
https://github.com/apache/httpd/commit/e150697086e70c552b2588f369f2d17815cb1782
Bản vá được public vào ngày 4/10 đã chỉnh sửa việc xác thực dấu chấm đầu tiên trong “dot-dot-slash" nhưng vẫn chưa đủ để ngăn chặn.
Vậy thì các kẻ tấn công đã vượt qua việc filter này như thế nào?
Bằng việc sử dụng kỹ thuật double encode url thì kẻ tấn công đã có thể vượt qua được việc filter. Cụ thể như sau:
⇒ ".%2e/" ←Double Encode/Decode→ %%32%65%%32%65/
⇒ Double Encoding: dot → %2e → %%32%65
Đến ngày 7/10 thì Apache chính thức phát hành bản vá triệt để nhất là thêm function ap_unescape_url_ex() để kiểm soát việc chuẩn hóa và giải mã URI. Hơn nữa là ngừng sử dùng cờ AP_NORMALIZE_DROP_PARAMETERS
https://github.com/apache/httpd/commit/48b5dfd6968cb076537b605d368d5fd889ebae86
Đến đây thì đã xong bài phân tích về CVE. Nhưng đừng quên là có bài demo nữa nhé!!! Hi vọng các bạn thích bài này. Bài tiếp theo của mình sẽ là thực hiện việc setup demo CVE này step by step từ việc triển khai cho đến khai thác.
Các bạn hãy chờ đọc tiếp nhé!!!
Ở phần này mình chỉ trung vào phần phân tích CVE. Hãy cùng mình phân tích chi tiết về lỗ hổng này nhé.
Tổng Quan:
Apache HTTP Server 2.4.49 dễ bị khai thác bởi các lỗ hỗng Path traversal và RCE (thực thi mã từ xa) có mã định danh CVE-2021-41773. Khai thác lỗ hỗng này cho phép tin tặc xem được bất kỳ tệp tin đang tồn tại trên server, từ đó thực thi trực tiếp các lệnh tùy ý thông qua thư viện /bin/sh. Mặc dù đã có bản vá nhưng giải pháp mà Apache đưa ra lại chưa xử lý chưa triệt để lỗ hổng và tin tặc vẫn sử dụng cách thức tương tự để bypass dễ dàng.
Thông tin cơ bản CVE:
Phân tích lỗ hổng chi tiết
Nguyên nhân:
Từ code của các phiên bản thì ta thấy đoạn code chuẩn hóa url như sau:
Nguyên nhân dẫn đến lỗ hổng là nhà phát triển đã thêm một số thay đổi trong mã nguồn chuẩn hóa đường dẫn (loại bỏ các phần không mong muốn hoặc nguy hiểm trong URL) nhưng web server không thể phát hiện ra các ký tự được truyền qua URL dưới dạng "dot-dot-slash" (../). Chức năng chuẩn hóa đường dẫn trong ứng dụng chịu trách nhiệm giải mã các giá trị được mã hóa ở URL từ URI để ngăn chặn việc lợi dụng lỗ hỗng Path traversal. Chức năng này đã dễ dàng bị vượt qua khi kẻ tấn công mã hóa thành "%2e" ở dấu chấm thứ 2, từ đó kẻ tấn công có thể chuyển ../ thành .%2e/ để thực hiện việc tấn công.
Ngoài ra, thì Để khai thác thành công lỗ hổng này bên cạnh việc kiểm tra Path traversal thì Apache Http Server cần phải được cấu hình directory directive cho toàn bộ hệ thống là Require all grandted hoặc là nó không có trong file cấu hình.
Cấu hình tồn tại lỗ hổng:
Hoặc là:
Chú ý:
Theo cấu hình mắc định của toàn bộ file hệ thống, directory directive của Apache Http Server là “Require all denied”, thì sẽ không bị tấn công bởi lỗ hỗng này.
Tiếp đó, để có thể tấn công remote code execution thì module mod_cgi phải được bật trên cấu hình của web server. Từ đó kẻ tấn công có thể thêm để thực hiện việc thực thi mã từ xa thông qua lỗ hỗng Path traversal bằng cách gọi bất kỳ thư viện nào trên server với http POST request.
Để kích hoạt module mod_cgi: bạn cần config:
Chú ý:
Cũng như directory directive, mặc định thì module mod_cgi sẽ được tắt trong cấu hình ban đầu nên việc thực thi code là không thể.
- Với những phân tích trên thì ta có thể thấy được sự ảnh hưởng rất rõ ở đây đó là: Apache ver 2.4.49/2.4.50 + Cấu hình sai directory directive:
⇒ đọc bất kì file nào tồn tại trên server.
- Apache ver 2.4.49/2.4.50 + Cấu hình sai directory directive + enable mod_cgi
⇒ Remote Code Execution (Thực thi mã từ xa)
Vậy thì Apache đã vá nó như thế nào nhỉ?
Ở đây bản vá trên version 2.4.50:
https://github.com/apache/httpd/commit/e150697086e70c552b2588f369f2d17815cb1782
Bản vá được public vào ngày 4/10 đã chỉnh sửa việc xác thực dấu chấm đầu tiên trong “dot-dot-slash" nhưng vẫn chưa đủ để ngăn chặn.
Vậy thì các kẻ tấn công đã vượt qua việc filter này như thế nào?
Bằng việc sử dụng kỹ thuật double encode url thì kẻ tấn công đã có thể vượt qua được việc filter. Cụ thể như sau:
⇒ ".%2e/" ←Double Encode/Decode→ %%32%65%%32%65/
⇒ Double Encoding: dot → %2e → %%32%65
- 2 → %32
- e → %65
- % → %
Đến ngày 7/10 thì Apache chính thức phát hành bản vá triệt để nhất là thêm function ap_unescape_url_ex() để kiểm soát việc chuẩn hóa và giải mã URI. Hơn nữa là ngừng sử dùng cờ AP_NORMALIZE_DROP_PARAMETERS
https://github.com/apache/httpd/commit/48b5dfd6968cb076537b605d368d5fd889ebae86
Đến đây thì đã xong bài phân tích về CVE. Nhưng đừng quên là có bài demo nữa nhé!!! Hi vọng các bạn thích bài này. Bài tiếp theo của mình sẽ là thực hiện việc setup demo CVE này step by step từ việc triển khai cho đến khai thác.
Các bạn hãy chờ đọc tiếp nhé!!!
Nguồn: My Pentest Team
Chỉnh sửa lần cuối: