From 9f811f2ebf9c59d8184b84d414c19da6cbc72e39 Mon Sep 17 00:00:00 2001 From: 3isenHeim <26417172+3isenHeiM@users.noreply.github.com> Date: Fri, 2 Dec 2022 10:38:12 +0100 Subject: [PATCH 1/3] Updated gitignore --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index 859f705..284388b 100644 --- a/.gitignore +++ b/.gitignore @@ -9,8 +9,11 @@ *.fmt *.fot *.cb +*.hd +*.sty *.cb2 .*.lb +.*.ins ## Intermediate documents: *.dvi From e42c32eb46cb58920492cc98b86a7bf8e9dbf6b3 Mon Sep 17 00:00:00 2001 From: 3isenHeim <26417172+3isenHeiM@users.noreply.github.com> Date: Fri, 2 Dec 2022 10:57:30 +0100 Subject: [PATCH 2/3] Added support for full CVSS string --- cvss.dtx | 383 +++++++++++++++++++++++++++++-------------------------- cvss.ins | 196 ++++++++++++---------------- cvss.pdf | Bin 484458 -> 569546 bytes 3 files changed, 287 insertions(+), 292 deletions(-) diff --git a/cvss.dtx b/cvss.dtx index 522be90..fe37b47 100644 --- a/cvss.dtx +++ b/cvss.dtx @@ -77,7 +77,7 @@ and the derived files cvss.ins, % %<*package> \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{cvss}[2022/11/03 First Release] +\ProvidesPackage{cvss}[2022/12/02 v1.1 ] % %<*driver> \documentclass{l3doc} @@ -88,6 +88,7 @@ and the derived files cvss.ins, \setlength{\parindent}{0pt} \begin{document} \DocInput{\jobname.dtx} + \newpage \PrintChanges \PrintIndex \end{document} @@ -111,9 +112,10 @@ and the derived files cvss.ins, %\maketitle % \tableofcontents % +% \newpage % \section{Introduction} % -% The \textsf{cvss} package allows the user to compute CVSS3.1 base scores and use them in documents. The Common Vulnerability Scoring System (CVSS) is an open framework for communicating the characteristics and severity of software vulnerabilities. CVSS consists of three metric groups: Base, Temporal, and Environmental. +% The \textsf{cvss} package allows the user to compute CVSS 3.1 base scores and use them in documents. The Common Vulnerability Scoring System (CVSS) is an open framework for communicating the characteristics and severity of software vulnerabilities. CVSS consists of three metric groups: Base, Temporal, and Environmental. % % This packages only deal with Base score. Temporal and Environental scores will be part of a future release. % @@ -143,93 +145,93 @@ and the derived files cvss.ins, % % \subsection{Direct Macros} % \begin{function}{\cvssScore} - % \begin{syntax} - % \cs{cvssScore} \Arg{CVSS string} - % \end{syntax} +% \changes{v1.0}{2022/10/22}{Full CVSS vector as input is now supported} +% \changes{v1.1}{2022/12/02}{Full CVSS vector as input is now supported} +% \begin{syntax} +% \cs{cvssScore} \Arg{CVSS string} +% \end{syntax} % This is the main macro of this package, responsible for computing the base CVSS 3.1 score of an \marg{input vector} (without \texttt{CVSS3.1/}). The output of this macro is a floating point CVSS score, for example \texttt{5.4}. % \end{function} % -% \noindent\llap{\bfseries \textcolor{red}{Important!}\qquad}\indent -% \textbf{The CVSS vector string must be stripped from the \texttt{CVSS3.1/}!} % % % \begin{verbatim} -% \cvssScore{AV:L/AC:H/PR:N/UI:R/S:U/C:H/I:L/A:N} +% \cvssScore{CVSS:3.1/AV:L/AC:H/PR:N/UI:R/S:U/C:H/I:L/A:N} % \end{verbatim} % -% This will output the following CVSS base score: \texttt{\cvssScore{AV:L/AC:H/PR:N/UI:R/S:U/C:H/I:L/A:N}} +% This will output the following CVSS base score: \texttt{\cvssScore{CVSS:3.1/AV:L/AC:H/PR:N/UI:R/S:U/C:H/I:L/A:N}} % % % \begin{function}{\cvssScorepretty} - % \begin{syntax} - % \cs{cvssScorepretty} \Arg{CVSS string} - % \end{syntax} - % This macro will print a \textbf{colored} base CVSS 3.1 score of an \marg{input vector} (without \texttt{CVSS3.1/}). The output of this macro is a floating point CVSS score. - % \end{function} + % \begin{syntax} +% \cs{cvssScorepretty} \Arg{CVSS string} +% \end{syntax} +% This macro will print a \textbf{colored} base CVSS 3.1 score of an \marg{input vector} (without \texttt{CVSS3.1/}). The output of this macro is a floating point CVSS score. + % \end{function} % % \begin{verbatim} -% \cvssScorepretty{AV:N/AC:H/PR:H/UI:R/S:U/C:H/I:L/A:N} +% \cvssScorepretty{CVSS:3.1/AV:N/AC:H/PR:H/UI:R/S:U/C:H/I:L/A:N} % \end{verbatim} % -% This will output the following CVSS score: \cvssScorepretty{AV:N/AC:H/PR:H/UI:R/S:U/C:H/I:L/A:N} +% This will output the following CVSS score: \cvssScorepretty{CVSS:3.1/AV:N/AC:H/PR:H/UI:R/S:U/C:H/I:L/A:N} % % % \begin{function}{\cvssLevel} - % \begin{syntax} - % \cs{cvssLevel} \Arg{CVSS string} - % \end{syntax} + % \begin{syntax} + % \cs{cvssLevel} \Arg{CVSS string} + % \end{syntax} % This macro will output the CVSS level from an \marg{input vector} (without \texttt{CVSS3.1/}), for example \texttt{Info}. % \end{function} % % \begin{verbatim} -% \cvssLevel{AV:A/AC:H/PR:H/UI:R/S:U/C:H/I:L/A:N} +% \cvssLevel{CVSS:3.1/AV:A/AC:H/PR:H/UI:R/S:U/C:H/I:L/A:N} % \end{verbatim} % -% This will output the following CVSS level: \cvssLevel{AV:A/AC:H/PR:H/UI:R/S:U/C:H/I:L/A:N} +% This will output the following CVSS level: \cvssLevel{CVSS:3.1/AV:A/AC:H/PR:H/UI:R/S:U/C:H/I:L/A:N} % % % \begin{function}{\cvssLevelpretty} - % \begin{syntax} - % \cs{cvssLevelpretty} \Arg{CVSS string} - % \end{syntax} + % \begin{syntax} + % \cs{cvssLevelpretty} \Arg{CVSS string} + % \end{syntax} % This macro will output the \textbf{colored} CVSS level from an \marg{input vector} (without \texttt{CVSS3.1/}). % \end{function} % % \begin{verbatim} -% \cvssLevelpretty{AV:A/AC:H/PR:H/UI:R/S:U/C:L/I:L/A:N} +% \cvssLevelpretty{CVSS:3.1/AV:A/AC:H/PR:H/UI:R/S:U/C:L/I:L/A:N} % \end{verbatim} % -% This will output the following CVSS level: \cvssLevelpretty{AV:A/AC:H/PR:H/UI:R/S:U/C:L/I:L/A:N} +% This will output the following CVSS level: \cvssLevelpretty{CVSS:3.1/AV:A/AC:H/PR:H/UI:R/S:U/C:L/I:L/A:N} % % % \begin{function}{\cvssTag} - % \begin{syntax} - % \cs{cvssTag} \Arg{CVSS string} - % \end{syntax} + % \begin{syntax} + % \cs{cvssTag} \Arg{CVSS string} + % \end{syntax} % This macro will output a colored tag with the CVSS level inside, from an \marg{input vector} (without \texttt{CVSS3.1/}). % \end{function} % % \begin{verbatim} -% \cvssTag{AV:A/AC:H/PR:H/UI:R/S:U/C:N/I:N/A:N} +% \cvssTag{CVSS:3.1/AV:A/AC:H/PR:H/UI:R/S:U/C:N/I:N/A:N} % \end{verbatim} % -% This will output the following CVSS level: \cvssTag{AV:A/AC:H/PR:H/UI:R/S:U/C:N/I:N/A:N}. +% This will output the following CVSS level: \cvssTag{CVSS:3.1/AV:A/AC:H/PR:H/UI:R/S:U/C:N/I:N/A:N}. % % % \begin{function}{\cvssPrint} - % \begin{syntax} - % \cs{cvssPrint} \Arg{CVSS string} - % \end{syntax} - % This macro will print all details of a CVSS string: colored level, score, and hyperlink to FIRST calculator, from an \marg{input vector} (without \texttt{CVSS3.1/}). - % \end{function} +% \begin{syntax} +% \cs{cvssPrint} \Arg{CVSS string} +% \end{syntax} +% This macro will print all details of a CVSS string: colored level, score, and hyperlink to FIRST calculator, from an \marg{input vector} (without \texttt{CVSS3.1/}). +% \end{function} % % \begin{verbatim} -% \cvssPrint{AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H} +% \cvssPrint{CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H} % \end{verbatim} % % This will output the following CVSS level: % -% \cvssPrint{AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H} +% \cvssPrint{CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H} % % % @@ -238,9 +240,9 @@ and the derived files cvss.ins, % \changes{v1.0}{2022/11/03}{First public release} % % \begin{function}{\category} - % \begin{syntax} - % \cs{category} \Arg{CVSS score} - % \end{syntax} + % \begin{syntax} + % \cs{category} \Arg{CVSS score} + % \end{syntax} % This macro will output the CVSS category (None, Info, Low, Medium, High or Critical) based on the input CVSS vector passed as argument \marg{numerical score}. The mandatory argument is a floating point CVSS score, for example \texttt{5.4}. % \end{function} % @@ -252,11 +254,11 @@ and the derived files cvss.ins, % % % \begin{function}{\cvssFrame} - % \begin{syntax} - % \cs{cvssFrame} \Arg{CVSS score} - % \end{syntax} - % This macro will output a CVSS tag based on a CVSS \textbf{level} passed as argument. The mandatory argument must be one of the defined CVSS levels (None, Info, Low, Medium, High or Critical), for example \texttt{Info}. - % \end{function} +% \begin{syntax} +% \cs{cvssFrame} \Arg{CVSS score} +% \end{syntax} +% This macro will output a CVSS tag based on a CVSS \textbf{level} passed as argument. The mandatory argument must be one of the defined CVSS levels (None, Info, Low, Medium, High or Critical), for example \texttt{Info}. +% \end{function} % % \begin{verbatim} % \cvssFrame{High} @@ -270,133 +272,138 @@ and the derived files cvss.ins, % % \subsection{Direct Form} -%\begin{minipage}{.75\textwidth} - % \begin{verbatim} -%\\cvssScore{AV:L/AC:H/PR:N/UI:R/S:U/C:H/I:L/A:N} - % \end{verbatim} - %\end{minipage}% -%\begin{minipage}{0.25\textwidth} -%\cvssScore{AV:L/AC:H/PR:N/UI:R/S:U/C:H/I:L/A:N} - %\end{minipage} - -%\begin{minipage}{.75\textwidth} - % \begin{verbatim} -%\\cvssLevel{AV:L/AC:H/PR:N/UI:R/S:U/C:H/I:L/A:N} - % \end{verbatim} - %\end{minipage}% -%\begin{minipage}{0.25\textwidth} -%\cvssLevel{AV:L/AC:H/PR:N/UI:R/S:U/C:H/I:L/A:N} - %\end{minipage} +%\begin{minipage}{.85\textwidth} +% \begin{verbatim} +%\\cvssScore{CVSS:3.1/AV:L/AC:H/PR:N/UI:R/S:U/C:H/I:L/A:N} +% \end{verbatim} +%\end{minipage}% +%\begin{minipage}{0.15\textwidth} +%\cvssScore{CVSS:3.1/AV:L/AC:H/PR:N/UI:R/S:U/C:H/I:L/A:N} +%\end{minipage} +%\begin{minipage}{.85\textwidth} +% \begin{verbatim} +%\\cvssLevel{CVSS:3.1/AV:L/AC:H/PR:N/UI:R/S:U/C:H/I:L/A:N} +% \end{verbatim} +%\end{minipage}% +%\begin{minipage}{0.15\textwidth} +%\cvssLevel{CVSS:3.1/AV:L/AC:H/PR:N/UI:R/S:U/C:H/I:L/A:N} +%\end{minipage} -%\begin{minipage}{.75\textwidth} - % \begin{verbatim} -%\\cvssLevelpretty{AV:L/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:H} - % \end{verbatim} - %\end{minipage}% -%\begin{minipage}{0.25\textwidth} -%\cvssLevelpretty{AV:L/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:H} - %\end{minipage} -%\begin{minipage}{.75\textwidth} - % \begin{verbatim} -%\\cvssTag{AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H} - % \end{verbatim} - %\end{minipage}% -%\begin{minipage}{0.25\textwidth} -%\cvssTag{AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H} - %\end{minipage} +%\begin{minipage}{.85\textwidth} +% \begin{verbatim} +%\\cvssLevelpretty{CVSS:3.1/AV:L/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:H} +% \end{verbatim} +%\end{minipage}% +%\begin{minipage}{0.15\textwidth} +%\cvssLevelpretty{CVSS:3.1/AV:L/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:H} +%\end{minipage} +%\begin{minipage}{.85\textwidth} +% \begin{verbatim} +%\\cvssTag{CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H} +% \end{verbatim} +%\end{minipage}% +%\begin{minipage}{0.15\textwidth} +%\cvssTag{CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H} +%\end{minipage}% +%\newline % -% The vuln has a \textbf{\cvssLevel{AV:L/AC:H/PR:N/UI:R/S:U/C:H/I:L/A:N}}-level and we can output it inline. +% We can thus embed this in text lines like this: +% \begin{verbatim} +%\\textbf{\cvssLevel{CVSS:3.1/AV:L/AC:H/PR:N/UI:R/S:U/C:H/I:L/A:N}}-level +% \end{verbatim} +% +% Which will be rendered like this : \textit{the vuln has a \textbf{\cvssLevel{CVSS:3.1/AV:L/AC:H/PR:N/UI:R/S:U/C:H/I:L/A:N}}-level and we can output it inline.} %\subsection{Imbricated Form} %\begin{minipage}{.5\textwidth} - % \begin{verbatim} - %\cvssFrame{Low} - % \end{verbatim} - %\end{minipage}% +% \begin{verbatim} +%\\cvssFrame{Low} +% \end{verbatim} +%\end{minipage}% %\begin{minipage}{0.5\textwidth} - %\cvssFrame{Low} +%\cvssFrame{Low} %\end{minipage} %\begin{minipage}{.5\textwidth} % \begin{verbatim} - %\category{9.9} +%%\category{9.9} % \end{verbatim} %\end{minipage}% %\begin{minipage}{0.5\textwidth} - %\category{9.9} +%\category{9.9} %\end{minipage} +%\newline % % We can even combine them: % \begin{verbatim} -%\\category{\cvssScore{AV:L/AC:H/PR:N/UI:R/S:U/C:H/I:L/A:N}} +%\\category{\cvssScore{CVSS:3.1/AV:L/AC:H/PR:N/UI:R/S:U/C:H/I:L/A:N}} % \end{verbatim} % -%And this outputs: \category{\cvssScore{AV:L/AC:H/PR:N/UI:R/S:U/C:H/I:L/A:N}} +%And this outputs: \category{\cvssScore{CVSS:3.1/AV:L/AC:H/PR:N/UI:R/S:U/C:H/I:L/A:N}} % % \begin{verbatim} -%\\cvssFrame{\category{\cvssScore{AV:L/AC:H/PR:N/UI:R/S:U/C:H/I:L/A:N}}} +%\\cvssFrame{\category{\cvssScore{CVSS:3.1/AV:L/AC:H/PR:N/UI:R/S:U/C:H/I:L/A:N}}} % \end{verbatim} -% And the result is: %\cvssFrame{\category{\cvssScore{AV:L/AC:H/PR:N/UI:R/S:U/C:H/I:L/A:N}}} +% And the result is: %\cvssFrame{\category{\cvssScore{CVSS:3.1/AV:L/AC:H/PR:N/UI:R/S:U/C:H/I:L/A:N}}} % %\subsection{Test Computations} % \begin{verbatim} -% Should be 7.3: \cvssScore{AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:L} +% Should be 7.3: \cvssScore{CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:L} % -% Should be 8.3: \cvssScore{AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:L} +% Should be 8.3: \cvssScore{CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:L} % -% Should be 9.9: \cvssScore{AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:H} +% Should be 9.9: \cvssScore{CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:H} % -% Should be 9.9: \cvssScore{AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:H/A:L} +% Should be 9.9: \cvssScore{CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:H/A:L} % -% Should be 7.2: \cvssScore{AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N} +% Should be 7.2: \cvssScore{CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N} % -% Should be 7.1: \cvssScore{AV:A/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:L} +% Should be 7.1: \cvssScore{CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:L} % -% Should be 5.8: \cvssScore{AV:A/AC:H/PR:N/UI:N/S:C/C:L/I:L/A:L} +% Should be 5.8: \cvssScore{CVSS:3.1/AV:A/AC:H/PR:N/UI:N/S:C/C:L/I:L/A:L} % -% Should be 5.5: \cvssScore{AV:A/AC:H/PR:L/UI:N/S:C/C:L/I:L/A:L} +% Should be 5.5: \cvssScore{CVSS:3.1/AV:A/AC:H/PR:L/UI:N/S:C/C:L/I:L/A:L} % -% Should be 5.1: \cvssScore{AV:A/AC:H/PR:L/UI:R/S:C/C:L/I:L/A:L} +% Should be 5.1: \cvssScore{CVSS:3.1/AV:A/AC:H/PR:L/UI:R/S:C/C:L/I:L/A:L} % -% Should be 4.3: \cvssScore{AV:A/AC:H/PR:L/UI:R/S:U/C:L/I:L/A:L} +% Should be 4.3: \cvssScore{CVSS:3.1/AV:A/AC:H/PR:L/UI:R/S:U/C:L/I:L/A:L} % -% Should be 2.4: \cvssScore{AV:N/AC:L/PR:H/UI:R/S:U/C:L/I:N/A:N} +% Should be 2.4: \cvssScore{CVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:U/C:L/I:N/A:N} % -% Should be 0.0: \cvssScore{AV:N/AC:L/PR:N/UI:N/S:C/C:N/I:N/A:N} +% Should be 0.0: \cvssScore{CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:N/I:N/A:N} % \end{verbatim} % % And the results of the computations: % -%Should be 7.3: \cvssScore{AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:L} +%Should be 7.3: \cvssScore{CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:L} % -%Should be 8.3: \cvssScore{AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:L}% +%Should be 8.3: \cvssScore{CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:L}% % -%Should be 9.9: \cvssScore{AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:H}% +%Should be 9.9: \cvssScore{CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:H}% % -%Should be 9.9: \cvssScore{AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:H/A:L}% +%Should be 9.9: \cvssScore{CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:H/A:L}% % -%Should be 7.2: \cvssScore{AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N}% +%Should be 7.2: \cvssScore{CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N}% % -%Should be 7.1: \cvssScore{AV:A/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:L}% +%Should be 7.1: \cvssScore{CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:L}% % -%Should be 5.8: \cvssScore{AV:A/AC:H/PR:N/UI:N/S:C/C:L/I:L/A:L}% +%Should be 5.8: \cvssScore{CVSS:3.1/AV:A/AC:H/PR:N/UI:N/S:C/C:L/I:L/A:L}% % -%Should be 5.5: \cvssScore{AV:A/AC:H/PR:L/UI:N/S:C/C:L/I:L/A:L}% +%Should be 5.5: \cvssScore{CVSS:3.1/AV:A/AC:H/PR:L/UI:N/S:C/C:L/I:L/A:L}% % -%Should be 5.1: \cvssScore{AV:A/AC:H/PR:L/UI:R/S:C/C:L/I:L/A:L}% +%Should be 5.1: \cvssScore{CVSS:3.1/AV:A/AC:H/PR:L/UI:R/S:C/C:L/I:L/A:L}% % -%Should be 4.3: \cvssScore{AV:A/AC:H/PR:L/UI:R/S:U/C:L/I:L/A:L}% +%Should be 4.3: \cvssScore{CVSS:3.1/AV:A/AC:H/PR:L/UI:R/S:U/C:L/I:L/A:L}% % -%Should be 2.4: \cvssScore{AV:N/AC:L/PR:H/UI:R/S:U/C:L/I:N/A:N} +%Should be 2.4: \cvssScore{CVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:U/C:L/I:N/A:N} % -%Should be 0.0: \cvssScore{AV:N/AC:L/PR:N/UI:N/S:C/C:N/I:N/A:N} +%Should be 0.0: \cvssScore{CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:N/I:N/A:N} % % \end{documentation} %\newpage -% \StopEventually{\setlength\IndexMin{200pt} \PrintIndex } % \begin{implementation} % \section{Implementation} % \subsection{Initial set up} @@ -447,6 +454,7 @@ and the derived files cvss.ins, \msg_new:nnn { CVSS } { invalid-option }{ Value~'#2'~invalid~for~#1~#3.} \msg_new:nnn { CVSS } { invalid-structure } { CVSS~metric~#1~is~not~correct~(#2)~#3.} \msg_new:nnn { CVSS } { invalid-length } { CVSS~vector~"#1"~is~badly~formatted~#2.} +\msg_new:nnn { CVSS } { wrong-version } { Wrong~CVSS~version~(#2)~#3.} % \end{macrocode}% % % @@ -709,70 +717,82 @@ and the derived files cvss.ins, %\begin{macro}{\cvssScore} % \begin{macrocode} \NewExpandableDocumentCommand \cvssScore { m }{% - - % Check that there are 35 chars - \int_compare:nNnTF { \str_count_ignore_spaces:n {#1} } = {35}{}{ - \msg_error:nnxx{CVSS}{invalid-length}{#1}{\msg_line_context:} - } - % Check AV value - \str_if_eq:eeTF {\str_range:nnn {#1} {1} {3}} {AV:} - {} { - \msg_error:nnxxx{CVSS}{invalid-structure}{AV}{\str_range:nnn {#1} {1} {3}}{\msg_line_context:} - } - - % Check AC value - \str_if_eq:eeTF {\str_range:nnn {#1} {5} {8}} {/AC:} - {} { - \msg_error:nnxxx{CVSS}{invalid-structure}{AC}{\str_range:nnn {#1} {5} {8}}{\msg_line_context:} - } - - - % Check PR value - \str_if_eq:eeTF {\str_range:nnn {#1} {10} {13}} {/PR:} - {} { - \msg_error:nnxxx{CVSS}{invalid-structure}{PR}{\str_range:nnn {#1} {10} {13}}{\msg_line_context:} - } - - % Check UI value - \str_if_eq:eeTF {\str_range:nnn {#1} {15} {18}} {/UI:} - {} { - \msg_error:nnxxx{CVSS}{invalid-structure}{UI}{\str_range:nnn {#1} {15} {18}}{\msg_line_context:} - } - - % Check S value - \str_if_eq:eeTF {\str_range:nnn {#1} {20} {22}} {/S:} - {} { - \msg_error:nnxxx{CVSS}{invalid-structure}{S}{\str_range:nnn {#1} {20} {22}}{\msg_line_context:} - } - - % Check I value - \str_if_eq:eeTF {\str_range:nnn {#1} {24} {26}} {/C:} - {} { - \msg_error:nnxxx{CVSS}{invalid-structure}{C}{\str_range:nnn {#1} {24} {26}}{\msg_line_context:} - } - - % Check I value - \str_if_eq:eeTF {\str_range:nnn {#1} {28} {30}} {/I:} - {} { - \msg_error:nnxxx{CVSS}{invalid-structure}{I}{\str_range:nnn {#1} {28} {30}}{\msg_line_context:} - } - - % Check A value - \str_if_eq:eeTF {\str_range:nnn {#1} {32} {34}} {/A:} - {} { - \msg_error:nnxxx{CVSS}{invalid-structure}{A}{\str_range:nnn {#1} {32} {34}}{\msg_line_context:} - } - - \exp_args:Ne \__CVSS_cvssBaseScore:nnnnnnnn - { \str_use:N \str_item_ignore_spaces:nn { #1 }{ 4 } } - { \str_use:N \str_item_ignore_spaces:nn { #1 }{ 9 } } - { \str_use:N \str_item_ignore_spaces:nn { #1 }{ 14 } } - { \str_use:N \str_item_ignore_spaces:nn { #1 }{ 19 } } - { \str_use:N \str_item_ignore_spaces:nn { #1 }{ 23 } } - { \str_use:N \str_item_ignore_spaces:nn { #1 }{ 27 } } - { \str_use:N \str_item_ignore_spaces:nn { #1 }{ 31 } } - { \str_use:N \str_item_ignore_spaces:nn { #1 }{ 35 } } - + % Check that there are 44 chars + \int_compare:nNnTF { \str_count_ignore_spaces:n {#1} } = {44}{}{ + \msg_error:nnxx{CVSS}{invalid-length}{#1}{\msg_line_context:} + } + % Check CVSS: value + \str_if_eq:eeTF {\str_range:nnn {#1} {1} {5}} {CVSS:} + {} { + \msg_error:nnxxx{CVSS}{invalid-structure}{AV}{\str_range:nnn {#1} {1} {5}}{\msg_line_context:} + } + % Check 3.1 value + \str_if_eq:eeTF {\str_range:nnn {#1} {6} {8}} {3.1} + {} { + \msg_error:nnxxx{CVSS}{wrong-version}{3.1}{\str_range:nnn {#1} {6} {8}}{\msg_line_context:} + } + % Check 3.1 value + \str_if_eq:eeTF {\str_range:nnn {#1} {9} {9}} {/} + {} { + \msg_error:nnxxx{CVSS}{wrong-version}{/}{\str_range:nnn {#1} {9} {9}}{\msg_line_context:} + } + % Check AV value + \str_if_eq:eeTF {\str_range:nnn {#1} {10} {12}} {AV:} + {} { + \msg_error:nnxxx{CVSS}{invalid-structure}{AV}{\str_range:nnn {#1} {10} {12}}{\msg_line_context:} + } + % Check AC value + \str_if_eq:eeTF {\str_range:nnn {#1} {14} {17}} {/AC:} + {} { + \msg_error:nnxxx{CVSS}{invalid-structure}{AC}{\str_range:nnn {#1} {14} {17}}{\msg_line_context:} + } + + + % Check PR value + \str_if_eq:eeTF {\str_range:nnn {#1} {19} {22}} {/PR:} + {} { + \msg_error:nnxxx{CVSS}{invalid-structure}{PR}{\str_range:nnn {#1} {19} {22}}{\msg_line_context:} + } + + % Check UI value + \str_if_eq:eeTF {\str_range:nnn {#1} {24} {27}} {/UI:} + {} { + \msg_error:nnxxx{CVSS}{invalid-structure}{UI}{\str_range:nnn {#1} {24} {27}}{\msg_line_context:} + } + + % Check S value + \str_if_eq:eeTF {\str_range:nnn {#1} {29} {31}} {/S:} + {} { + \msg_error:nnxxx{CVSS}{invalid-structure}{S}{\str_range:nnn {#1} {29} {31}}{\msg_line_context:} + } + + % Check I value + \str_if_eq:eeTF {\str_range:nnn {#1} {33} {35}} {/C:} + {} { + \msg_error:nnxxx{CVSS}{invalid-structure}{C}{\str_range:nnn {#1} {33} {35}}{\msg_line_context:} + } + + % Check I value + \str_if_eq:eeTF {\str_range:nnn {#1} {37} {39}} {/I:} + {} { + \msg_error:nnxxx{CVSS}{invalid-structure}{I}{\str_range:nnn {#1} {37} {39}}{\msg_line_context:} + } + + % Check A value + \str_if_eq:eeTF {\str_range:nnn {#1} {41} {43}} {/A:} + {} { + \msg_error:nnxxx{CVSS}{invalid-structure}{A}{\str_range:nnn {#1} {41} {43}}{\msg_line_context:} + } + + \exp_args:Ne \__CVSS_cvssBaseScore:nnnnnnnn + { \str_use:N \str_item_ignore_spaces:nn { #1 }{ 13 } } + { \str_use:N \str_item_ignore_spaces:nn { #1 }{ 18 } } + { \str_use:N \str_item_ignore_spaces:nn { #1 }{ 23 } } + { \str_use:N \str_item_ignore_spaces:nn { #1 }{ 28 } } + { \str_use:N \str_item_ignore_spaces:nn { #1 }{ 32 } } + { \str_use:N \str_item_ignore_spaces:nn { #1 }{ 36 } } + { \str_use:N \str_item_ignore_spaces:nn { #1 }{ 40 } } + { \str_use:N \str_item_ignore_spaces:nn { #1 }{ 44 } } }% \ExplSyntaxOff % \end{macrocode} @@ -881,12 +901,13 @@ and the derived files cvss.ins, % \subsubsection{Full CVSS display} % We can even have a nice all-in display of the category, the scrore and a hyperlink to the FIRST calculator using a combination of all the functions we've defined: %\begin{macro}{\cvssPrint} +% {v1.1}{2022/11/30}{Full CVSS vector as input is now supported} % This macro will output the \textbf{colored} CVSS level based on the numerical CVSS score. % \begin{macrocode} \newcommand{\cvssPrint}[1]{% \def\CVSSscore{\cvssScore{#1}} \cvssFrame{\category{\CVSSscore}} \quad \CVSSscore \quad% - \href{https://www.first.org/cvss/calculator/3.1\#CVSS:3.1/#1}{CVSS:3.1/#1} + \href{https://www.first.org/cvss/calculator/3.1\##1}{#1} }% % \end{macrocode} %\end{macro} diff --git a/cvss.ins b/cvss.ins index a11eb8b..4b2b03a 100644 --- a/cvss.ins +++ b/cvss.ins @@ -49,67 +49,28 @@ and the derived files cvss.ins, \file{\jobname.sty}{\from{\jobname.dtx}{package}} } \endbatchfile - % \begin{syntax} - % \cs{cvssScore} \Arg{CVSS string} - % \end{syntax} - % \begin{syntax} - % \cs{cvssScorepretty} \Arg{CVSS string} - % \end{syntax} - % This macro will print a \textbf{colored} base CVSS 3.1 score of an \marg{input vector} (without \texttt{CVSS3.1/}). The output of this macro is a floating point CVSS score. - % \end{function} - % \begin{syntax} - % \cs{cvssLevel} \Arg{CVSS string} - % \end{syntax} - % \begin{syntax} - % \cs{cvssLevelpretty} \Arg{CVSS string} - % \end{syntax} - % \begin{syntax} - % \cs{cvssTag} \Arg{CVSS string} - % \end{syntax} - % \begin{syntax} - % \cs{cvssPrint} \Arg{CVSS string} - % \end{syntax} - % This macro will print all details of a CVSS string: colored level, score, and hyperlink to FIRST calculator, from an \marg{input vector} (without \texttt{CVSS3.1/}). - % \end{function} - % \begin{syntax} - % \cs{category} \Arg{CVSS score} - % \end{syntax} - % \begin{syntax} - % \cs{cvssFrame} \Arg{CVSS score} - % \end{syntax} - % This macro will output a CVSS tag based on a CVSS \textbf{level} passed as argument. The mandatory argument must be one of the defined CVSS levels (None, Info, Low, Medium, High or Critical), for example \texttt{Info}. - % \end{function} + % \begin{syntax} + % \end{function} + % \begin{syntax} + % \cs{cvssLevel} \Arg{CVSS string} + % \end{syntax} + % \begin{syntax} + % \cs{cvssLevelpretty} \Arg{CVSS string} + % \end{syntax} + % \begin{syntax} + % \cs{cvssTag} \Arg{CVSS string} + % \end{syntax} + % \begin{syntax} + % \cs{category} \Arg{CVSS score} + % \end{syntax} - % \begin{verbatim} - % \end{verbatim} - %\end{minipage}% - %\end{minipage} - % \begin{verbatim} - % \end{verbatim} - %\end{minipage}% - %\end{minipage} - % \begin{verbatim} - % \end{verbatim} - %\end{minipage}% - %\end{minipage} - % \begin{verbatim} - % \end{verbatim} - %\end{minipage}% - %\end{minipage} - % \begin{verbatim} - %\cvssFrame{Low} - % \end{verbatim} - %\end{minipage}% - %\cvssFrame{Low} - - %\category{9.9} - %\category{9.9} +%%\category{9.9} \RequirePackage{expl3} \RequirePackage[skins]{tcolorbox} \tcbuselibrary{xparse} @@ -132,6 +93,7 @@ and the derived files cvss.ins, \msg_new:nnn { CVSS } { invalid-option }{ Value~'#2'~invalid~for~#1~#3.} \msg_new:nnn { CVSS } { invalid-structure } { CVSS~metric~#1~is~not~correct~(#2)~#3.} \msg_new:nnn { CVSS } { invalid-length } { CVSS~vector~"#1"~is~badly~formatted~#2.} +\msg_new:nnn { CVSS } { wrong-version } { Wrong~CVSS~version~(#2)~#3.} \cs_new:Npn \__CVSS_parseAV:n #1 { \str_case_e:nnF {#1} @@ -265,69 +227,81 @@ and the derived files cvss.ins, }% } \NewExpandableDocumentCommand \cvssScore { m }{% + % Check that there are 44 chars + \int_compare:nNnTF { \str_count_ignore_spaces:n {#1} } = {44}{}{ + \msg_error:nnxx{CVSS}{invalid-length}{#1}{\msg_line_context:} + } + % Check CVSS: value + \str_if_eq:eeTF {\str_range:nnn {#1} {1} {5}} {CVSS:} + {} { + \msg_error:nnxxx{CVSS}{invalid-structure}{AV}{\str_range:nnn {#1} {1} {5}}{\msg_line_context:} + } + % Check 3.1 value + \str_if_eq:eeTF {\str_range:nnn {#1} {6} {8}} {3.1} + {} { + \msg_error:nnxxx{CVSS}{wrong-version}{3.1}{\str_range:nnn {#1} {6} {8}}{\msg_line_context:} + } + % Check 3.1 value + \str_if_eq:eeTF {\str_range:nnn {#1} {9} {9}} {/} + {} { + \msg_error:nnxxx{CVSS}{wrong-version}{/}{\str_range:nnn {#1} {9} {9}}{\msg_line_context:} + } + % Check AV value + \str_if_eq:eeTF {\str_range:nnn {#1} {10} {12}} {AV:} + {} { + \msg_error:nnxxx{CVSS}{invalid-structure}{AV}{\str_range:nnn {#1} {10} {12}}{\msg_line_context:} + } + % Check AC value + \str_if_eq:eeTF {\str_range:nnn {#1} {14} {17}} {/AC:} + {} { + \msg_error:nnxxx{CVSS}{invalid-structure}{AC}{\str_range:nnn {#1} {14} {17}}{\msg_line_context:} + } - % Check that there are 35 chars - \int_compare:nNnTF { \str_count_ignore_spaces:n {#1} } = {35}{}{ - \msg_error:nnxx{CVSS}{invalid-length}{#1}{\msg_line_context:} - } - % Check AV value - \str_if_eq:eeTF {\str_range:nnn {#1} {1} {3}} {AV:} - {} { - \msg_error:nnxxx{CVSS}{invalid-structure}{AV}{\str_range:nnn {#1} {1} {3}}{\msg_line_context:} - } + % Check PR value + \str_if_eq:eeTF {\str_range:nnn {#1} {19} {22}} {/PR:} + {} { + \msg_error:nnxxx{CVSS}{invalid-structure}{PR}{\str_range:nnn {#1} {19} {22}}{\msg_line_context:} + } - % Check AC value - \str_if_eq:eeTF {\str_range:nnn {#1} {5} {8}} {/AC:} - {} { - \msg_error:nnxxx{CVSS}{invalid-structure}{AC}{\str_range:nnn {#1} {5} {8}}{\msg_line_context:} - } + % Check UI value + \str_if_eq:eeTF {\str_range:nnn {#1} {24} {27}} {/UI:} + {} { + \msg_error:nnxxx{CVSS}{invalid-structure}{UI}{\str_range:nnn {#1} {24} {27}}{\msg_line_context:} + } - % Check PR value - \str_if_eq:eeTF {\str_range:nnn {#1} {10} {13}} {/PR:} - {} { - \msg_error:nnxxx{CVSS}{invalid-structure}{PR}{\str_range:nnn {#1} {10} {13}}{\msg_line_context:} - } + % Check S value + \str_if_eq:eeTF {\str_range:nnn {#1} {29} {31}} {/S:} + {} { + \msg_error:nnxxx{CVSS}{invalid-structure}{S}{\str_range:nnn {#1} {29} {31}}{\msg_line_context:} + } - % Check UI value - \str_if_eq:eeTF {\str_range:nnn {#1} {15} {18}} {/UI:} - {} { - \msg_error:nnxxx{CVSS}{invalid-structure}{UI}{\str_range:nnn {#1} {15} {18}}{\msg_line_context:} - } + % Check I value + \str_if_eq:eeTF {\str_range:nnn {#1} {33} {35}} {/C:} + {} { + \msg_error:nnxxx{CVSS}{invalid-structure}{C}{\str_range:nnn {#1} {33} {35}}{\msg_line_context:} + } - % Check S value - \str_if_eq:eeTF {\str_range:nnn {#1} {20} {22}} {/S:} - {} { - \msg_error:nnxxx{CVSS}{invalid-structure}{S}{\str_range:nnn {#1} {20} {22}}{\msg_line_context:} - } - - % Check I value - \str_if_eq:eeTF {\str_range:nnn {#1} {24} {26}} {/C:} - {} { - \msg_error:nnxxx{CVSS}{invalid-structure}{C}{\str_range:nnn {#1} {24} {26}}{\msg_line_context:} - } - - % Check I value - \str_if_eq:eeTF {\str_range:nnn {#1} {28} {30}} {/I:} - {} { - \msg_error:nnxxx{CVSS}{invalid-structure}{I}{\str_range:nnn {#1} {28} {30}}{\msg_line_context:} - } - - % Check A value - \str_if_eq:eeTF {\str_range:nnn {#1} {32} {34}} {/A:} - {} { - \msg_error:nnxxx{CVSS}{invalid-structure}{A}{\str_range:nnn {#1} {32} {34}}{\msg_line_context:} - } + % Check I value + \str_if_eq:eeTF {\str_range:nnn {#1} {37} {39}} {/I:} + {} { + \msg_error:nnxxx{CVSS}{invalid-structure}{I}{\str_range:nnn {#1} {37} {39}}{\msg_line_context:} + } - \exp_args:Ne \__CVSS_cvssBaseScore:nnnnnnnn - { \str_use:N \str_item_ignore_spaces:nn { #1 }{ 4 } } - { \str_use:N \str_item_ignore_spaces:nn { #1 }{ 9 } } - { \str_use:N \str_item_ignore_spaces:nn { #1 }{ 14 } } - { \str_use:N \str_item_ignore_spaces:nn { #1 }{ 19 } } - { \str_use:N \str_item_ignore_spaces:nn { #1 }{ 23 } } - { \str_use:N \str_item_ignore_spaces:nn { #1 }{ 27 } } - { \str_use:N \str_item_ignore_spaces:nn { #1 }{ 31 } } - { \str_use:N \str_item_ignore_spaces:nn { #1 }{ 35 } } + % Check A value + \str_if_eq:eeTF {\str_range:nnn {#1} {41} {43}} {/A:} + {} { + \msg_error:nnxxx{CVSS}{invalid-structure}{A}{\str_range:nnn {#1} {41} {43}}{\msg_line_context:} + } + \exp_args:Ne \__CVSS_cvssBaseScore:nnnnnnnn + { \str_use:N \str_item_ignore_spaces:nn { #1 }{ 13 } } + { \str_use:N \str_item_ignore_spaces:nn { #1 }{ 18 } } + { \str_use:N \str_item_ignore_spaces:nn { #1 }{ 23 } } + { \str_use:N \str_item_ignore_spaces:nn { #1 }{ 28 } } + { \str_use:N \str_item_ignore_spaces:nn { #1 }{ 32 } } + { \str_use:N \str_item_ignore_spaces:nn { #1 }{ 36 } } + { \str_use:N \str_item_ignore_spaces:nn { #1 }{ 40 } } + { \str_use:N \str_item_ignore_spaces:nn { #1 }{ 44 } } }% \ExplSyntaxOff \ExplSyntaxOn @@ -377,7 +351,7 @@ and the derived files cvss.ins, \newcommand{\cvssPrint}[1]{% \def\CVSSscore{\cvssScore{#1}} \cvssFrame{\category{\CVSSscore}} \quad \CVSSscore \quad% - \href{https://www.first.org/cvss/calculator/3.1\#CVSS:3.1/#1}{CVSS:3.1/#1} + \href{https://www.first.org/cvss/calculator/3.1\##1}{#1} }% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/cvss.pdf b/cvss.pdf index b92d3a84a75d7a25d8943c37831ac1111bee717f..74322dd86d146d324a9912669acf9b99885629c4 100644 GIT binary patch delta 306565 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

356YCnMdBVM_R=q^*T>L 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