Reconmap/web-client

View on GitHub
src/components/vulnerabilities/VulnerabilityDescriptionPanel.jsx

Summary

Maintainability
B
4 hrs
Test Coverage
import CvssScore from "components/badges/CvssScore";
import RiskBadge from "components/badges/RiskBadge";
import ProjectBadge from "components/projects/ProjectBadge";
import TargetBadge from "components/target/TargetBadge";
import EmptyField from "components/ui/EmptyField";
import ExternalLink from "components/ui/ExternalLink";
import TimestampsSection from "components/ui/TimestampsSection";
import UserLink from "components/users/Link";
import ReactMarkdown from "react-markdown";
import { Link } from "react-router-dom";
import VulnerabilityCategorySpan from "./categories/Span";
import CvssAbbr from "./CvssAbbr";
import VulnerabilityStatusBadge from "./StatusBadge";

const VulnerabilityDescriptionPanel = ({ vulnerability }) => {
    return <div className="grid grid-two">
        <div>
            <h4>Description</h4>
            {vulnerability.description ? <ReactMarkdown>{vulnerability.description}</ReactMarkdown> : <EmptyField />}

            <h4>Proof of concept</h4>
            {vulnerability.proof_of_concept ? <ReactMarkdown>{vulnerability.proof_of_concept}</ReactMarkdown> : <EmptyField />}

            <h4>Impact</h4>
            {vulnerability.impact ? <ReactMarkdown>{vulnerability.impact}</ReactMarkdown> : <EmptyField />}

            <h4>Category</h4>
            <p><VulnerabilityCategorySpan name={vulnerability.category_name} parentName={vulnerability.parent_category_name} /></p>

            <h4>Properties</h4>
            <dl>
                <dt>Status</dt>
                <dd><VulnerabilityStatusBadge vulnerability={vulnerability} /></dd>

                <dt>Risk</dt>
                <dd><RiskBadge risk={vulnerability.risk} /></dd>

                {vulnerability.cvss_score && <>
                    <dt><CvssAbbr /> score</dt>
                    <dd><CvssScore score={vulnerability.cvss_score} /></dd>
                </>}

                {vulnerability.cvss_vector && <>
                    <dt>CVSS vector</dt>
                    <dd><ExternalLink
                        href={`https://www.first.org/cvss/calculator/3.0#${vulnerability.cvss_vector}`}>{vulnerability.cvss_vector}</ExternalLink>
                    </dd>
                </>}

                {vulnerability.owasp_vector && <>
                    <dt>OWASP vector</dt>
                    <dd>{vulnerability.owasp_vector}
                    </dd>
                </>}
                {vulnerability.owasp_overall && <>
                    <dt>OWASP overall score</dt>
                    <dd>{vulnerability.owasp_overall}
                    </dd>
                </>}
                {vulnerability.owasp_likehood && <>
                    <dt>OWASP likehood score</dt>
                    <dd>{vulnerability.owasp_likehood}
                    </dd>
                </>}
                {vulnerability.owasp_impact && <>
                    <dt>OWASP impact score</dt>
                    <dd>{vulnerability.owasp_impact}
                    </dd>
                </>}
            </dl>
        </div>

        <div>
            <h4>Relations</h4>
            <dl>
                {!vulnerability.is_template && <>
                    <dt>Project</dt>
                    <dd>{vulnerability.project_id ?
                        <ProjectBadge project={{ id: vulnerability.project_id, name: vulnerability.project_name }} /> : '-'}</dd>
                </>}

                {vulnerability.target_id !== null && vulnerability.target_id !== 0 && <>
                    <dt>Affected target</dt>
                    <dd><Link to={`/targets/${vulnerability.target_id}`}><TargetBadge name={vulnerability.target_name}>{vulnerability.target_id ? `${vulnerability.target_name} (${vulnerability.target_kind})` : "-"}</TargetBadge></Link></dd>
                </>}

                <dt>Created by</dt>
                <dd><UserLink userId={vulnerability.creator_uid}>{vulnerability.creator_full_name}</UserLink></dd>
            </dl>

            <TimestampsSection entity={vulnerability} />
        </div>
    </div>
}

export default VulnerabilityDescriptionPanel;