Các lượt nộp
    Danh sách bài
    Trang chủ
    Báo lỗi

    solution

    Đề bài: [An toàn thông tin] Tính điểm CVSS v3.1 Base Score

    CVSS (Common Vulnerability Scoring System) v3.1 là hệ thống chấm điểm mức độ nghiêm trọng của lỗ hổng bảo mật, được dùng rộng rãi trong phân tích lỗ hổng (CVE). Hãy cài đặt công thức tính Base Score theo đúng đặc tả chính thức của FIRST.org, dựa trên 8 chỉ số (metric):

    • AV (Attack Vector): N=0.85, A=0.62, L=0.55, P=0.2N=0.85,\ A=0.62,\ L=0.55,\ P=0.2N=0.85, A=0.62, L=0.55, P=0.2
    • AC (Attack Complexity): L=0.77, H=0.44L=0.77,\ H=0.44L=0.77, H=0.44
    • PR (Privileges Required), phụ thuộc S: nếu S=US=US=U thì N=0.85, L=0.62, H=0.27N=0.85,\ L=0.62,\ H=0.27N=0.85, L=0.62, H=0.27; nếu S=CS=CS=C thì N=0.85, L=0.68, H=0.5N=0.85,\ L=0.68,\ H=0.5N=0.85, L=0.68, H=0.5
    • UI (User Interaction): N=0.85, R=0.62N=0.85,\ R=0.62N=0.85, R=0.62
    • S (Scope): UUU (Unchanged) hoặc CCC (Changed)
    • C, I, A (Confidentiality/Integrity/Availability Impact): H=0.56, L=0.22, N=0H=0.56,\ L=0.22,\ N=0H=0.56, L=0.22, N=0

    Công thức:

    ISS=1−(1−C)(1−I)(1−A)ISS = 1 - (1-C)(1-I)(1-A)ISS=1−(1−C)(1−I)(1−A)

    Nếu S=US=US=U: Impact=6.42×ISS\text{Impact} = 6.42 \times ISSImpact=6.42×ISS. Nếu S=CS=CS=C: Impact=7.52×(ISS−0.029)−3.25×(ISS−0.02)15\text{Impact} = 7.52 \times (ISS-0.029) - 3.25 \times (ISS-0.02)^{15}Impact=7.52×(ISS−0.029)−3.25×(ISS−0.02)15.

    Exploitability=8.22×AV×AC×PR×UI\text{Exploitability} = 8.22 \times AV \times AC \times PR \times UIExploitability=8.22×AV×AC×PR×UI

    Nếu Impact≤0\text{Impact} \le 0Impact≤0: BaseScore=0\text{BaseScore} = 0BaseScore=0. Nếu S=US=US=U: BaseScore=Roundup(min⁡(Impact+Exploitability, 10))\text{BaseScore} = \text{Roundup}(\min(\text{Impact}+\text{Exploitability},\ 10))BaseScore=Roundup(min(Impact+Exploitability, 10)). Nếu S=CS=CS=C: BaseScore=Roundup(min⁡(1.08×(Impact+Exploitability), 10))\text{BaseScore} = \text{Roundup}(\min(1.08 \times (\text{Impact}+\text{Exploitability}),\ 10))BaseScore=Roundup(min(1.08×(Impact+Exploitability), 10)).

    Trong đó hàm Roundup(x) làm tròn lên tới 1 chữ số thập phân theo đúng thuật toán FIRST.org (tránh sai số dấu phẩy động):

    def roundup(x):
        int_input = round(x * 100000)
        if int_input % 10000 == 0:
            return int_input / 100000.0
        else:
            return (int_input // 10000 + 1) / 10.0
    

    Ví dụ: AV:N AC:L PR:N UI:N S:U C:H I:H A:H (lỗ hổng RCE không cần xác thực) cho Base Score =9.8= 9.8=9.8.

    • Định dạng đầu vào:

      Một dòng gồm 8 ký hiệu cách nhau bởi khoảng trắng, theo đúng thứ tự AV AC PR UI S C I A (mỗi giá trị là một chữ cái viết hoa hợp lệ của chỉ số tương ứng).

    • Định dạng đầu ra:

      In ra Base Score với đúng 1 chữ số thập phân.

      Ví dụ: input N L N N U H H H → output 9.8.

    Ví dụ:

    Đầu vào:

    N L N N U H H N

    Đầu ra:

    9.1
    

    Đầu vào:

    N L N N U H H H

    Đầu ra:

    9.8
    

    Đang tải editor...