2 điểm bởi GN⁺ 2024-01-27 | 1 bình luận | Chia sẻ qua WhatsApp

Phát hiện XSS trên Chess.com

  • Trong lúc chơi cờ như một sở thích và nghịch ngợm với kỹ thuật, tôi đã phát hiện một lỗ hổng XSS trên Chess.com.
  • Chess.com là trang web cờ vua lớn nhất trên Internet với hơn 100 triệu thành viên.

Tổng quan

  • Đầu năm 2023, tôi bắt đầu hoạt động nhiều trên Chess.com.
  • Tôi rủ bạn bè đăng ký trang và dùng tính năng kết bạn để trở thành bạn ngay lập tức.
  • Tôi bắt đầu tự hỏi liệu có thể tự động thêm bạn theo cách tương tự sâu MySpace hay không.
  • Tôi tạo một tài khoản mới và kiểm tra tab Network trong công cụ dành cho nhà phát triển để tìm ra URL tự động thêm bạn.

Trung cuộc

  • Tôi thử XSS bằng trình soạn thảo văn bản phong phú TinyMCE.
  • Tôi dùng proxy Burp để chèn trực tiếp mã HTML vào phần mô tả 'About'.
  • Tôi kiểm tra cấu hình TinyMCE và tạo payload XSS bằng thuộc tính kiểu background-image.
  • Tôi thử nhiều ký hiệu khác nhau để tìm ra cách thực thi XSS.
  • Cuối cùng tôi phát triển được cách trích xuất cookie và các đối tượng JavaScript.

Tàn cuộc

  • Tôi cố gắng thực thi XSS hoàn chỉnh.
  • Tôi tìm ra một cách mới dùng thuộc tính srcset để có thể sử dụng cú pháp JS rộng hơn.
  • Tôi dùng mã hóa Base64 để thực thi trực tiếp payload XSS.
  • Trình soạn thảo TinyMCE được dùng trên toàn bộ trang nên mức độ ảnh hưởng rất lớn.

Phân tích

  • Nguyên nhân gốc của lỗ hổng là tính năng tải lại ảnh.
  • Có thể vượt qua bước kiểm tra lưu trữ ảnh bằng cách chèn tên miền của Chess.com.
  • Trình soạn thảo văn bản phong phú cho phép nhiều phần tử HTML nên rất thuận lợi để đạt được XSS.
  • TinyMCE đã ở phiên bản mới nhất, nhưng thiếu bước khử độc cho HTML đầu ra cuối cùng.
  • Chess.com cần thực hiện khử độc đối với HTML cuối cùng được hiển thị cho người dùng.

Ý kiến của GN⁺:

  1. Bài blog này mô tả rất thú vị quá trình phát hiện và báo cáo một lỗ hổng bảo mật có thể xảy ra trên một nền tảng trực tuyến quy mô lớn như Chess.com.
  2. Lỗ hổng XSS có thể là mối đe dọa nghiêm trọng đối với bảo mật website, và việc tìm ra cũng như khắc phục các lỗ hổng như vậy là rất quan trọng để bảo vệ quyền riêng tư của người dùng.
  3. Bài viết nhấn mạnh với các nhà phát triển phần mềm và chuyên gia bảo mật tầm quan trọng của việc nhận diện các lỗ hổng trong những thành phần ứng dụng web như trình soạn thảo văn bản phong phú và phòng tránh chúng.

1 bình luận

 
GN⁺ 2024-01-27
Các bình luận trên Hacker News
  • Tôi là OP. Cảm ơn mọi người rất nhiều vì những bình luận tích cực. Để nói thêm một chút về bối cảnh, tôi là học sinh 17 tuổi ở Anh đang chuẩn bị cho A-Levels, và vẫn đang cân nhắc nên vào đại học nào cũng như lựa chọn degree apprenticeship
    Bạn có thể xem hồ sơ GitHub của tôi tại đây -> https://github.com/Jayy001
    Tôi là một trong những thành viên cốt lõi của HashPals, đã tạo ra Search-That-Hash, và cũng là maintainer của kho mã nguồn mở phần mềm miễn phí cho máy tính bảng ReMarkable

    • Tôi từng làm degree apprenticeship ở một công ty FAANG và may mắn được chuyển sang vị trí chính thức tại đó. Tùy công ty mà khác nhau rất nhiều, nhưng nếu chỉ xét triển vọng việc làm trước mắt, tôi cho rằng chương trình học nghề ở một công ty có tên tuổi hữu ích hơn đại học rất nhiều, trừ Oxbridge
      Nếu muốn trao đổi thêm thì cứ liên hệ, email nằm trong phần mô tả hồ sơ của tôi
    • Chiếc ReMarkable của tôi chắc sẽ biết ơn bạn. Bạn đang làm tốt, cứ tiếp tục nhé
      Và nếu đi theo IT, bạn cũng nên học cả đàm phán hợp đồng và tài chính
    • Bạn mất bao lâu để thực hiện XSS thành công?
    • Tôi sẽ thử giới thiệu vào Meta. Bạn có thể gửi CV/email, v.v. tới tehlike gmail com được không?
  • Vào thời mà trải nghiệm Internet của tôi chỉ là lần nào cũng thua trên Chess.com với vai trò “thủ thư tình nguyện”, tôi từng chèn vào các ván Chess.com trực tiếp những ký tự escape vụng về, thẻ đóng, các chuỗi điều khiển phổ biến, thậm chí cả đối tượng OLE
    Eric, nhà sáng lập, lịch sự đề nghị tôi thực hiện một cuộc kiểm toán chính thức hơn, nhưng tôi từ chối vì không muốn lộ ra mình chỉ là một script kiddie 11 tuổi. Thay vào đó, tôi giải thích các biểu thức chính quy cần thiết để kiểm duyệt phòng chat, và cùng ông ấy xử lý vấn đề lớn hơn là làm sao phát hiện gian lận trong môi trường bất đồng bộ
    Sau khi suy nghĩ, tôi nói rằng cách khả thi duy nhất là so sánh mọi nước đi giá trị cao, quan trọng trong ván với nước đi tốt nhất đã biết của engine, rồi dùng suy luận thống kê để phân biệt người chơi giỏi với kẻ gian lận
    Tất nhiên, vào thời điểm đó đây là một cách làm phi thực tế đến mức nực cười, và kết luận cũng là như vậy. Dù thế, việc một đứa trẻ vừa qua tuổi tiểu học có thể thảo luận một chủ đề tinh tế như vậy với một webmaster thật sự vẫn là một ký ức Internet khá đẹp

    • Tại sao lại là “cách khả thi duy nhất”? Tôi có thể nghĩ ra nhiều cách để phát hiện gian lận
  • Đoạn “Tính năng này khiến tôi nhớ đến con worm MySpace khoảng năm 2005, mà khi đó tôi còn chưa ra đời!” làm tôi cảm thấy mình đang già đi từng ngày

    • Vợ cũ của tôi từng quản lý đội bảo mật MySpace khoảng từ 2006 đến 2008. Phần thật sự khốc liệt là cô ấy phải trực tiếp vào các diễn đàn hacker MySpace để xem công việc trong ngày diễn ra thế nào
      Việc họ cứ khăng khăng muốn cho người dùng chèn HTML vào trang đã gây ra vấn đề khổng lồ. Ngày nay có lẽ ta sẽ parse HTML đầu vào đúng cách rồi loại bỏ các thuộc tính và thẻ bị cấm, nhưng khi đó mọi thứ được xử lý bằng cơn điên regex
    • Suy nghĩ đầu tiên của tôi gần như là “thật vui khi thấy bọn trẻ ngày nay vẫn làm những việc như thế này”, nhưng khi tính lại tuổi thì tôi bị một cú sốc tinh thần
    • Khoan đã, người này chưa đến 20 tuổi à
  • Không biết có liên quan không, nhưng tôi từng tận mắt thấy và còn ghi hình việc trong một ván Chess.com, người khác đi nước của tôi thay tôi. Có lần một ván đang diễn ra hiện lên với tôi, và tôi có thể đi nước trong tình huống lẽ ra không được phép
    Nếu tìm trên Google sẽ thấy khá nhiều thread liên quan. Tôi không biết Chess.com đã sửa trong vài tháng gần đây chưa, nhưng khi tôi cố báo cáo thì họ không chịu lắng nghe
    Tất cả những ván này xảy ra khi tôi không đăng nhập vào trang. Khi đang đăng nhập thì tôi chưa từng gặp, nhưng cờ vua không tốt cho huyết áp nên tôi cũng không chơi thường xuyên

    • Tôi không hiểu lắm. “Người khác đi nước của tôi” nghĩa là họ thay thế nước đi của bạn trong ván bằng nước của họ? Hay là họ sao chép nước đi trong ván của bạn sang ván của họ? Hay là ý khác?
    • Làm sao bạn biết họ đang đi nước của bạn?
    • “Nước của tôi” là sao, chính xác nghĩa là gì?
  • Chỉ nhìn tiêu đề tôi tưởng nội dung sẽ sơ cấp hơn nhiều, nhưng thực tế tác giả đã tạo ra một exploit vượt qua nhiều lớp xác thực đầu vào bằng các cách lách rất khéo. Thậm chí còn thiết lập cả subdomain để trông giống domain gốc
    Tôi không ngờ cách này lại hiệu quả, và bản thân điều đó cũng thú vị. Nghĩ đến việc parse domain bằng regex phức tạp thế nào thì chuyện bỏ sót cũng có vẻ dễ xảy ra. Hoặc cũng có thể chỉ đơn giản là họ kiểm tra '...' bên trong một biến mà thôi
    Tác giả rất am hiểu lĩnh vực của mình. Thật đáng nể khi nghĩ họ đã đào sâu bao lâu để đạt được kỹ năng ở mức này. Có vẻ đây sẽ là một sự nghiệp khá thú vị

    • Theo tác giả nói thoáng qua trong bài thì họ sinh sau năm 2005, nên nếu tính cả việc còn rất trẻ thì càng ấn tượng hơn
    • Exploit đầu tiên tự động thêm khách truy cập hồ sơ làm bạn ít nhất cũng khá đơn giản, và tiêu đề cũng là một cách chơi chữ. Nhưng quá trình đi đến XSS hoàn chỉnh sau đó thì trở nên cực kỳ phức tạp
  • Bài viết hay đấy, OP. Chúc bạn tiếp tục tốt trên hành trình hacking. Nếu bạn chưa biết, khi dấu ngoặc trong payload như alert(1) bị lọc hoặc mã hóa, bạn có thể dùng backtick để thử alert\1``
    Nếu muốn nâng cấp kỹ năng JavaScript injection, cheat sheet XSS của Brute Logic và Javascript for Hackers của Gareth Heyes là những tài liệu tốt. Một số người xem nhẹ cross-site scripting, nhưng nó vẫn rất mạnh và phổ biến. Đặc biệt đúng như plugin-baby đã chỉ ra, nếu session cookie không có HttpOnly thì càng nghiêm trọng

  • Rất tuyệt. Tôi thích đọc các bài phân tích bug bounty, nhất là về XSS. Chúng luôn trông có vẻ dễ tìm, nhưng đó chỉ là thiên kiến xác nhận; thực tế hẳn là tôi không thấy được những lần thử nghiệm không thu được gì và thời gian đi vào ngõ cụt

    • Theo kinh nghiệm của tôi, thường là tình cờ phát hiện điều gì đó kỳ lạ rồi mới lần ra. Phần thật sự khó là biến khiếm khuyết đó thành thứ có thể khai thác được trong thực tế, và trong trường hợp này đối tượng là trình soạn thảo văn bản
  • Đoạn “Tính năng này khiến tôi nhớ đến con worm MySpace khoảng năm 2005, mà khi đó tôi còn chưa ra đời!” khiến tôi lập tức cảm thấy mình già đi

    • Đừng lo quá. Nó sẽ còn tệ hơn nữa
      Điều tôi muốn hỏi OP về vụ này là làm sao bạn biết đến nó. Có phải qua Darknet Diaries không, hay qua nguồn khác?
  • Tôi thấy thú vị ở đoạn gọi trình soạn thảo rich text là “chén thánh”. Chess.com là một website lớn, nhưng mỗi khi thấy những trình soạn thảo như vậy hoặc các tính năng quá màu mè trên những diễn đàn cũ kỹ, tôi lại tự hỏi liệu trang đó có đầy lỗ hổng không. Dù sao thì bài viết rất hay

  • Đoạn “Trong lúc báo cáo bug bounty đang được xem xét, khi tôi cố tái hiện lại thì các nhà phát triển đã thử triển khai biện pháp chặn và thông báo lỗi sau xuất hiện…” có vẻ khá xa với tinh thần của chương trình bug bounty