Tôi đã hack VietDesigner.net và Kenhsinhvien.vn như thế nào?
hacking
17
XSS
8
CSRF
4
White

Juno_okyo viết ngày 28/08/2016

Hành trình truy tìm lỗ hổng bảo mật

Trước hết, tớ xem xét đặc điểm chung của cả hai trang web này:

  • Đây đều là 2 diễn đàn lớn (mục tiêu càng lớn, càng nhiều người dùng thì càng tỉ lệ thuận với sự nguy hiểm của một lỗi bảo mật được phát hiện).
  • Cùng sử dụng nền tảng Xenforo.
  • Cùng sử dụng một add-on giống nhau để tạo trình chuyển hướng liên kết.

Trong 3 đặc điểm này thì điều thứ 3 chính là mấu chốt:

Tại sao tớ biết rằng 2 trang cùng dùng một add-on? Ngoài việc dựa theo cấu trúc liên kết, thì tớ xem mã nguồn trang chuyển hướng của cả 2 và cùng một thấy từ khóa quan trọng sau:

Tìm từ khóa đó trên Google:

hack-vietdesignernet-kenhsinhvienvn-xss-csrf

Như vậy có thể đoán được 2 diễn đàn kia đang sử dụng add-on tạo trình chuyển hướng tên là "GoodForNothing Url Anonymizer" (sau này đã đổi tên thành GoodForNothing Link Proxy).

Sau khi tìm được mã nguồn của add-on này, tớ khám phá ra dữ liệu (tức URL cần chuyển hướng) được xử lý tại đường dẫn library\GFNCoders\UrlRedirector\ControllerPublic\Redirect.php:

Tham số GET (?url=XXX) được lấy tại dòng 7 và thay thế vào template trong dòng 24. Method filterSingle() không có trong class này nên dựa theo dòng 2 thì tớ có thể đoán được method này được kế thừa từ class XenForo_ControllerPublic_Abstract của XenForo.

Sử dụng công cụ chuyên dụng (FileSeek Pro) để quét thì tìm thấy method này được tạo ra từ library\XenForo\Input.php dòng 137.

Trong method filterSingle() này, dữ liệu sẽ tiếp tục được chuyển qua cho _doClean(). Trong _doClean(), nó lại được chuyển tiếp qua cho cleanString() tại dòng 231.

"Khoan đã, dòng 231 chẳng phải đang nằm trong câu lệnh rẽ nhánh switch sao? Tại sao ông lại biết nó sẽ dính case đầu tiên?"

Chắc có bạn sẽ thắc mắc điều này. Hãy nhìn vào dòng 7 của tập tin Redirect.php trong hình phía trên (hình thứ 3 từ trên xuống). Bạn có thấy tham số thứ 2 là hằng XenForo_Input::STRING được truyền vào khi gọi filterSingle() không? Do đó tớ có thể dễ dàng biết chắc chắn dữ liệu sẽ đi vào case self::STRING.

Tiếp tục tìm tới cleanString() nào!

Dựa theo mô tả của method này, chúng ta có thể thấy nó sẽ "dọn dẹp các ký tự không hợp lệ ra khỏi một chuỗi, như null, nbsp, \r". Tớ đã tách riêng hàm này ra một file để chạy thử thì được kết quả như sau:

Hãy nhìn vào kết quả phía dưới, ký tự NULL đã bị gỡ bỏ khỏi URL nhưng các thẻ HTML thì không! Điều này dẫn tới việc tham số "?url" trong liên kết chuyển hướng có thể bị lợi dụng để chèn HTML/JS vào trong trang, dẫn tới việc tạo ra lỗ hổng XSS.

Vecter XSS:

Và khi áp dụng kịch bản tương tự như đối với SinhVienIT.Net, tớ phát hiện ra CSRF cũng khả thi. Tức là nếu ai đó chẳng may click vào liên kết chứa vecter XSS thì tớ có thể chiếm được Security Token để đăng bài, gửi tin nhắn, đổi mật khẩu, đổi email,... hay bất cứ hành động nào mà một người dùng có thể làm, và tương tự với các tài khoản admin (nếu họ sơ suất).

PoC (Proof of Concept)

XSS/CSRF trên KenhSinhVien.vn

XSS/CSRF trên VietDesigner.Net

Timeline

  • 2:17 PM - 19/07/2016: Tớ liên hệ với quản trị viên VietDesigner.net và thông báo có lỗ hổng bảo mật XSS/CSRF.
  • 2:23 PM - 19/07/2016: Quản trị viên VietDesigner.net cho biết đã nhận được báo cáo từ người khác trước đó gần 2, 3 tháng nhưng chưa có thời gian fix.
  • 2:25 PM - 19/07/2016: Tớ trả lời lại và cung cấp kịch bản tấn công để cho thấy mức độ nguy hiểm nếu có kẻ xấu khai thác. Đồng thời chủ động đề nghị hỗ trợ quản trị viên trong việc fix lỗi.
  • 2:29 PM - 19/07/2016: Tớ liên hệ với quản trị viên KenhSinhVien.vn và thông báo phát hiện ra lỗ hổng bảo mật.
  • 2:31 PM - 19/07/2016: Quản trị viên KSV trả lời lại. Tớ cung cấp hình ảnh PoC về lỗ hổng XSS/CSRF.
  • 2:47 PM - 19/07/2016: Quản trị viên KSV xác nhận lỗ hổng và fix ngay sau đó.
  • 9:45 AM - 22/07/2016: Quản trị viên VietDesigner gửi tin nhắn cho biết rằng lỗ hổng đã được khắc phục và đề nghị tớ kiểm tra lại.
  • 5:23 PM - 22/07/2016: Tớ đọc được tin nhắn và xác nhận lại rằng lỗ hổng đã được khắc phục.

Lỗ hổng trên KenhSinhVien.vn được tính vào bug bounty cùng đợt với các lỗ hổng mà tớ phát hiện bên Phimmoi.net.

Mặc dù tại thời điểm đăng bài viết này thì 2 diễn đàn trên đều đã được vá lỗ hổng. Tuy nhiên, không chỉ có 2 diễn đàn này sử dụng add-on này làm trình chuyển hướng. Nên chắc chắn vẫn còn rất nhiều các diễn đàn XenForo khác có thể bị khai thác. Nếu có thể, hãy chia sẻ bài viết này với quản trị viên mà bạn biết!

Cách khắc phục lỗ hổng

Hiện lỗ hổng bảo mật này đã được tác giả khắc phục trong phiên bản mới nhất 1.0.5, các bạn có thể cập nhật lên là xong. Hoặc tự vá bằng cách sửa lại tập tin Redirect.php từ dòng 9-13 thành:

$noUrl = (!$url || empty($url) || !filter_var($url, FILTER_VALIDATE_URL));

// Prevent XSS Attacks (by Juno_okyo)
$url = htmlentities(strip_tags($url), ENT_QUOTES, 'UTF-8');

Trước và sau khi patch:

Theo: Juno_okyo's Blog


:point_right: Theo dõi Juno_okyo trên Kipalog · Facebook · Twitter · Google+

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Juno_okyo

24 bài viết.
776 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
145 15
(Ảnh) Biểu thức chính quy (hay regex) là một công cụ mạnh mẽ mà mỗi nhà phát triển nên biết. Nó có thể khớp với một chuỗi các ký tự dựa trên các t...
Juno_okyo viết hơn 2 năm trước
145 15
White
77 15
(Ảnh) Trong bài viết này tôi sẽ chia sẻ 12 thủ thuật vô cùng hữu ích cho JavaScript. Những thủ thuật này sẽ giúp bạn giảm lượng code cũng như làm ...
Juno_okyo viết hơn 1 năm trước
77 15
White
54 6
Bạn thấy chán các trang web cũ? Muốn tìm một vài góc mới của Internet để giúp bạn tìm lại sự hứng thú? Tốt thôi, bạn đã gặp may đấy. Dù bạn đang tì...
Juno_okyo viết hơn 1 năm trước
54 6
Bài viết liên quan
White
23 4
Mỗi khi đăng những bài (Link) về một (Link) được phát hiện trên một trang web nào đó, tôi biết sẽ có những người nhếch mép cười khẩy vì lúc đó tron...
Juno_okyo viết gần 2 năm trước
23 4
White
11 2
Mở bài Chào các thành viên Kipalog :D Mình không biết viết văn, nên câu chữ lủng củng, mong mọi người hiểu được =)) Mục đích bài viết này là chi...
Nguyễn Văn Mạnh viết hơn 1 năm trước
11 2
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
24 bài viết.
776 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!