Пример #1
0
    def create(item: dict):
        if '** REJECT **' not in CveFactory.summary(item):
            old = CveDocument.search().filter(
                'term', id=CveFactory.get_id(item)).sort(
                    '-last_modified_date')[0].execute()
            if old.hits:
                last_modified_date = old.hits[0].last_modified_date
            else:
                last_modified_date = None

            if not last_modified_date or last_modified_date < CveFactory.last_modified_date(
                    item):
                cve = CveDocument(id=CveFactory.get_id(item))
                for field in CveDocument.get_fields_name():
                    parser = getattr(CveFactory, field, None)
                    if parser:
                        try:
                            setattr(cve, field, parser(item))
                        except Exception as err:
                            logging.debug(
                                F'cve id {cve.id}, field {field}, err {err}')

                for cpe in CveFactory.get_cpe(item):
                    cve.cpe.append(cpe)

                if old.hits and cve.has_changed(old.hits[0]):
                    return old.hits[0].update(cve, weak=True)
                else:
                    return cve.save(weak=True)

            return None

        logging.info(F'cve id {CveFactory.get_id(item)} is rejected')
        return None
Пример #2
0
 def test_exploitability_v3(self, av, ac, scope, pr, ui, expected):
     cve = CveDocument(attack_vector_v3=av,
                       attack_complexity_v3=ac,
                       scope_v3=scope,
                       privileges_required_v3=pr,
                       user_interaction_v3=ui)
     self.assertEqual(round(tasks.exploitability_v3(cve), 2), expected)
Пример #3
0
    def _create_nessus_cve(self, item):
        cve = CveDocument()
        cve.id = 'NESSUS-{}'.format(item.get('pluginID'))

        base_score_v2 = get_value(item.find('cvss_base_score'))
        if base_score_v2:
            cve.base_score_v2 = float(base_score_v2)

        base_score_v3 = get_value(item.find('cvss3_base_score'))
        if base_score_v3:
            cve.base_score_v3 = float(base_score_v3)

        cve = self._create_nessus_cve_cvss3_vector(item, cve)
        cve = self._create_nessus_cve_cvss_vector(item, cve)
        return cve
Пример #4
0
    def get_cve(cve_id, oid, tags):

        if cve_id == 'NOCVE':
            cve_id = F'NOCVE-{oid}'
            cve = CveDocument.get_or_create(cve_id=cve_id)

            vector = tags['cvss_base_vector']
            vector = dict(x.split(':') for x in vector.split('/'))
            new_cve = CveDocument(id=cve_id)
            new_cve.access_vector_v2 = metrics.AccessVectorV2(vector['AV'])
            new_cve.access_complexity_v2 = metrics.AccessComplexityV2(vector['AC'])
            new_cve.authentication_v2 = metrics.AuthenticationV2(vector['Au'])
            new_cve.confidentiality_impact_v2 = metrics.ImpactV2(vector['C'])
            new_cve.integrity_impact_v2 = metrics.ImpactV2(vector['I'])
            new_cve.availability_impact_v2 = metrics.ImpactV2(vector['A'])
            new_cve.base_score_v2 = calculate_base_score_v2(new_cve)
            if cve.has_changed(new_cve):
                return cve.update(new_cve, refresh=True)
            return cve

        return CveDocument.get_or_create(cve_id=cve_id)
Пример #5
0
def create_cve(cve_id='CVE-2017-0002', save=True) -> CveDocument:
    cve = CveDocument(id=cve_id,
                      base_score_v2=6.8,
                      access_vector_v2=metrics.AccessVectorV2.NETWORK,
                      access_complexity_v2=metrics.AccessComplexityV2.MEDIUM,
                      authentication_v2=metrics.AuthenticationV2.NONE,
                      confidentiality_impact_v2=metrics.ImpactV2.PARTIAL,
                      integrity_impact_v2=metrics.ImpactV2.PARTIAL,
                      availability_impact_v2=metrics.ImpactV2.PARTIAL,
                      base_score_v3=8.8,
                      attack_vector_v3=metrics.AttackVectorV3.NETWORK,
                      attack_complexity_v3=metrics.AttackComplexityV3.LOW,
                      privileges_required_v3=metrics.PrivilegesRequiredV3.NONE,
                      user_interaction_v3=metrics.UserInteractionV3.REQUIRED,
                      scope_v3=metrics.ScopeV3.UNCHANGED,
                      confidentiality_impact_v3=metrics.ImpactV3.HIGH,
                      integrity_impact_v3=metrics.ImpactV3.HIGH,
                      availability_impact_v3=metrics.ImpactV3.HIGH)
    if save:
        cve.save()
    return cve