Cyclos 4.14.7 - Dom-based Cross-Site Scripting (CVE-2021-31673)

CVE-2021-31673

Date: 17/04/2021

Author: Tin Pham aka TF1T of VietSunshine Cyber Security Services

Vendor Homepage: https://www.cyclos.org/

Version: Cyclos 4.14.7 (and prior)

Description: A Dom-based Cross-site scripting (XSS) vulnerability at registration account in Cyclos 4 PRO.14.7 and before allows remote attackers to inject arbitrary web script or HTML via the groupId parameter.

Steps to reproduce: An attacker sends a draft URL [IP]/#users.users.public-registration!groupId=1%27%22%3E%3Cimg%20src=x%20onerror=alert(document.domain)%3E to victim. When a victim opens the URL, XSS will be triggered.

Thông tin bên lề về lỗ hổng

Cách đây một năm, trong khi tham gia một chương trình Bug bounty ở Whitehub, target mà chương trình mình tham gia sử dụng một Banking Software có tên là Cyclos. Sau khi xem sơ lược các chức năng chính, mình nhận thấy tại chức năng đăng ký tài khoản khi giá trị tham số groupId không tồn tại thì xuất hiện thông báo lỗi đính kèm giá trị groupId mà ta nhập vào.

Vì thông báo lỗi có đính kèm giá trị mà ta nhập vào, rất có thể vị trí này tồn tại lỗ hổng XSS. Kiểm tra bằng cách chèn payload: <img src=xxx onerror=alert(document.domain)> vào tham số groupId

Để tìm source và sink của các lỗ hổng Dom-based XSS, ta sẽ chèn debugger vào payload và debug trên trình duyệt Chrome, xem thanh Call Stack, ta tìm được source và sink như sau:

source: location.hash tại cyclos.gwt-0.js1

function DGc() {
    var a;
    a = $wnd.location.hash;
    if (a == null || a.length == 0) {
        return ''
    }
    return JGc(a.substr(1))
}

sink: innerHTML tại cyclos.gwt-0.js1

function Ie(b, a) {
    b.innerHTML = a || ''
}

Và sau 1 năm chờ đợi mình có đã CVE đầu tiên. Cảm ơn các bạn đã đọc bài viết.

Last updated